@@ -201,6 +201,72 @@ public void testForceSplitWithOutDatedObject() {
201
201
Assertions .assertTrue (request .getStreamRanges ().isEmpty ());
202
202
}
203
203
204
+
205
+ @ Test
206
+ public void testForceSplitWithNonExistStream () {
207
+ List <StreamMetadata > streamMetadataList = this .streamManager .getStreams (Collections .emptyList ()).join ();
208
+ streamMetadataList = streamMetadataList .stream ().filter (s -> s .streamId () != STREAM_0 ).collect (Collectors .toList ());
209
+ List <S3ObjectMetadata > s3ObjectMetadata = this .objectManager .getServerObjects ().join ();
210
+ when (config .streamSetObjectCompactionForceSplitPeriod ()).thenReturn (0 );
211
+ compactionManager = new CompactionManager (config , objectManager , streamManager , objectStorage );
212
+
213
+ compactionManager .updateStreamDataBlockMap (List .of (s3ObjectMetadata .get (0 )));
214
+ compactionManager .filterInvalidStreamDataBlocks (streamMetadataList );
215
+ CommitStreamSetObjectRequest request = compactionManager .buildSplitRequest (streamMetadataList , s3ObjectMetadata .get (0 ));
216
+ Assertions .assertEquals (-1 , request .getObjectId ());
217
+ Assertions .assertEquals (List .of (OBJECT_0 ), request .getCompactedObjectIds ());
218
+ Assertions .assertEquals (2 , request .getStreamObjects ().size ());
219
+ Assertions .assertTrue (checkDataIntegrity (streamMetadataList , Collections .singletonList (s3ObjectMetadata .get (0 )), request ));
220
+
221
+ compactionManager .updateStreamDataBlockMap (List .of (s3ObjectMetadata .get (1 )));
222
+ compactionManager .filterInvalidStreamDataBlocks (streamMetadataList );
223
+ request = compactionManager .buildSplitRequest (streamMetadataList , s3ObjectMetadata .get (1 ));
224
+ Assertions .assertEquals (-1 , request .getObjectId ());
225
+ Assertions .assertEquals (List .of (OBJECT_1 ), request .getCompactedObjectIds ());
226
+ Assertions .assertEquals (1 , request .getStreamObjects ().size ());
227
+ Assertions .assertTrue (checkDataIntegrity (streamMetadataList , Collections .singletonList (s3ObjectMetadata .get (1 )), request ));
228
+
229
+ compactionManager .updateStreamDataBlockMap (List .of (s3ObjectMetadata .get (2 )));
230
+ compactionManager .filterInvalidStreamDataBlocks (streamMetadataList );
231
+ request = compactionManager .buildSplitRequest (streamMetadataList , s3ObjectMetadata .get (2 ));
232
+ Assertions .assertEquals (-1 , request .getObjectId ());
233
+ Assertions .assertEquals (List .of (OBJECT_2 ), request .getCompactedObjectIds ());
234
+ Assertions .assertEquals (2 , request .getStreamObjects ().size ());
235
+ Assertions .assertTrue (checkDataIntegrity (streamMetadataList , Collections .singletonList (s3ObjectMetadata .get (2 )), request ));
236
+ }
237
+
238
+ @ Test
239
+ public void testForceSplitWithEmptyStreamList () {
240
+ List <StreamMetadata > streamMetadataList = Collections .emptyList ();
241
+ List <S3ObjectMetadata > s3ObjectMetadata = this .objectManager .getServerObjects ().join ();
242
+ when (config .streamSetObjectCompactionForceSplitPeriod ()).thenReturn (0 );
243
+ compactionManager = new CompactionManager (config , objectManager , streamManager , objectStorage );
244
+
245
+ compactionManager .updateStreamDataBlockMap (List .of (s3ObjectMetadata .get (0 )));
246
+ compactionManager .filterInvalidStreamDataBlocks (streamMetadataList );
247
+ CommitStreamSetObjectRequest request = compactionManager .buildSplitRequest (streamMetadataList , s3ObjectMetadata .get (0 ));
248
+ Assertions .assertEquals (-1 , request .getObjectId ());
249
+ Assertions .assertEquals (List .of (OBJECT_0 ), request .getCompactedObjectIds ());
250
+ Assertions .assertTrue (request .getStreamObjects ().isEmpty ());
251
+ Assertions .assertTrue (request .getStreamRanges ().isEmpty ());
252
+
253
+ compactionManager .updateStreamDataBlockMap (List .of (s3ObjectMetadata .get (1 )));
254
+ compactionManager .filterInvalidStreamDataBlocks (streamMetadataList );
255
+ request = compactionManager .buildSplitRequest (streamMetadataList , s3ObjectMetadata .get (1 ));
256
+ Assertions .assertEquals (-1 , request .getObjectId ());
257
+ Assertions .assertEquals (List .of (OBJECT_1 ), request .getCompactedObjectIds ());
258
+ Assertions .assertTrue (request .getStreamObjects ().isEmpty ());
259
+ Assertions .assertTrue (request .getStreamRanges ().isEmpty ());
260
+
261
+ compactionManager .updateStreamDataBlockMap (List .of (s3ObjectMetadata .get (2 )));
262
+ compactionManager .filterInvalidStreamDataBlocks (streamMetadataList );
263
+ request = compactionManager .buildSplitRequest (streamMetadataList , s3ObjectMetadata .get (2 ));
264
+ Assertions .assertEquals (-1 , request .getObjectId ());
265
+ Assertions .assertEquals (List .of (OBJECT_2 ), request .getCompactedObjectIds ());
266
+ Assertions .assertTrue (request .getStreamObjects ().isEmpty ());
267
+ Assertions .assertTrue (request .getStreamRanges ().isEmpty ());
268
+ }
269
+
204
270
@ Test
205
271
public void testForceSplitWithException () {
206
272
S3AsyncClient s3AsyncClient = Mockito .mock (S3AsyncClient .class );
@@ -465,6 +531,21 @@ public void testCompactWithNonExistStream() {
465
531
Assertions .assertTrue (checkDataIntegrity (streamMetadataList , S3_WAL_OBJECT_METADATA_LIST , request ));
466
532
}
467
533
534
+ @ Test
535
+ public void testCompactWithEmptyStream () {
536
+ compactionManager = new CompactionManager (config , objectManager , streamManager , objectStorage );
537
+ List <StreamMetadata > streamMetadataList = Collections .emptyList ();
538
+ compactionManager .updateStreamDataBlockMap (S3_WAL_OBJECT_METADATA_LIST );
539
+ compactionManager .filterInvalidStreamDataBlocks (streamMetadataList );
540
+ CommitStreamSetObjectRequest request = compactionManager .buildCompactRequest (streamMetadataList , S3_WAL_OBJECT_METADATA_LIST );
541
+
542
+ Assertions .assertEquals (-1 , request .getObjectId ());
543
+ Assertions .assertTrue (request .getStreamObjects ().isEmpty ());
544
+ Assertions .assertTrue (request .getStreamRanges ().isEmpty ());
545
+ assertEquals (List .of (OBJECT_0 , OBJECT_1 , OBJECT_2 ), request .getCompactedObjectIds ());
546
+ Assertions .assertTrue (checkDataIntegrity (streamMetadataList , S3_WAL_OBJECT_METADATA_LIST , request ));
547
+ }
548
+
468
549
@ Test
469
550
public void testCompactNoneExistObjects () {
470
551
when (config .streamSetObjectCompactionStreamSplitSize ()).thenReturn (100L );
0 commit comments