Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HAZELCAST - в коллекции "залипает" неверное 
:(
    Опции темы
CROTishka
Дата 30.5.2013, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: нет
Всего: 2



Может кто работал/работает с хазелкастом?

Два потока, один пишет в хазелкаст инкрементящееся поле, второй неперерывно опрашивает коллекцию на предмет того, что в мапе лежит всё ещё старое значение (сверяет его по "эталонному" ConcurrentHashMap). Если обнаружено расхождение, то проверяющий поток засыпает на 100мс, и проверяет снова, и так 20 раз. Если и через 20 раз значение не обновилось, то умирает с кодом 100. По идее расхождение происходит часто, но умирать он никогда не должен. Однако, он может умереть как на втором инкременте, так и пару часов проработать нормально. Непонятно, баг хазелкаста ли это, или сконфигурено что-то не так.

Сорцы можно взять посмотреть тут: https://github.com/Kamapcuc/HazelcastTest 
на класспасс надо положить хазелкаст: http://www.hazelcast.com/files/hazelcast-2.5.1.zip
PM MAIL   Вверх
COVD
Дата 30.5.2013, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



обновления коллекции можно обрабатывать с помощью лисенера, который надо зарегистрировать в коллекции, т.е. не обязательно периодически опрашивать. 
PM MAIL   Вверх
CROTishka
Дата 30.5.2013, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: нет
Всего: 2



Проблема не в том, чтобы фиксировать изменения. Проблема в рассинхронизации данных на диске (в тесте роль диска выполняет ConcurrentHashMap и данных в кэше хазелкаста). При том, что данные пишутся одновременно и только в одном потоке.
PM MAIL   Вверх
COVD
Дата 30.5.2013, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

При том, что данные пишутся одновременно и только в одном потоке.
 
То, что вы наблюдаете, никакого отношения к хазелкасту не имеет. 
Один поток последовательно (а не "одновременно") обновляет 2 мапа, а другой поток последовательно читает значения из этих 2 мапов. Естественно, что значения могут не совпадать.
Убедитесь сами, заменив хазелкаст мап на обычный, и получите тот же эффект:
        
Код

Map<String, Integer> hazel = new ConcurrentHashMap<String, Integer>();//Const.instance.getMap("repo");
        ConcurrentHashMap<String, Integer> elastic = new ConcurrentHashMap<String, Integer>();

PM MAIL   Вверх
CROTishka
Дата 30.5.2013, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: нет
Всего: 2



То, что они не совпадают в определённые моменты времени - это нормально. Поток после этого засыпает на время и проверяет заново и всё ок.
Не нормально, то, что иногда в этих двух мапах лежат разные значения, при том, что второй поток уже стоит. Читайте внимательнее, пожалуйста. Запустите и дождитесь "Process finished with exit code 100" - вывод в консоль добавлен просто для того чтобы было видно, что оно работает.

При этом если в конфиге хазелкаста  поменять <cache-value> на false, то всё работает нормально.

Добавлено через 2 минуты и 57 секунд
и если выставить hazel = new ConcurrentHashMap, то оно тоже никогда не упадёт и будет спиниться до тех пор, пока int не переполнится.
PM MAIL   Вверх
COVD
Дата 30.5.2013, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

При этом если в конфиге хазелкаста  поменять <cache-value> на false, то всё работает нормально. 

Обновление в хазелкасте по умолчанию более длительная операция, чем в обычном мапе, потому что он проверяет, есть ли удаленные узлы, которые надо синхронизировать. 
PM MAIL   Вверх
CROTishka
Дата 30.5.2013, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: нет
Всего: 2



Вы о чём сейчас вообще?  :-(
PM MAIL   Вверх
COVD
Дата 30.5.2013, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Я, честно говоря, не совсем понял, что вы тестируете. Hazelcast я обычно тестирую, запуская два инстанса,  т.е. должно быть два метода main(), или два вызова одного main(). А дальше мы обновляем один инстанс мапа, а на другом инстансе смотрим обновилось или нет. Потому, что Hazelcast - это реализация распределенных коллекций. 

Вы же в разных потоках записываете и читаете из одного инстанса мапа. На мой взгляд тут проблема с обычной синхронизацией, т.к. никакой распределенности нет. Поэтому мап, который вы создаете через хазелкаст, это обычный мап, но, возможно, там вставка медленнее и это зависит от настроек хазелкаста. 

Вы обновляете значение ключа через put(), a другой поток через get() получает все время старое значение? 

Это сообщение отредактировал(а) COVD - 30.5.2013, 20:02
PM MAIL   Вверх
CROTishka
Дата 4.6.2013, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 192
Регистрация: 30.7.2009

Репутация: нет
Всего: 2



:facepalm:
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.