Search in sources :

Example 6 with WatchListenerInhibitor

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();
}
Also used : Table(org.apache.ignite.table.Table) NodeStoppingException(org.apache.ignite.lang.NodeStoppingException) TableImpl(org.apache.ignite.internal.table.TableImpl) Ignite(org.apache.ignite.Ignite) WatchListenerInhibitor(org.apache.ignite.internal.test.WatchListenerInhibitor) UUID(java.util.UUID) IgniteTablesInternal(org.apache.ignite.internal.table.IgniteTablesInternal) Test(org.junit.jupiter.api.Test) IgniteAbstractTest(org.apache.ignite.internal.testframework.IgniteAbstractTest)

Aggregations

Ignite (org.apache.ignite.Ignite)6 WatchListenerInhibitor (org.apache.ignite.internal.test.WatchListenerInhibitor)6 IgniteAbstractTest (org.apache.ignite.internal.testframework.IgniteAbstractTest)6 Test (org.junit.jupiter.api.Test)6 CompletableFuture (java.util.concurrent.CompletableFuture)4 ExecutionException (java.util.concurrent.ExecutionException)3 Table (org.apache.ignite.table.Table)3 TableImpl (org.apache.ignite.internal.table.TableImpl)2 Tuple (org.apache.ignite.table.Tuple)2 Lists (com.google.common.collect.Lists)1 ArrayList (java.util.ArrayList)1 LinkedHashMap (java.util.LinkedHashMap)1 List (java.util.List)1 Map (java.util.Map)1 UUID (java.util.UUID)1 TimeUnit (java.util.concurrent.TimeUnit)1 IgnitionManager (org.apache.ignite.IgnitionManager)1 IgniteImpl (org.apache.ignite.internal.app.IgniteImpl)1 SchemaConfigurationConverter.convert (org.apache.ignite.internal.schema.configuration.SchemaConfigurationConverter.convert)1 IgniteTablesInternal (org.apache.ignite.internal.table.IgniteTablesInternal)1