Имя пути блокировки куратора, содержащее только символы "0"
Я новичок в ZooKeeper, но, помогая коллеге отладить производственную проблему, мы нашли что-то довольно неожиданное. Существующий код в нашей системе использует куратор InterProcessMutex. Приложение создает блокировку с путем, скажем, /TEST/ABC
, Затем другая часть кода создает больше блокировок с путем, как /TEST/ABC/[some integer]
в то время как целые числа - это некоторые идентификаторы объектов, которые вводятся через пользовательский интерфейс. Это работало в течение нескольких месяцев, пока в последнее время внезапно не перестало работать.
Мы взяли дамп потока и обнаружили, что поток блокируется при попытке получить блокировку с путем TEST/ABC
и оказывается, что это происходит всякий раз, когда путь /TEST/ABC/0000
создается (количество нулей не имеет значения, если оно содержит только нули). Очевидно, один тестер однажды решил ввести в систему несколько поддельных идентификаторов, которые остановили систему. Мы исправили это, но мне любопытно, может кто-нибудь пролить свет на то, почему это так?
Вопрос: почему блокировка TEST/ABC/0000
так же, как блокировка TEST/ABC
?
(Количество нулей на самом деле не имеет значения, что-либо отображается на TEST/ABC
.)
1 ответ
На это есть Техническая записка куратора: https://cwiki.apache.org/confluence/display/CURATOR/TN7
Любой путь, указанный в рецепте куратора, принадлежит этому рецепту. Не используйте его для других вещей.
(ПРИМЕЧАНИЕ: я главный автор куратора).