Обновление время жизни блокировки Hazelcast

Возможно ли более правильно обновлять время жизни блокировки hazelCast ? есть первый метод который принимает некий Consumer, в процессе выполнения метода будет выполняться в цикле некое действие которое на первом своем шаге будет вызывать метод 2, который будет обновлять блокировки

Метод 1 - ставим внутри tryLockSafe FencedLock на 5 минут, и добавляем блокировку в ExternalCache на 1 минуту, после чего вызываем Action

public boolean doInDoubleLockOnOneMinute(String monitor, Consumer<String> action) {
    if (tryLockSafe(monitor)) {
        try {
            if (!recordsIsUnderProcessMap.getOrDefault(monitor, false)) {
                recordsIsUnderProcessMap.put(monitor, true);
                recordsIsUnderProcessMap.setTtl(monitor, Const.ONE_INT, DEFAULT_TIME_UNIT);

                if (action != null) {
                    action.accept(monitor);
                }
                return true;
            }
        } catch (Throwable thr) {
            throw new HazelcastException(thr);
        } finally {
            unlock(monitor);
        }
    }
    return false;
}

Метод 2 проверяем что в кеше есть запись о блокировке (если нет прерываем процесс), после обновляем время жизни этой записи (чтобы не потерялась пока блокировку снимаем/ставим). Смущает, что есть некая пауза между снятием и установкой, когда полагаемся на ExternalCache- можно ли это сделать в одной транзакции? `

public void checkLockAndUpdateTTL(String monitor) {
    try {
        if (recordsIsUnderProcessMap.get(monitor)) {
            recordsIsUnderProcessMap.setTtl(monitor, Const.ONE_INT, DEFAULT_TIME_UNIT);
            FencedLock lock = HazelcastInst.getInstance().getCPSubsystem().getLock(monitor);
            // снимаем и добавляем лок заново, для обновления TTL, в это время полагаемся на ExternalCache, который только что проверили и обновили
            lock.unlock();
            if (!tryLock(monitor)) {
                throw new CBSException(new CBSInfoCodes.UpdateLockException());
            }
        } else {
            throw new CBSException(new CBSInfoCodes.BlockProcessNotFoundException());
        }
    } catch (Throwable ex) {
        throw new CBSException(new CBSInfoCodes.UpdateLockException());
    }
}`

Ответы (0 шт):