Слияние кода завершено, страница обновится автоматически
// Максимальное значение для узла приложения, при инициализации объекта необходимо проверить, находится ли это значение в пределах допустимого диапазона
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