use of org.apache.ignite.table.Table in project ignite-3 by apache.
the class ItTablesApiTest method addIndexIfNotExists.
/**
* Creates a table if it does not exist.
*
* @param node Cluster node.
* @param schemaName Schema name.
* @param shortTableName Table name.
*/
protected void addIndexIfNotExists(Ignite node, String schemaName, String shortTableName) {
IndexDefinition idx = SchemaBuilders.hashIndex("testHI").withColumns("valInt", "valStr").build();
node.tables().alterTable(schemaName + "." + shortTableName, chng -> chng.changeIndices(idxes -> {
if (idxes.get(idx.name()) == null) {
idxes.create(idx.name(), tableIndexChange -> convert(idx, tableIndexChange));
} else {
log.info("Index already exists [naem={}]", idx.name());
}
}));
}
use of org.apache.ignite.table.Table 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();
}
use of org.apache.ignite.table.Table in project ignite-3 by apache.
the class ItTablesApiTest method testTableAlreadyCreated.
/**
* Tries to create a table which is already created.
*/
@Test
public void testTableAlreadyCreated() {
clusterNodes.forEach(ign -> assertNull(ign.tables().table(TABLE_NAME)));
Ignite ignite0 = clusterNodes.get(0);
Table tbl = createTable(ignite0, SCHEMA, SHORT_TABLE_NAME);
assertThrows(TableAlreadyExistsException.class, () -> createTable(ignite0, SCHEMA, SHORT_TABLE_NAME));
assertEquals(tbl, createTableIfNotExists(ignite0, SCHEMA, SHORT_TABLE_NAME));
}
use of org.apache.ignite.table.Table in project ignite-3 by apache.
the class ItThinClientConnectionTest method testThinClientConnectsToServerNodesAndExecutesBasicTableOperations.
/**
* Check that thin client can connect to any server node and work with table API.
*/
@Test
void testThinClientConnectsToServerNodesAndExecutesBasicTableOperations() throws Exception {
for (var addr : getNodeAddresses()) {
try (var client = IgniteClient.builder().addresses(addr).build()) {
List<Table> tables = client.tables().tables();
assertEquals(1, tables.size());
Table table = tables.get(0);
assertEquals(String.format("%s.%s", SCHEMA_NAME, TABLE_NAME), table.name());
var tuple = Tuple.create().set(COLUMN_KEY, 1).set(COLUMN_VAL, "Hello");
var keyTuple = Tuple.create().set(COLUMN_KEY, 1);
RecordView<Tuple> recView = table.recordView();
recView.upsert(null, tuple);
assertEquals("Hello", recView.get(null, keyTuple).stringValue(COLUMN_VAL));
var kvView = table.keyValueView();
assertEquals("Hello", kvView.get(null, keyTuple).stringValue(COLUMN_VAL));
var pojoView = table.recordView(TestPojo.class);
assertEquals("Hello", pojoView.get(null, new TestPojo(1)).val);
assertTrue(recView.delete(null, keyTuple));
}
}
}
use of org.apache.ignite.table.Table in project ignite-3 by apache.
the class ItNoThreadsLeftTest method test.
/**
* Starts one node and stops it and checks that the amount of thread equivalent as before.
*
* @param testInfo JUnit meta info for the test.
* @throws Exception If failed.
*/
@Test
public void test(TestInfo testInfo) throws Exception {
Set<Thread> threadsBefore = getCurrentThreads();
String nodeName = IgniteTestUtils.testNodeName(testInfo, 0);
Ignite ignite = IgnitionManager.start(nodeName, NODE_CONFIGURATION.apply(nodeName), workDir.resolve(nodeName));
Table tbl = createTable(ignite, SCHEMA, SHORT_TABLE_NAME);
assertNotNull(tbl);
ignite.close();
assertTrue(waitForCondition(() -> threadsBefore.size() == getCurrentThreads().size(), 3_000), getCurrentThreads().stream().filter(thread -> !threadsBefore.contains(thread)).map(Thread::getName).collect(joining(", ")));
}
Aggregations