Hazelcast 3.7.4 не может повторно инициализировать карту

Hazelcast не может переустановить карту из MapLoader в случае неудачной первой попытки. MapLoader загружает данные из базы данных.

Прецедент:

  1. Начать член сервера
  2. Начать клиента
  3. Разорвать связь с базой данных
  4. Попробуйте получить данные из Hazelcast Map (инициирует отложенную загрузку из MapLoader). Соблюдайте исключение.
  5. Восстановить соединение с БД
  6. Повторите шаг 4. Исключение из шага 4 повторяется.

В результате Hazelcast переходит в состояние, когда Map вообще не может быть инициализирована без перезапуска.

Вы встречали такое поведение?

Посоветуйте, пожалуйста, обходной путь или решение?

ОБНОВИТЬ:

Такое поведение воспроизводится, если вызвать map.keySet() со стороны клиента.

2 ответа

Решение

После долгого исследования причина проблемы не была найдена, но карта Hazelcast восстанавливается, если после сбоя инициализация вызывает map.size(). Это довольно странно, но это работает.

Когда вы пытаетесь получить / поместить / удалить данные на карте, Hazelcast только звонки, связанные MapStore а также MapLoader методы. Не существует специального вызова метода для инициализации ваших соединений с БД (Hazelcast предоставляет MapLoaderLifecycleSupport интерфейс для инициализации реализации MapLoader, но его init() метод снова вызывается только тогда, когда карта впервые используется в экземпляре Hazelcast, а не каждый раз, когда вы выполняете операции с картой).

Таким образом, Вы должны решить проблемы с подключением к базе данных самостоятельно, в своем MapStore реализация. Например; когда вы пытаетесь поместить / прочитать / удалить данные в / из вашей БД в реализации, вам необходимо проверить соединение и повторно установить его, если оно не существует.

Другие вопросы по тегам