Имеется набор сложных данных, объединённых в группы
Все группы имеют TTL
Есть функция доступа к данным через связи с группами FIND
Протокол доступа предусматривает три реакции в случае истечения TTL
- промолчать – значит можно удалить группу и данные и запустить обновление
- ответить ошибкой – значит можно удалить группу и данные и запустить обновление
- вернуть значение не смотря на устаревание – значит должен быть кеш данных
тип реакции хранится в свойствах групп
При этом, после обнаружения истечения TTL группы запускается поток обновления данных всей группы
Обновление может растянуться на 4 байта секунд в случае проблем связи
Метод обновления так же описан в свойствах группы
Нужно исключить параллельный запуск обновления одной группы и перестать учитывать TTL группы просроченных данных в кеше
Группы и данные хранятся в uthash таблицах groups и records для хранения данных для кеша для групп с 3 типом реакции реализовал параллельную таблицу cache_groups
FIND в поисках группы оббегает сначала groups и при неуспехе ищет в cache_groups
в случает обнаружения истечения TTL ==> меняю в группе свойство active=0
и отправляю указатель на группу в очередь для обновлений
обновление подразумевает получение набора данных для генерации новых значений records для groups (разными методами)
если использовать метод первоначальной инциализации данных, а он длинный и не линейный, то получается, что FIND начнёт видеть перед кешем ещё не полностью восстановленные данные группы
как восстановить данные после обновления?
в обновлении генерировать в GROUPS скрытый для FIND набор данных для группы
или как то другому можно управлять кешированием?