@@ -1881,6 +1881,9 @@ public void testDeletionAfterLedgerClosedAndRetention() throws Exception {
1881
1881
c1 .skipEntries (1 , IndividualDeletedEntries .Exclude );
1882
1882
c2 .skipEntries (1 , IndividualDeletedEntries .Exclude );
1883
1883
// let current ledger close
1884
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
1885
+ stateUpdater .setAccessible (true );
1886
+ stateUpdater .set (ml , ManagedLedgerImpl .State .LedgerOpened );
1884
1887
ml .rollCurrentLedgerIfFull ();
1885
1888
// let retention expire
1886
1889
Thread .sleep (1500 );
@@ -2150,6 +2153,9 @@ public void testGetPositionAfterN() throws Exception {
2150
2153
managedCursor .markDelete (positionMarkDelete );
2151
2154
2152
2155
//trigger ledger rollover and wait for the new ledger created
2156
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
2157
+ stateUpdater .setAccessible (true );
2158
+ stateUpdater .set (managedLedger , ManagedLedgerImpl .State .LedgerOpened );
2153
2159
managedLedger .rollCurrentLedgerIfFull ();
2154
2160
Awaitility .await ().untilAsserted (() -> assertEquals (managedLedger .getLedgersInfo ().size (), 3 ));
2155
2161
assertEquals (5 , managedLedger .getLedgersInfoAsList ().get (0 ).getEntries ());
@@ -3009,7 +3015,7 @@ public void testManagedLedgerRollOverIfFull() throws Exception {
3009
3015
ledger .addEntry (new byte [1024 * 1024 ]);
3010
3016
}
3011
3017
3012
- Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), msgNum / 2 );
3018
+ Awaitility . await (). untilAsserted (() -> Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), msgNum / 2 ) );
3013
3019
List <Entry > entries = cursor .readEntries (msgNum );
3014
3020
Assert .assertEquals (msgNum , entries .size ());
3015
3021
@@ -3020,9 +3026,12 @@ public void testManagedLedgerRollOverIfFull() throws Exception {
3020
3026
3021
3027
// all the messages have benn acknowledged
3022
3028
// and all the ledgers have been removed except the last ledger
3023
- Thread .sleep (1000 );
3024
- Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), 1 );
3025
- Assert .assertEquals (ledger .getTotalSize (), 0 );
3029
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
3030
+ stateUpdater .setAccessible (true );
3031
+ stateUpdater .set (ledger , ManagedLedgerImpl .State .LedgerOpened );
3032
+ ledger .rollCurrentLedgerIfFull ();
3033
+ Awaitility .await ().untilAsserted (() -> Assert .assertEquals (ledger .getLedgersInfoAsList ().size (), 1 ));
3034
+ Awaitility .await ().untilAsserted (() -> Assert .assertEquals (ledger .getTotalSize (), 0 ));
3026
3035
}
3027
3036
3028
3037
@ Test
@@ -3042,6 +3051,26 @@ public void testLedgerReachMaximumRolloverTime() throws Exception {
3042
3051
.until (() -> firstLedgerId != ml .addEntry ("test" .getBytes ()).getLedgerId ());
3043
3052
}
3044
3053
3054
+ @ Test
3055
+ public void testLedgerNotRolloverWithoutOpenState () throws Exception {
3056
+ ManagedLedgerConfig config = new ManagedLedgerConfig ();
3057
+ config .setMaxEntriesPerLedger (2 );
3058
+
3059
+ ManagedLedgerImpl ml = spy ((ManagedLedgerImpl )factory .open ("ledger-not-rollover-without-open-state" , config ));
3060
+ ml .addEntry ("test1" .getBytes ()).getLedgerId ();
3061
+ long ledgerId2 = ml .addEntry ("test2" .getBytes ()).getLedgerId ();
3062
+ Field stateUpdater = ManagedLedgerImpl .class .getDeclaredField ("state" );
3063
+ stateUpdater .setAccessible (true );
3064
+ // Set state to CreatingLedger to avoid rollover
3065
+ stateUpdater .set (ml , ManagedLedgerImpl .State .CreatingLedger );
3066
+ ml .rollCurrentLedgerIfFull ();
3067
+ Field currentLedger = ManagedLedgerImpl .class .getDeclaredField ("currentLedger" );
3068
+ currentLedger .setAccessible (true );
3069
+ LedgerHandle lh = (LedgerHandle ) currentLedger .get (ml );
3070
+ Awaitility .await ()
3071
+ .until (() -> ledgerId2 == lh .getId ());
3072
+ }
3073
+
3045
3074
@ Test
3046
3075
public void testExpiredLedgerDeletionAfterManagedLedgerRestart () throws Exception {
3047
3076
ManagedLedgerConfig config = new ManagedLedgerConfig ();
0 commit comments