|
62 | 62 | import org.mockito.MockitoAnnotations; |
63 | 63 |
|
64 | 64 | import java.io.IOException; |
| 65 | +import java.lang.reflect.Method; |
65 | 66 | import java.util.List; |
66 | 67 | import java.util.Map; |
67 | 68 |
|
@@ -500,7 +501,6 @@ public void testTriggerTableAddedIdempotent() { |
500 | 501 | ServerTableIdentifier tableIdentifier = serverTableIdentifier(); |
501 | 502 | MetricRegistry globalRegistry = MetricManager.getInstance().getGlobalRegistry(); |
502 | 503 |
|
503 | | - // Verify initial state: 1 runtime, metrics registered |
504 | 504 | Assert.assertEquals(1, persistency.getTableRuntimeMetas().size()); |
505 | 505 | int metricCountBefore = globalRegistry.getMetrics().size(); |
506 | 506 | Assert.assertTrue(metricCountBefore > 0); |
@@ -533,6 +533,56 @@ public void testTriggerTableAddedIdempotent() { |
533 | 533 | dropDatabase(); |
534 | 534 | } |
535 | 535 |
|
| 536 | + @Test |
| 537 | + public void testTriggerTableAddedDuplicateSameTableIdIsIdempotent() { |
| 538 | + ExternalCatalog externalCatalog = initExternalCatalog(); |
| 539 | + createTable(); |
| 540 | + ServerTableIdentifier tableIdentifier = serverTableIdentifier(); |
| 541 | + MetricRegistry globalRegistry = MetricManager.getInstance().getGlobalRegistry(); |
| 542 | + |
| 543 | + Assert.assertEquals(1, persistency.getTableRuntimeMetas().size()); |
| 544 | + int metricCountBefore = globalRegistry.getMetrics().size(); |
| 545 | + Assert.assertTrue(metricCountBefore > 0); |
| 546 | + |
| 547 | + boolean added = invokeTriggerTableAdded(externalCatalog, tableIdentifier); |
| 548 | + |
| 549 | + Assert.assertTrue(added); |
| 550 | + Assert.assertEquals(1, persistency.getTableRuntimeMetas().size()); |
| 551 | + Assert.assertTrue(tableService().contains(tableIdentifier.getId())); |
| 552 | + Assert.assertEquals(metricCountBefore, globalRegistry.getMetrics().size()); |
| 553 | + |
| 554 | + dropTable(); |
| 555 | + dropDatabase(); |
| 556 | + } |
| 557 | + |
| 558 | + @Test |
| 559 | + public void testTriggerTableAddedRepairStaleRuntimeSameTableId() { |
| 560 | + ExternalCatalog externalCatalog = initExternalCatalog(); |
| 561 | + createTable(); |
| 562 | + ServerTableIdentifier tableIdentifier = serverTableIdentifier(); |
| 563 | + MetricRegistry globalRegistry = MetricManager.getInstance().getGlobalRegistry(); |
| 564 | + |
| 565 | + int metricCountBefore = globalRegistry.getMetrics().size(); |
| 566 | + Assert.assertTrue(metricCountBefore > 0); |
| 567 | + |
| 568 | + persistency.deleteTableRuntime(tableIdentifier.getId()); |
| 569 | + Assert.assertEquals(0, persistency.getTableRuntimeMetas().size()); |
| 570 | + Assert.assertTrue(tableService().contains(tableIdentifier.getId())); |
| 571 | + |
| 572 | + boolean added = invokeTriggerTableAdded(externalCatalog, tableIdentifier); |
| 573 | + |
| 574 | + Assert.assertTrue(added); |
| 575 | + Assert.assertEquals(1, persistency.getTableRuntimeMetas().size()); |
| 576 | + Assert.assertTrue(tableService().contains(tableIdentifier.getId())); |
| 577 | + Assert.assertEquals(metricCountBefore, globalRegistry.getMetrics().size()); |
| 578 | + |
| 579 | + tableService().exploreTableRuntimes(); |
| 580 | + Assert.assertEquals(1, persistency.getTableRuntimeMetas().size()); |
| 581 | + |
| 582 | + dropTable(); |
| 583 | + dropDatabase(); |
| 584 | + } |
| 585 | + |
536 | 586 | @Mock private DefaultTableRuntime tableRuntimeWithException; |
537 | 587 | @Mock private ServerTableIdentifier tableIdentifierWithException; |
538 | 588 |
|
@@ -659,6 +709,19 @@ private void disposeNewCatalogTable( |
659 | 709 | catalogManager().dropCatalog(catalogName); |
660 | 710 | } |
661 | 711 |
|
| 712 | + private boolean invokeTriggerTableAdded( |
| 713 | + ServerCatalog catalog, ServerTableIdentifier tableIdentifier) { |
| 714 | + try { |
| 715 | + Method triggerTableAddedMethod = |
| 716 | + DefaultTableService.class.getDeclaredMethod( |
| 717 | + "triggerTableAdded", ServerCatalog.class, ServerTableIdentifier.class); |
| 718 | + triggerTableAddedMethod.setAccessible(true); |
| 719 | + return (boolean) triggerTableAddedMethod.invoke(tableService(), catalog, tableIdentifier); |
| 720 | + } catch (Exception e) { |
| 721 | + throw new RuntimeException(e); |
| 722 | + } |
| 723 | + } |
| 724 | + |
662 | 725 | private static class Persistency extends PersistentBase { |
663 | 726 | public void addTableIdentifier( |
664 | 727 | String catalog, String database, String tableName, TableFormat format) { |
|
0 commit comments