
Mikhail
09.05.2017
14:08:08
В общем, я переписал на striped, конечно

Evgeniy
09.05.2017
14:08:34
striped это чёрная магия какя-то если честно.

Mikhail
09.05.2017
14:08:57
там внутри ходим в кэш, и вроде бы есть CAS метод, но в документации к EhCache написано, что в случае распределенной инсталляции он CAS не гарантирует
поэтому без лока, в общем-то никуда

Google

Mikhail
09.05.2017
14:09:09
но не один же

Anton
09.05.2017
14:09:39
что такое striped?

Mikhail
09.05.2017
14:09:50
predefined array of locks
обладащий свойствами хэшмэпа
то есть для одинаковых ключей будут одинаковые локи
что позволяет в случае именованных объектов ходить на разные локи для разных объектов

Nick
09.05.2017
14:11:04

Anton
09.05.2017
14:11:37

Nick
09.05.2017
14:11:48

Mikhail
09.05.2017
14:12:01
Микалай Алименков рекомендовал начинать с цифры 64 в плане дефолтного количества локов в массиве и, собссно, я ни разу эту цифру не перешагнул в плане performance

Nick
09.05.2017
14:13:23

Google

Mikhail
09.05.2017
14:13:27
Я правильно понимаю?
то есть

Nick
09.05.2017
14:13:49
Что эт

Mikhail
09.05.2017
14:13:51
я пишу
private Striped<Lock> striped = Striped.lazyWeakLock(64);

Nick
09.05.2017
14:13:57
первый раз слышу

Mikhail
09.05.2017
14:14:06
А потом иду Lock lock = striped.get(key);
и лок/анлок

Nick
09.05.2017
14:14:27
Понял, эт чтот гуавовское

Anton
09.05.2017
14:14:35

Mikhail
09.05.2017
14:14:43

Nick
09.05.2017
14:14:52

Mikhail
09.05.2017
14:15:35
В том плане, как я описал - есть фильтр, в него валятся event-ы, надо ходить в кэш и проверить дупликацию

Anton
09.05.2017
14:15:38

Mikhail
09.05.2017
14:15:55
кэш CAS не гарантирует, согласно документации

Nick
09.05.2017
14:16:09

Mikhail
09.05.2017
14:16:16
ИМХО, ты или юзаешь один лок, что плохо, или пилишь что-то подобное striped типа своё

Google

Nick
09.05.2017
14:16:38
А зачем тебе для кэша лок?
Тем более stripped

Mikhail
09.05.2017
14:16:51
Я просто последний раз синглтон руками писал, наверное, в ВУЗе
кэш - это такой способ сохранить информацию, что такое-то сообщение пришло

Nick
09.05.2017
14:17:40

Mikhail
09.05.2017
14:17:44
это не я писал, это так мне досталось
кэш distributed
то есть ивент может придти на один инстанс, а дубликат - на другой

Nick
09.05.2017
14:18:29
Ок, тогда у тебя и лок на уровне инстанса не поможет
Скорее всего тебе нужен лок из твоего кэша

Mikhail
09.05.2017
14:19:01
хм
я знаю, что не поможет
нужен распределенный лок
но, насколько я понимаю - не супер страшно, если проскочит сообщение-другое в дубль
главное, чтобы это не было массово

Nick
09.05.2017
14:20:01
Тогда нафиг тебе лок)

Mikhail
09.05.2017
14:20:07
счас почитаю, умеет ли он так

Google

Nick
09.05.2017
14:20:10
если не страшно

Mikhail
09.05.2017
14:20:33
я согласен, что это неправильно
но
распределенный случай не накрывается и сейчас
и это всех устраивает
поэтому первая задача - improve performance
то есть чтобы логически работало как сейчас, но быстрее)
ой

Admin
ERROR: S client not available

Mikhail
09.05.2017
14:23:26
то, что мне надо
"and also in Distributed Ehcache"

Nick
09.05.2017
14:23:58

Mikhail
09.05.2017
14:24:04
не факт
быстрее чем один лок?
а это мы померяем
я сейчас таки допишу вариант со striped

Nick
09.05.2017
14:24:40
Мне кажется тебе не нужен лок, там на методе put возвращается предыдущее значение ж? Достаточно его на null проверить

Mikhail
09.05.2017
14:25:22

Google

Mikhail
09.05.2017
14:25:32
этот пут же не атомарный, насколько я понимаю

Nick
09.05.2017
14:27:56

Mikhail
09.05.2017
14:28:17
я джавадок почитал - там атомик никто не гарантирует
поэтому, похоже, возможен вариант, когда оба потока вернут null

Nick
09.05.2017
14:29:02
по коду там лок на key делается
так что атомарный
эт я про BlockingCache

Mikhail
09.05.2017
14:30:02
да
вижу
BlockingCache
счас проверим, какой у нас бэкенд

Nick
09.05.2017
14:38:16

Mikhail
09.05.2017
14:39:23
я немного не в той должности, чтобы такое делать)
я слегка просто "эксперт", а не "лид")
мда
нельзя просто так blockingcache
надо писать свою cachedecoratorfactory
которая будет генерить не просто кэш, а блокирующий
в моем случае проще striped - сильно меньше затрат

Nick
09.05.2017
15:27:50