Skip to content

Commit 4d16622

Browse files
author
wuzhanpeng
committed
fix testcase
1 parent ffb87ec commit 4d16622

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

managed-ledger/src/main/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerImpl.java

+24-11
Original file line numberDiff line numberDiff line change
@@ -3183,10 +3183,16 @@ private void cleanupOffloaded(long ledgerId, UUID uuid, String offloadDriverName
31833183
metadataMap.putAll(offloadDriverMetadata);
31843184
metadataMap.put("ManagedLedgerName", name);
31853185

3186-
Retries.run(Backoff.exponentialJittered(TimeUnit.SECONDS.toMillis(1), TimeUnit.SECONDS.toHours(1)).limit(10),
3187-
Retries.NonFatalPredicate,
3188-
() -> config.getLedgerOffloader().deleteOffloaded(ledgerId, uuid, metadataMap),
3189-
scheduledExecutor, name).whenComplete((ignored, exception) -> {
3186+
Retries
3187+
// The purpose of not specifying the scheduler's key explicitly here is to avoid deadlock.
3188+
// Otherwise when the caller of this method and the retry task are both running in the same
3189+
// ordering thread, there will be a risk of race-condition.
3190+
.run(
3191+
Backoff.exponentialJittered(TimeUnit.SECONDS.toMillis(1), TimeUnit.SECONDS.toHours(1)).limit(10),
3192+
Retries.NonFatalPredicate,
3193+
() -> config.getLedgerOffloader().deleteOffloaded(ledgerId, uuid, metadataMap),
3194+
scheduledExecutor)
3195+
.whenComplete((ignored, exception) -> {
31903196
if (exception != null) {
31913197
log.warn("[{}] Error cleaning up offload for {}, (cleanup reason: {})",
31923198
name, ledgerId, cleanupReason, exception);
@@ -4134,6 +4140,7 @@ public void removeAllDeletableLedgers() {
41344140
final CountDownLatch counter = new CountDownLatch(deletableLedgers.size() + deletableOffloadedLedgers.size());
41354141

41364142
Set<Long> finishedDeletedLedgers = ConcurrentHashMap.newKeySet();
4143+
Set<Long> finishedDeletedOffloadedLedgers = ConcurrentHashMap.newKeySet();
41374144
Set<Long> timeoutDeletedLedgers = ConcurrentHashMap.newKeySet();
41384145

41394146
Set<Long> succeedDeletedLedgers = ConcurrentHashMap.newKeySet();
@@ -4170,7 +4177,7 @@ public void deleteLedgerFailed(ManagedLedgerException exception, Object ctx) {
41704177
public void deleteLedgerComplete(Object ctx) {
41714178
ledgers.remove(deletableOffloadedLedger);
41724179
counter.countDown();
4173-
finishedDeletedLedgers.add(deletableOffloadedLedger);
4180+
finishedDeletedOffloadedLedgers.add(deletableOffloadedLedger);
41744181
succeedDeletedOffloadedLedgers.add(deletableOffloadedLedger);
41754182
}
41764183

@@ -4179,19 +4186,25 @@ public void deleteLedgerFailed(ManagedLedgerException exception, Object ctx) {
41794186
log.warn("[{}] Failed to delete offloaded ledger:{} due to",
41804187
name, deletableOffloadedLedger, exception);
41814188
counter.countDown();
4182-
finishedDeletedLedgers.add(deletableOffloadedLedger);
4189+
finishedDeletedOffloadedLedgers.add(deletableOffloadedLedger);
41834190
failDeletedOffloadedLedgers.add(deletableOffloadedLedger);
41844191
}
41854192
});
41864193
}
41874194

41884195
try {
41894196
if (!counter.await(AsyncOperationTimeoutSeconds, TimeUnit.SECONDS)) {
4190-
for (Long ledgerId : Stream.concat(deletableLedgers.stream(), deletableOffloadedLedgers.stream())
4191-
.collect(Collectors.toSet())) {
4192-
if (!finishedDeletedLedgers.contains(ledgerId)) {
4193-
log.warn("[{}] Failed to delete ledger:{} due to operation timeout", name, ledgerId);
4194-
timeoutDeletedLedgers.add(ledgerId);
4197+
for (Long deletableLedger : deletableLedgers) {
4198+
if (!finishedDeletedLedgers.contains(deletableLedger)) {
4199+
log.warn("[{}] Failed to delete ledger:{} due to operation timeout", name, deletableLedger);
4200+
timeoutDeletedLedgers.add(deletableLedger);
4201+
}
4202+
}
4203+
for (Long deletableOffloadedLedger : deletableOffloadedLedgers) {
4204+
if (!finishedDeletedOffloadedLedgers.contains(deletableOffloadedLedger)) {
4205+
log.warn("[{}] Failed to delete offloaded ledger:{} due to operation timeout",
4206+
name, deletableOffloadedLedger);
4207+
timeoutDeletedLedgers.add(deletableOffloadedLedger);
41954208
}
41964209
}
41974210
}

0 commit comments

Comments
 (0)