@@ -129,13 +129,13 @@ public void testHeteroSchemaTransform() throws Exception {
129
129
submitPipelineJob (pipelineJob , mysqlCdcJar , valuesCdcJar , mysqlDriverJar );
130
130
waitUntilJobRunning (Duration .ofSeconds (30 ));
131
131
LOG .info ("Pipeline job is running" );
132
- waitUtilSpecificEvent (
132
+ waitUntilSpecificEvent (
133
133
String .format (
134
134
"DataChangeEvent{tableId=%s.terminus, before=[], after=[1011, 11], op=INSERT, meta=()}" ,
135
135
transformRenameDatabase .getDatabaseName ()),
136
136
6000L );
137
137
138
- waitUtilSpecificEvent (
138
+ waitUntilSpecificEvent (
139
139
String .format (
140
140
"DataChangeEvent{tableId=%s.terminus, before=[], after=[2014, 14], op=INSERT, meta=()}" ,
141
141
transformRenameDatabase .getDatabaseName ()),
@@ -185,19 +185,19 @@ public void testHeteroSchemaTransform() throws Exception {
185
185
throw e ;
186
186
}
187
187
188
- waitUtilSpecificEvent (
188
+ waitUntilSpecificEvent (
189
189
String .format (
190
190
"DataChangeEvent{tableId=%s.terminus, before=[], after=[3007, 7], op=INSERT, meta=()}" ,
191
191
transformRenameDatabase .getDatabaseName ()),
192
192
6000L );
193
193
194
- waitUtilSpecificEvent (
194
+ waitUntilSpecificEvent (
195
195
String .format (
196
196
"DataChangeEvent{tableId=%s.terminus, before=[1009, 8.1], after=[1009, 100], op=UPDATE, meta=()}" ,
197
197
transformRenameDatabase .getDatabaseName ()),
198
198
6000L );
199
199
200
- waitUtilSpecificEvent (
200
+ waitUntilSpecificEvent (
201
201
String .format (
202
202
"DataChangeEvent{tableId=%s.terminus, before=[2011, 11], after=[], op=DELETE, meta=()}" ,
203
203
transformRenameDatabase .getDatabaseName ()),
@@ -249,37 +249,43 @@ public void testAssortedSchemaTransform() throws Exception {
249
249
submitPipelineJob (pipelineJob , mysqlCdcJar , valuesCdcJar , mysqlDriverJar );
250
250
waitUntilJobRunning (Duration .ofSeconds (30 ));
251
251
LOG .info ("Pipeline job is running" );
252
- waitUtilSpecificEvent (
252
+
253
+ waitUntilSpecificEvent (
254
+ String .format (
255
+ "CreateTableEvent{tableId=%s.terminus, schema=columns={`ID` INT NOT NULL,`VERSION` STRING,`NAME` STRING}, primaryKeys=ID, options=()}" ,
256
+ transformRenameDatabase .getDatabaseName ()),
257
+ 6000L );
258
+ waitUntilSpecificEvent (
253
259
String .format (
254
260
"DataChangeEvent{tableId=%s.terminus, before=[], after=[1008, v8, alice], op=INSERT, meta=()}" ,
255
261
transformRenameDatabase .getDatabaseName ()),
256
262
6000L );
257
263
258
- waitUtilSpecificEvent (
264
+ waitUntilSpecificEvent (
259
265
String .format (
260
266
"DataChangeEvent{tableId=%s.terminus, before=[], after=[1009, v8.1, bob], op=INSERT, meta=()}" ,
261
267
transformRenameDatabase .getDatabaseName ()),
262
268
6000L );
263
269
264
- waitUtilSpecificEvent (
270
+ waitUntilSpecificEvent (
265
271
String .format (
266
272
"DataChangeEvent{tableId=%s.terminus, before=[], after=[2011, v11, eva], op=INSERT, meta=()}" ,
267
273
transformRenameDatabase .getDatabaseName ()),
268
274
6000L );
269
275
270
- waitUtilSpecificEvent (
276
+ waitUntilSpecificEvent (
271
277
String .format (
272
278
"DataChangeEvent{tableId=%s.terminus, before=[], after=[2012, v12, fred], op=INSERT, meta=()}" ,
273
279
transformRenameDatabase .getDatabaseName ()),
274
280
6000L );
275
281
276
- waitUtilSpecificEvent (
282
+ waitUntilSpecificEvent (
277
283
String .format (
278
284
"DataChangeEvent{tableId=%s.terminus, before=[], after=[2013, v13, gus], op=INSERT, meta=()}" ,
279
285
transformRenameDatabase .getDatabaseName ()),
280
286
6000L );
281
287
282
- waitUtilSpecificEvent (
288
+ waitUntilSpecificEvent (
283
289
String .format (
284
290
"DataChangeEvent{tableId=%s.terminus, before=[], after=[2014, v14, henry], op=INSERT, meta=()}" ,
285
291
transformRenameDatabase .getDatabaseName ()),
@@ -305,19 +311,19 @@ public void testAssortedSchemaTransform() throws Exception {
305
311
throw e ;
306
312
}
307
313
308
- waitUtilSpecificEvent (
314
+ waitUntilSpecificEvent (
309
315
String .format (
310
316
"DataChangeEvent{tableId=%s.terminus, before=[1009, v8.1, bob], after=[1009, v100, bob], op=UPDATE, meta=()}" ,
311
317
transformRenameDatabase .getDatabaseName ()),
312
318
6000L );
313
319
314
- waitUtilSpecificEvent (
320
+ waitUntilSpecificEvent (
315
321
String .format (
316
322
"DataChangeEvent{tableId=%s.terminus, before=[], after=[3007, v7, iina], op=INSERT, meta=()}" ,
317
323
transformRenameDatabase .getDatabaseName ()),
318
324
6000L );
319
325
320
- waitUtilSpecificEvent (
326
+ waitUntilSpecificEvent (
321
327
String .format (
322
328
"DataChangeEvent{tableId=%s.terminus, before=[2011, v11, eva], after=[], op=DELETE, meta=()}" ,
323
329
transformRenameDatabase .getDatabaseName ()),
@@ -327,17 +333,143 @@ public void testAssortedSchemaTransform() throws Exception {
327
333
System .out .println (stdout );
328
334
}
329
335
330
- private void validateResult (List <String > expectedEvents ) {
336
+ @ Test
337
+ public void testWildcardSchemaTransform () throws Exception {
338
+ String pipelineJob =
339
+ String .format (
340
+ "source:\n "
341
+ + " type: mysql\n "
342
+ + " hostname: %s\n "
343
+ + " port: 3306\n "
344
+ + " username: %s\n "
345
+ + " password: %s\n "
346
+ + " tables: %s.\\ .*\n "
347
+ + " server-id: 5400-5404\n "
348
+ + " server-time-zone: UTC\n "
349
+ + "\n "
350
+ + "sink:\n "
351
+ + " type: values\n "
352
+ + "transform:\n "
353
+ + " - source-table: %s.TABLEALPHA\n "
354
+ + " projection: \\ *, CONCAT('v', VERSION) AS VERSION, LOWER(NAMEALPHA) AS NAME\n "
355
+ + " filter: AGEALPHA < 19\n "
356
+ + " - source-table: %s.TABLEBETA\n "
357
+ + " projection: \\ *, CONCAT('v', VERSION) AS VERSION, LOWER(NAMEBETA) AS NAME\n "
358
+ + "\n "
359
+ + "pipeline:\n "
360
+ + " parallelism: 1" ,
361
+ INTER_CONTAINER_MYSQL_ALIAS ,
362
+ MYSQL_TEST_USER ,
363
+ MYSQL_TEST_PASSWORD ,
364
+ transformRenameDatabase .getDatabaseName (),
365
+ transformRenameDatabase .getDatabaseName (),
366
+ transformRenameDatabase .getDatabaseName (),
367
+ transformRenameDatabase .getDatabaseName (),
368
+ transformRenameDatabase .getDatabaseName ());
369
+ Path mysqlCdcJar = TestUtils .getResource ("mysql-cdc-pipeline-connector.jar" );
370
+ Path valuesCdcJar = TestUtils .getResource ("values-cdc-pipeline-connector.jar" );
371
+ Path mysqlDriverJar = TestUtils .getResource ("mysql-driver.jar" );
372
+ submitPipelineJob (pipelineJob , mysqlCdcJar , valuesCdcJar , mysqlDriverJar );
373
+ waitUntilJobRunning (Duration .ofSeconds (30 ));
374
+ LOG .info ("Pipeline job is running" );
375
+
376
+ waitUntilSpecificEvent (
377
+ String .format (
378
+ "CreateTableEvent{tableId=%s.TABLEALPHA, schema=columns={`ID` INT NOT NULL,`VERSION` STRING,`PRICEALPHA` INT,`AGEALPHA` INT,`NAMEALPHA` VARCHAR(128),`NAME` STRING}, primaryKeys=ID, options=()}" ,
379
+ transformRenameDatabase .getDatabaseName ()),
380
+ 6000L );
381
+
382
+ waitUntilSpecificEvent (
383
+ String .format (
384
+ "DataChangeEvent{tableId=%s.TABLEALPHA, before=[], after=[1008, v8, 199, 17, Alice, alice], op=INSERT, meta=()}" ,
385
+ transformRenameDatabase .getDatabaseName ()),
386
+ 6000L );
387
+
388
+ waitUntilSpecificEvent (
389
+ String .format (
390
+ "DataChangeEvent{tableId=%s.TABLEALPHA, before=[], after=[1009, v8.1, 0, 18, Bob, bob], op=INSERT, meta=()}" ,
391
+ transformRenameDatabase .getDatabaseName ()),
392
+ 6000L );
393
+
394
+ waitUntilSpecificEvent (
395
+ String .format (
396
+ "CreateTableEvent{tableId=%s.TABLEBETA, schema=columns={`ID` INT NOT NULL,`VERSION` STRING,`CODENAMESBETA` VARCHAR(17),`AGEBETA` INT,`NAMEBETA` VARCHAR(128),`NAME` STRING}, primaryKeys=ID, options=()}" ,
397
+ transformRenameDatabase .getDatabaseName ()),
398
+ 6000L );
399
+
400
+ waitUntilSpecificEvent (
401
+ String .format (
402
+ "DataChangeEvent{tableId=%s.TABLEBETA, before=[], after=[2011, v11, Big Sur, 21, Eva, eva], op=INSERT, meta=()}" ,
403
+ transformRenameDatabase .getDatabaseName ()),
404
+ 6000L );
405
+
406
+ waitUntilSpecificEvent (
407
+ String .format (
408
+ "DataChangeEvent{tableId=%s.TABLEBETA, before=[], after=[2012, v12, Monterey, 22, Fred, fred], op=INSERT, meta=()}" ,
409
+ transformRenameDatabase .getDatabaseName ()),
410
+ 6000L );
411
+
412
+ waitUntilSpecificEvent (
413
+ String .format (
414
+ "DataChangeEvent{tableId=%s.TABLEBETA, before=[], after=[2013, v13, Ventura, 23, Gus, gus], op=INSERT, meta=()}" ,
415
+ transformRenameDatabase .getDatabaseName ()),
416
+ 6000L );
417
+
418
+ waitUntilSpecificEvent (
419
+ String .format (
420
+ "DataChangeEvent{tableId=%s.TABLEBETA, before=[], after=[2014, v14, Sonoma, 24, Henry, henry], op=INSERT, meta=()}" ,
421
+ transformRenameDatabase .getDatabaseName ()),
422
+ 6000L );
423
+
424
+ LOG .info ("Begin incremental reading stage." );
425
+ // generate binlogs
426
+ String mysqlJdbcUrl =
427
+ String .format (
428
+ "jdbc:mysql://%s:%s/%s" ,
429
+ MYSQL .getHost (),
430
+ MYSQL .getDatabasePort (),
431
+ transformRenameDatabase .getDatabaseName ());
432
+ try (Connection conn =
433
+ DriverManager .getConnection (
434
+ mysqlJdbcUrl , MYSQL_TEST_USER , MYSQL_TEST_PASSWORD );
435
+ Statement stat = conn .createStatement ()) {
436
+ stat .execute ("UPDATE TABLEALPHA SET VERSION='100' WHERE id=1009;" );
437
+ stat .execute ("INSERT INTO TABLEALPHA VALUES (3007, '7', 79, 16, 'IINA');" );
438
+ stat .execute ("DELETE FROM TABLEBETA WHERE id=2011;" );
439
+ } catch (SQLException e ) {
440
+ LOG .error ("Update table for CDC failed." , e );
441
+ throw e ;
442
+ }
443
+
444
+ waitUntilSpecificEvent (
445
+ String .format (
446
+ "DataChangeEvent{tableId=%s.TABLEALPHA, before=[1009, v8.1, 0, 18, Bob, bob], after=[1009, v100, 0, 18, Bob, bob], op=UPDATE, meta=()}" ,
447
+ transformRenameDatabase .getDatabaseName ()),
448
+ 6000L );
449
+
450
+ waitUntilSpecificEvent (
451
+ String .format (
452
+ "DataChangeEvent{tableId=%s.TABLEALPHA, before=[], after=[3007, v7, 79, 16, IINA, iina], op=INSERT, meta=()}" ,
453
+ transformRenameDatabase .getDatabaseName ()),
454
+ 6000L );
455
+
456
+ waitUntilSpecificEvent (
457
+ String .format (
458
+ "DataChangeEvent{tableId=%s.TABLEBETA, before=[2011, v11, Big Sur, 21, Eva, eva], after=[], op=DELETE, meta=()}" ,
459
+ transformRenameDatabase .getDatabaseName ()),
460
+ 6000L );
461
+
331
462
String stdout = taskManagerConsumer .toUtf8String ();
463
+ System .out .println (stdout );
464
+ }
465
+
466
+ private void validateResult (List <String > expectedEvents ) throws Exception {
332
467
for (String event : expectedEvents ) {
333
- if (!stdout .contains (event )) {
334
- throw new RuntimeException (
335
- "failed to get specific event: " + event + " from stdout: " + stdout );
336
- }
468
+ waitUntilSpecificEvent (event , 6000L );
337
469
}
338
470
}
339
471
340
- private void waitUtilSpecificEvent (String event , long timeout ) throws Exception {
472
+ private void waitUntilSpecificEvent (String event , long timeout ) throws Exception {
341
473
boolean result = false ;
342
474
long endTimeout = System .currentTimeMillis () + timeout ;
343
475
while (System .currentTimeMillis () < endTimeout ) {
0 commit comments