Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TaggableDaoWorker #85

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open

Conversation

AlexeyDsov
Copy link
Member

Обещанный TaggableDaoWorker.
Сделан что бы можно было завязывать запрос на несколько тегов и при изменении любого из них считать кэш неактуальным.
Немножко за последние две недели закопался с программированием, стало что-то меньше свободного времени, поэтому оно еще недопиленно и требует обсуждение доработок.
Этот класс делали когда-то я и @lom и во этом году я наконец взялся допиливать его.
На неделе написал пару страничек в вики про всякое кэширование и TaggableDaoWorker + TaggableSmartHandler

Текущие скользкие вопросы по изменениям в этом реквесте:

  1. Из старого кода TaggableDaoWorker'а выпилены блокировки запросов, но в коде еще есть закомментированные строки.
  2. TaggableDaoWorker работает только если OneToOne связи между объектами - lazy.
  3. Так же он может быть не особо совместим с другими кэшами. Т.е. если часть объектов кэшируется им, а часть другими воркерами. Другие вокреры не будут страдать, а вот у TaggableDaoWorker'а в случае использования TaggableSmartHandler'а раскешивание нарушится.
  4. lazy - сделал более lazy - не уверен что все к этому готовы, т.к. одно из свойств lazy теряется, см. DAOTest 836-ую строку.
  5. В BaseDao добавлен метод getUncacheByIdFunc и в GenericDAO теперь используется он при изменении объекта. Метод возвращает анонимную функцию, которая выполняет раскешивание при вызове. Возможно, правильней что бы возвращалась не функция, а какой-то специальный объект, что бы можно было несколько таких объектов можно было "мержить" друг с другом.
  6. может быть еще что-то, что сходу не вспомнил, добавлю позже.

В общем то жду комментариев и обсуждения и потихоньку буду допиливать дальше. Скорее всего, если никто не будет против, изменю getUncacheByIdFunc как описал выше.

P.S. Сейчас этот реквест помимо всего прочего ждет пока будет замержет таск Unachers(#91), что б раскешивающая часть кода оказалась в мастере отдельно и раньше (типа немножко дроблю изменения на более независимые части).

@AlexeyDsov AlexeyDsov mentioned this pull request Apr 25, 2012
@AlexeyDsov
Copy link
Member Author

Сейчас этот реквест помимо всего прочего ждет пока будет замержет таск Unachers(#91), что б раскешивающая часть кода оказалась в мастере отдельно и раньше (типа немножко дроблю изменения на более независимые части).

@AlexeyDsov
Copy link
Member Author

Uncacher'ы отсюда теперь вошли в мастер, но пока задача меньше сильно не стала. Все так же останавливает от merge'а измененное поведение lazy. Думаю, либо сделать отдельный fetch тип - superLazy, либо попробовать исправлять закешивание раскешивание объектов, что б TaggableDaoWorker корректно работал всегда.

Эта же ветка на собственных небольших проектах работает на вид стабильно, на вид без ошибок.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant