@@ -1936,6 +1936,9 @@ public void testDeletionAfterLedgerClosedAndRetention() throws Exception {
1936
1936
c1 .skipEntries (1 , IndividualDeletedEntries .Exclude );
1937
1937
c2 .skipEntries (1 , IndividualDeletedEntries .Exclude );
1938
1938
// let current ledger close
1939
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
1940
+ stateUpdater .setAccessible (true );
1941
+ stateUpdater .set (ml , ManagedLedgerImpl .State .LedgerOpened );
1939
1942
ml .rollCurrentLedgerIfFull ();
1940
1943
// let retention expire
1941
1944
Thread .sleep (1500 );
@@ -2205,6 +2208,9 @@ public void testGetPositionAfterN() throws Exception {
2205
2208
managedCursor .markDelete (positionMarkDelete );
2206
2209
2207
2210
//trigger ledger rollover and wait for the new ledger created
2211
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
2212
+ stateUpdater .setAccessible (true );
2213
+ stateUpdater .set (managedLedger , ManagedLedgerImpl .State .LedgerOpened );
2208
2214
managedLedger .rollCurrentLedgerIfFull ();
2209
2215
Awaitility .await ().untilAsserted (() -> assertEquals (managedLedger .getLedgersInfo ().size (), 3 ));
2210
2216
assertEquals (5 , managedLedger .getLedgersInfoAsList ().get (0 ).getEntries ());
@@ -3063,7 +3069,7 @@ public void testManagedLedgerRollOverIfFull() throws Exception {
3063
3069
ledger .addEntry (new byte [1024 * 1024 ]);
3064
3070
}
3065
3071
3066
- Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), msgNum / 2 );
3072
+ Awaitility . await (). untilAsserted (() -> Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), msgNum / 2 ) );
3067
3073
List <Entry > entries = cursor .readEntries (msgNum );
3068
3074
Assert .assertEquals (msgNum , entries .size ());
3069
3075
@@ -3074,9 +3080,12 @@ public void testManagedLedgerRollOverIfFull() throws Exception {
3074
3080
3075
3081
// all the messages have benn acknowledged
3076
3082
// and all the ledgers have been removed except the last ledger
3077
- Thread .sleep (1000 );
3078
- Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), 1 );
3079
- Assert .assertEquals (ledger .getTotalSize (), 0 );
3083
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
3084
+ stateUpdater .setAccessible (true );
3085
+ stateUpdater .set (ledger , ManagedLedgerImpl .State .LedgerOpened );
3086
+ ledger .rollCurrentLedgerIfFull ();
3087
+ Awaitility .await ().untilAsserted (() -> Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), 1 ));
3088
+ Awaitility .await ().untilAsserted (() -> Assert .assertEquals (ledger .getTotalSize (), 0 ));
3080
3089
}
3081
3090
3082
3091
@ Test
@@ -3094,6 +3103,26 @@ public void testLedgerReachMaximumRolloverTime() throws Exception {
3094
3103
.until (() -> firstLedgerId != ml .addEntry ("test" .getBytes ()).getLedgerId ());
3095
3104
}
3096
3105
3106
+ @ Test
3107
+ public void testLedgerNotRolloverWithoutOpenState () throws Exception {
3108
+ ManagedLedgerConfig config = new ManagedLedgerConfig ();
3109
+ config .setMaxEntriesPerLedger (2 );
3110
+
3111
+ ManagedLedgerImpl ml = spy ((ManagedLedgerImpl )factory .open ("ledger-not-rollover-without-open-state" , config ));
3112
+ ml .addEntry ("test1" .getBytes ()).getLedgerId ();
3113
+ long ledgerId2 = ml .addEntry ("test2" .getBytes ()).getLedgerId ();
3114
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
3115
+ stateUpdater .setAccessible (true );
3116
+ // Set state to CreatingLedger to avoid rollover
3117
+ stateUpdater .set (ml , ManagedLedgerImpl .State .CreatingLedger );
3118
+ ml .rollCurrentLedgerIfFull ();
3119
+ Field currentLedger = ManagedLedgerImpl .class .getDeclaredField ("currentLedger" );
3120
+ currentLedger .setAccessible (true );
3121
+ LedgerHandle lh = (LedgerHandle ) currentLedger .get (ml );
3122
+ Awaitility .await ()
3123
+ .until (() -> ledgerId2 == lh .getId ());
3124
+ }
3125
+
3097
3126
@ Test
3098
3127
public void testExpiredLedgerDeletionAfterManagedLedgerRestart () throws Exception {
3099
3128
ManagedLedgerConfig config = new ManagedLedgerConfig ();
0 commit comments