IGNITE Ошибка кэша

Мы используем Apache Ignite для кэширования, и во время тестирования я столкнулся с этой ошибкой.

java.lang.IllegalStateException: Кэш закрыт или уничтожен

У нас есть клиент Spring Restful со встроенным IGNITE. Приходят звонки обновить и удалить из кеша.

Шаги, которые произошли, следующие

  1. Один запущенный экземпляр сервера Ignite.
  2. один экземпляр клиента Restful, работающий на другом сервере с Ignite Embedded.
  3. Убит экземпляр сервера Ignite, клиент все еще работает
  4. Ignite сервер перезапущен.
  5. Любая попытка клиента поместить значение в кеш приводит к вышеуказанному исключению.
  6. Если клиент перезапускается, все работает как обычно

Может ли кто-нибудь пролить свет на то, почему это происходит. Должен ли я обрабатывать это событие, когда все узлы уходят, и вручную удалять кеш или что-то в этом роде.

Любая помощь приветствуется


person Aravind R    schedule 04.03.2016    source источник


Ответы (2)


В случае отказа всех серверов клиент подключается с новым идентификатором (так же, как если бы вы перезапустили его вручную). В этом случае все существующие экземпляры кеша закрываются, и вам необходимо получить новые (используйте метод Ignite.cache(...)).

Существует билет для улучшения этого поведения: https://issues.apache.org/jira/browse/IGNITE-2766

person Valentin Kulichenko    schedule 04.03.2016
comment
Не могу зажечь.getOrCreateCache(cfg); помогите здесь - person Mudassar; 05.03.2016
comment
Yha, я пытаюсь использовать вышеуказанный метод, но использую то же имя кеша, что и то, что я использовал до того, как сервер вышел из строя. Я использую пружинное кэширование на стороне клиента. это устаревший экземпляр на клиенте, который вызывает проблему? есть ли способ решить эту проблему без перезапуска клиента? - person Aravind R; 05.03.2016
comment
В случае кэширования Spring нет обходного пути, кроме перезапуска клиента. Это будет исправлено в следующем выпуске: issues.apache.org/jira/browse/IGNITE. -2765 - person Valentin Kulichenko; 05.03.2016

Мы также столкнулись с этой проблемой, и у нас есть обходной путь. Мы реализовали собственную версию SpringCacheManager (ReconnectSafeSpringCacheManager), которая упаковывает объекты кеша в безопасные для повторного подключения прокси-объекты кеша (ReconnectSafeCacheProxy).

Когда IllegalStateException перехватывается одним из прокси-серверов кеша, мы говорим нашему диспетчеру кеша удалить этот кеш (удалить его из внутренней карты caches), а затем вызываем ReconnectSafeSpringCacheManager.getCache(<cacheName>), который воссоздает экземпляр кеша Ignite. Прокси-сервер заменяет свою ссылку на кеш новым кешем Ignite, а затем повторяет операцию, вызвавшую исключение.

Наш подход требовал, чтобы мы поместили наш код менеджера кеша в пакет org.apache.ignite.cache.spring, так как в SpringCacheManager есть ссылки на непубличные API:s, что не является самым чистым подходом, но, похоже, работает, и мы планируем удалить обходной путь, когда Проблема IGNITE-2786 устранена.

person Jon Ekdahl    schedule 03.06.2016