use of org.apache.ignite.internal.test.WatchListenerInhibitor in project ignite-3 by apache.
the class ItTablesApiTest method testCreateDropTable.
/**
* Checks that if a table would be created/dropped in any cluster node, this action reflects on all others.
* Table management operations should pass in linearize order: if an action completed in one node,
* the result has to be visible to another one.
*
* @throws Exception If failed.
*/
@Test
public void testCreateDropTable() throws Exception {
clusterNodes.forEach(ign -> assertNull(ign.tables().table(TABLE_NAME)));
Ignite ignite1 = clusterNodes.get(1);
WatchListenerInhibitor ignite1Inhibitor = metastorageEventsInhibitor(ignite1);
ignite1Inhibitor.startInhibit();
Table table = createTable(clusterNodes.get(0), SCHEMA, SHORT_TABLE_NAME);
UUID tblId = ((TableImpl) table).tableId();
CompletableFuture<Table> tableByNameFut = CompletableFuture.supplyAsync(() -> {
return ignite1.tables().table(TABLE_NAME);
});
CompletableFuture<Table> tableByIdFut = CompletableFuture.supplyAsync(() -> {
try {
return ((IgniteTablesInternal) ignite1.tables()).table(tblId);
} catch (NodeStoppingException e) {
throw new AssertionError(e.getMessage());
}
});
// Therefore the table still doesn't exists locally, but API prevents getting null and waits events.
for (Ignite ignite : clusterNodes) {
if (ignite != ignite1) {
assertNotNull(ignite.tables().table(TABLE_NAME));
assertNotNull(((IgniteTablesInternal) ignite.tables()).table(tblId));
}
}
assertFalse(tableByNameFut.isDone());
assertFalse(tableByIdFut.isDone());
ignite1Inhibitor.stopInhibit();
assertNotNull(tableByNameFut.get(10, TimeUnit.SECONDS));
assertNotNull(tableByIdFut.get(10, TimeUnit.SECONDS));
ignite1Inhibitor.startInhibit();
clusterNodes.get(0).tables().dropTable(TABLE_NAME);
// Therefore the table still exists locally, but API prevents getting it.
for (Ignite ignite : clusterNodes) {
assertNull(ignite.tables().table(TABLE_NAME));
assertNull(((IgniteTablesInternal) ignite.tables()).table(tblId));
assertThrows(TableNotFoundException.class, () -> dropTable(ignite, SCHEMA, SHORT_TABLE_NAME));
dropTableIfExists(ignite, SCHEMA, SHORT_TABLE_NAME);
}
ignite1Inhibitor.stopInhibit();
}
Aggregations