diff --git a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java index 17988135c80aa..e73699564a218 100644 --- a/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java +++ b/managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedCursorImpl.java @@ -642,6 +642,7 @@ public void recoverIndividualDeletedMessages(PositionInfo positionInfo) { recoverIndividualDeletedMessages(positionInfo.getIndividualDeletedMessagesList()); } else if (positionInfo.getIndividualDeletedMessageRangesCount() > 0) { List rangeList = positionInfo.getIndividualDeletedMessageRangesList(); + lock.writeLock().lock(); try { Map rangeMap = rangeList.stream().collect(Collectors.toMap(LongListMap::getKey, list -> list.getValuesList().stream().mapToLong(i -> i).toArray())); @@ -664,6 +665,8 @@ public void recoverIndividualDeletedMessages(PositionInfo positionInfo) { } catch (Exception e) { log.warn("[{}]-{} Failed to recover individualDeletedMessages from serialized data", ledger.getName(), name, e); + } finally { + lock.writeLock().unlock(); } } } @@ -3259,10 +3262,13 @@ void persistPositionToLedger(final LedgerHandle lh, MarkDeleteEntry mdEntry, fin * and deserialization error. */ if (getConfig().isUnackedRangesOpenCacheSetEnabled() && getConfig().isPersistIndividualAckAsLongArray()) { + lock.readLock().lock(); try { internalRanges = individualDeletedMessages.toRanges(getConfig().getMaxUnackedRangesToPersist()); } catch (Exception e) { log.warn("[{}]-{} Failed to serialize individualDeletedMessages", ledger.getName(), name, e); + } finally { + lock.readLock().unlock(); } } if (internalRanges != null && !internalRanges.isEmpty()) {