Skip to content

Commit 3de1d97

Browse files
committed
[fix][test] Rollback some codes for test
1 parent 8e5a110 commit 3de1d97

3 files changed

Lines changed: 35 additions & 25 deletions

File tree

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

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -483,15 +483,20 @@ public void initializeComplete() {
483483
pendingInitializeLedgers.remove(name, pendingLedger);
484484
future.complete(newledger);
485485

486-
// May need to update the cursor position and wait them finished
487-
newledger.maybeUpdateCursorBeforeTrimmingConsumedLedger().whenComplete((__, ex) -> {
488-
// ignore ex since it is handled in maybeUpdateCursorBeforeTrimmingConsumedLedger
489-
future.complete(newledger);
490-
// May need to trigger offloading
491-
if (config.isTriggerOffloadOnTopicLoad()) {
492-
newledger.maybeOffloadInBackground(NULL_OFFLOAD_PROMISE);
493-
}
494-
});
486+
newledger.maybeUpdateCursorBeforeTrimmingConsumedLedger();
487+
if (config.isTriggerOffloadOnTopicLoad()) {
488+
newledger.maybeOffloadInBackground(NULL_OFFLOAD_PROMISE);
489+
}
490+
491+
// // May need to update the cursor position and wait them finished
492+
// newledger.maybeUpdateCursorBeforeTrimmingConsumedLedger().whenComplete((__, ex) -> {
493+
// // ignore ex since it is handled in maybeUpdateCursorBeforeTrimmingConsumedLedger
494+
// future.complete(newledger);
495+
// // May need to trigger offloading
496+
// if (config.isTriggerOffloadOnTopicLoad()) {
497+
// newledger.maybeOffloadInBackground(NULL_OFFLOAD_PROMISE);
498+
// }
499+
// });
495500
}
496501

497502
@Override

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2716,7 +2716,7 @@ public CompletableFuture<Void> maybeUpdateCursorBeforeTrimmingConsumedLedger() {
27162716
cursorMarkDeleteFutures.add(future);
27172717

27182718
// Snapshot cursor.getMarkDeletedPosition() into a local variable to avoid race condition.
2719-
Position markDeletedPosition = PositionFactory.create(cursor.getMarkDeletedPosition());
2719+
Position markDeletedPosition = cursor.getMarkDeletedPosition();
27202720
Position lastAckedPosition = cursor.getPersistentMarkDeletedPosition() != null
27212721
? cursor.getPersistentMarkDeletedPosition() : markDeletedPosition;
27222722
LedgerInfo curPointedLedger = ledgers.get(lastAckedPosition.getLedgerId());
@@ -2770,10 +2770,11 @@ public void markDeleteFailed(ManagedLedgerException exception, Object ctx) {
27702770
// Should not happen
27712771
log.warn("Trying to mark delete an already mark-deleted position. Current mark-delete:"
27722772
+ " {} -- attempted position: {}", markDeletedPosition, lastAckedPosition);
2773-
future.completeExceptionally(new ManagedLedgerException(
2774-
"Trying to mark delete an already mark-deleted position when update cursor. Current "
2775-
+ "mark-delete: " + markDeletedPosition + " -- attempted mark delete: "
2776-
+ lastAckedPosition));
2773+
future.completeExceptionally(null);
2774+
// future.completeExceptionally(new ManagedLedgerException(
2775+
// "Trying to mark delete an already mark-deleted position when update cursor. Current "
2776+
// + "mark-delete: " + markDeletedPosition + " -- attempted mark delete: "
2777+
// + lastAckedPosition));
27772778
}
27782779
}
27792780
return FutureUtil.waitForAll(cursorMarkDeleteFutures);

managed-ledger/src/test/java/org/apache/bookkeeper/mledger/impl/ManagedLedgerTest.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
import java.util.ArrayList;
5757
import java.util.Arrays;
5858
import java.util.Collections;
59+
import java.util.Deque;
5960
import java.util.HashMap;
6061
import java.util.HashSet;
6162
import java.util.Iterator;
@@ -69,6 +70,7 @@
6970
import java.util.UUID;
7071
import java.util.concurrent.BlockingQueue;
7172
import java.util.concurrent.CompletableFuture;
73+
import java.util.concurrent.ConcurrentLinkedDeque;
7274
import java.util.concurrent.CountDownLatch;
7375
import java.util.concurrent.CyclicBarrier;
7476
import java.util.concurrent.ExecutorService;
@@ -3784,35 +3786,39 @@ public void testExpiredLedgerDeletionAfterManagedLedgerRestart() throws Exceptio
37843786
});
37853787
}
37863788

3789+
// Huh, maybeUpdateCursorBeforeTrimmingConsumedLedger seems not working well.
37873790
@Test(timeOut = 20000)
37883791
public void testNeverThrowsMarkDeletingMarkedPositionInMaybeUpdateCursorBeforeTrimmingConsumedLedger()
37893792
throws Exception {
37903793
ManagedLedgerConfig config = new ManagedLedgerConfig();
37913794
initManagedLedgerConfig(config);
37923795
config.setMaxEntriesPerLedger(1);
37933796
int entryNum = 100;
3794-
config.setMaxEntriesPerLedger(entryNum);
37953797

3796-
ManagedLedgerImpl managedLedger =
3798+
ManagedLedgerImpl realManagedLedger =
37973799
(ManagedLedgerImpl) factory.open("maybeUpdateCursorBeforeTrimmingConsumed_ledger", config);
3800+
ManagedLedgerImpl managedLedger = spy(realManagedLedger);
37983801
ManagedCursor cursor = managedLedger.openCursor("c1");
37993802

3803+
Deque<CompletableFuture<Void>> futures = new ConcurrentLinkedDeque<>();
3804+
doAnswer(invocation -> {
3805+
CompletableFuture<Void> result = (CompletableFuture<Void>) invocation.callRealMethod();
3806+
futures.offer(result);
3807+
return result;
3808+
}).when(managedLedger).maybeUpdateCursorBeforeTrimmingConsumedLedger();
3809+
38003810
final CountDownLatch latch = new CountDownLatch(entryNum);
3801-
List<CompletableFuture<Void>> updateCursorFutures = new ArrayList<>(entryNum);
3802-
// Three asyncMarkDelete operations running concurrently:
3811+
// Two asyncMarkDelete operations running concurrently:
38033812
// 1. ledger rollover triggered maybeUpdateCursorBeforeTrimmingConsumedLedger.
38043813
// 2. user triggered asyncMarkDelete.
3805-
// 3. user triggered maybeUpdateCursorBeforeTrimmingConsumedLedger.
38063814
for (int i = 0; i < entryNum; i++) {
3807-
CountDownLatch taskFireLatch = new CountDownLatch(1);
38083815
managedLedger.asyncAddEntry("entry".getBytes(Encoding), new AddEntryCallback() {
38093816
@Override
38103817
public void addFailed(ManagedLedgerException exception, Object ctx) {
38113818
}
38123819

38133820
@Override
38143821
public void addComplete(Position position, ByteBuf entryData, Object ctx) {
3815-
taskFireLatch.countDown();
38163822
cursor.asyncMarkDelete(position, new MarkDeleteCallback() {
38173823
@Override
38183824
public void markDeleteFailed(ManagedLedgerException exception, Object ctx) {
@@ -3826,15 +3832,13 @@ public void markDeleteComplete(Object ctx) {
38263832

38273833
}
38283834
}, null);
3829-
taskFireLatch.await();
3830-
CompletableFuture<Void> future = managedLedger.maybeUpdateCursorBeforeTrimmingConsumedLedger();
3831-
updateCursorFutures.add(future);
38323835
}
38333836

38343837
latch.await();
38353838
assertEquals(cursor.getNumberOfEntries(), 0);
3839+
38363840
// Will not throw exception
3837-
FutureUtil.waitForAll(updateCursorFutures).get();
3841+
FutureUtil.waitForAll(futures).get();
38383842
}
38393843

38403844
@Test(timeOut = 20000)

0 commit comments

Comments
 (0)