1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/itopener-springboot

 / Детали:

Проблема инициализации sequence

Предстоит сделать
Владелец
Создано  
23.04.2025
// Максимальное значение для узла приложения, при инициализации объекта необходимо проверить, находится ли это значение в пределах допустимого диапазона
final long maxWorkerId = 1 << workerIdBits;
public Sequence(IWorker worker) {
   this.workerId = worker.getId();
   if (workerId > maxWorkerId || workerId < 0) {
      throw new IllegalArgumentException(
            String.format("worker Id не может быть больше %d или меньше 0", maxWorkerId));
   }
}

В проекте узел приложения занимает 10 бит, то есть поддерживает до 1023 узлов.
Однако, если я установлю workerId в диапазоне от 0 до 1024 (включительно), конструктор не выдаст ошибку, а значение 1024L увеличит количество бит для узла приложения на один.

Решение

Либо инициализировать maxWorkerId следующим образом:

maxWorkerId = (1 << workerIdBits) - 1;

Либо изменить условие if в конструкторе на:

workerId >= maxWorkerId

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/itopener-springboot.git
git@api.gitlife.ru:oschina-mirror/itopener-springboot.git
oschina-mirror
itopener-springboot
itopener-springboot