|
25 | 25 | import org.apache.fluss.flink.FlinkConnectorOptions; |
26 | 26 | import org.apache.fluss.flink.lake.split.LakeSnapshotAndFlussLogSplit; |
27 | 27 | import org.apache.fluss.flink.lake.split.LakeSnapshotSplit; |
| 28 | +import org.apache.fluss.flink.source.FlinkSource; |
| 29 | +import org.apache.fluss.flink.source.deserializer.RowDataDeserializationSchema; |
28 | 30 | import org.apache.fluss.flink.source.event.PartitionBucketsUnsubscribedEvent; |
29 | 31 | import org.apache.fluss.flink.source.event.PartitionsRemovedEvent; |
30 | 32 | import org.apache.fluss.flink.source.reader.LeaseContext; |
|
54 | 56 |
|
55 | 57 | import org.apache.flink.api.connector.source.ReaderInfo; |
56 | 58 | import org.apache.flink.api.connector.source.SourceEvent; |
| 59 | +import org.apache.flink.api.connector.source.SplitEnumerator; |
57 | 60 | import org.apache.flink.api.connector.source.SplitsAssignment; |
58 | 61 | import org.apache.flink.api.connector.source.mocks.MockSplitEnumeratorContext; |
| 62 | +import org.apache.flink.table.data.RowData; |
59 | 63 | import org.junit.jupiter.api.BeforeAll; |
60 | 64 | import org.junit.jupiter.api.Test; |
61 | 65 | import org.junit.jupiter.api.io.TempDir; |
@@ -244,48 +248,52 @@ void testRestoreFlussOnlySourceWithLakeSourceDoesNotGenerateLakeSplits(@TempDir |
244 | 248 |
|
245 | 249 | SourceEnumeratorState checkpointState; |
246 | 250 | try (MockSplitEnumeratorContext<SourceSplitBase> context = |
247 | | - new MockSplitEnumeratorContext<>(1)) { |
248 | | - FlinkSourceEnumerator enumerator = |
249 | | - new FlinkSourceEnumerator( |
250 | | - DEFAULT_TABLE_PATH, |
251 | | - flussConf, |
252 | | - true, |
253 | | - false, |
254 | | - context, |
255 | | - OffsetsInitializer.timestamp(1000L), |
256 | | - DEFAULT_SCAN_PARTITION_DISCOVERY_INTERVAL_MS, |
257 | | - streaming, |
258 | | - null, |
259 | | - null, |
260 | | - LeaseContext.DEFAULT, |
261 | | - false); |
262 | | - |
| 251 | + new MockSplitEnumeratorContext<>(1); |
| 252 | + SplitEnumerator<SourceSplitBase, SourceEnumeratorState> enumerator = |
| 253 | + new FlinkSource<RowData>( |
| 254 | + flussConf, |
| 255 | + DEFAULT_TABLE_PATH, |
| 256 | + false, |
| 257 | + true, |
| 258 | + DEFAULT_LOG_TABLE_SCHEMA.getRowType(), |
| 259 | + null, |
| 260 | + null, |
| 261 | + OffsetsInitializer.timestamp(1000L), |
| 262 | + 0L, |
| 263 | + new RowDataDeserializationSchema(), |
| 264 | + streaming, |
| 265 | + null, |
| 266 | + LeaseContext.DEFAULT) |
| 267 | + .createEnumerator(context)) { |
263 | 268 | checkpointState = enumerator.snapshotState(1L); |
| 269 | + assertThat(checkpointState.getRemainingHybridLakeFlussSplits()).isNull(); |
264 | 270 | } |
265 | 271 |
|
266 | 272 | try (MockSplitEnumeratorContext<SourceSplitBase> context = |
267 | 273 | new MockSplitEnumeratorContext<>(DEFAULT_BUCKET_NUM); |
268 | | - MockWorkExecutor workExecutor = new MockWorkExecutor(context); |
269 | | - FlinkSourceEnumerator restoredEnumerator = |
270 | | - new FlinkSourceEnumerator( |
271 | | - DEFAULT_TABLE_PATH, |
272 | | - flussConf, |
273 | | - false, |
274 | | - true, |
275 | | - context, |
276 | | - checkpointState.getAssignedBuckets(), |
277 | | - checkpointState.getAssignedPartitions(), |
278 | | - checkpointState.getRemainingHybridLakeFlussSplits(), |
279 | | - OffsetsInitializer.full(), |
280 | | - DEFAULT_SCAN_PARTITION_DISCOVERY_INTERVAL_MS, |
281 | | - streaming, |
282 | | - null, |
283 | | - lakeSource, |
284 | | - workExecutor, |
285 | | - LeaseContext.DEFAULT, |
286 | | - true)) { |
| 274 | + SplitEnumerator<SourceSplitBase, SourceEnumeratorState> restoredEnumerator = |
| 275 | + new FlinkSource<RowData>( |
| 276 | + flussConf, |
| 277 | + DEFAULT_TABLE_PATH, |
| 278 | + false, |
| 279 | + true, |
| 280 | + DEFAULT_LOG_TABLE_SCHEMA.getRowType(), |
| 281 | + null, |
| 282 | + null, |
| 283 | + OffsetsInitializer.full(), |
| 284 | + 0L, |
| 285 | + new RowDataDeserializationSchema(), |
| 286 | + streaming, |
| 287 | + null, |
| 288 | + lakeSource, |
| 289 | + LeaseContext.DEFAULT) |
| 290 | + .restoreEnumerator(context, checkpointState)) { |
| 291 | + assertThat(restoredEnumerator.snapshotState(1L).getRemainingHybridLakeFlussSplits()) |
| 292 | + .isEmpty(); |
| 293 | + |
287 | 294 | restoredEnumerator.start(); |
288 | | - runPeriodicPartitionDiscovery(workExecutor); |
| 295 | + context.runNextOneTimeCallable(); |
| 296 | + context.runNextOneTimeCallable(); |
289 | 297 |
|
290 | 298 | for (int i = 0; i < DEFAULT_BUCKET_NUM; i++) { |
291 | 299 | registerReader(context, restoredEnumerator, i); |
@@ -943,7 +951,7 @@ void testPartitionsExpiredInFlussButExistInLake( |
943 | 951 | // --------------------- |
944 | 952 | private void registerReader( |
945 | 953 | MockSplitEnumeratorContext<SourceSplitBase> context, |
946 | | - FlinkSourceEnumerator enumerator, |
| 954 | + SplitEnumerator<SourceSplitBase, SourceEnumeratorState> enumerator, |
947 | 955 | int readerId) { |
948 | 956 | context.registerReader(new ReaderInfo(readerId, "location " + readerId)); |
949 | 957 | enumerator.addReader(readerId); |
|
0 commit comments