@Override public void execute(String statement, String scriptPath, int lineNumber, boolean continueOnError, boolean ignoreFailedDrops) { try { ResultSet result = getConnection().execute(statement); if (result.wasApplied()) { log.debug("Statement {} was applied", statement); } else { throw new ScriptStatementFailedException(statement, lineNumber, scriptPath); } } catch (DriverException e) { throw new ScriptStatementFailedException(statement, lineNumber, scriptPath, e); } }
@Override public boolean removeWorkflow(String workflowId) { Workflow workflow = getWorkflow(workflowId, true); boolean removed = false; // TODO: calculate number of shards and iterate if (workflow != null) { try { recordCassandraDaoRequests("removeWorkflow", "n/a", workflow.getWorkflowName()); ResultSet resultSet = session.execute(deleteWorkflowStatement.bind(UUID.fromString(workflowId), DEFAULT_SHARD_ID)); if (resultSet.wasApplied()) { removed = true; } } catch (Exception e) { Monitors.error(CLASS_NAME, "removeWorkflow"); String errorMsg = String.format("Failed to remove workflow: %s", workflowId); LOGGER.error(errorMsg, e); throw new ApplicationException(ApplicationException.Code.BACKEND_ERROR, errorMsg); } workflow.getTasks().forEach(this::removeTaskLookup); } return removed; }
private boolean removeTask(Task task) { // TODO: calculate shard number based on seq and maxTasksPerShard try { // get total tasks for this workflow WorkflowMetadata workflowMetadata = getWorkflowMetadata(task.getWorkflowInstanceId()); int totalTasks = workflowMetadata.getTotalTasks(); // remove from task_lookup table removeTaskLookup(task); recordCassandraDaoRequests("removeTask", task.getTaskType(), task.getWorkflowType()); // delete task from workflows table and decrement total tasks by 1 BatchStatement batchStatement = new BatchStatement(); batchStatement.add(deleteTaskStatement.bind(UUID.fromString(task.getWorkflowInstanceId()), DEFAULT_SHARD_ID, task.getTaskId())); batchStatement.add(updateTotalTasksStatement.bind(totalTasks - 1, UUID.fromString(task.getWorkflowInstanceId()), DEFAULT_SHARD_ID)); ResultSet resultSet = session.execute(batchStatement); return resultSet.wasApplied(); } catch (Exception e) { Monitors.error(CLASS_NAME, "removeTask"); String errorMsg = String.format("Failed to remove task: %s", task.getTaskId()); LOGGER.error(errorMsg, e); throw new ApplicationException(ApplicationException.Code.BACKEND_ERROR, errorMsg); } }
private void testInitScript(CassandraContainer cassandraContainer) { ResultSet resultSet = performQuery(cassandraContainer, "SELECT * FROM keySpaceTest.catalog_category"); assertTrue("Query was not applied", resultSet.wasApplied()); Row row = resultSet.one(); assertEquals("Inserted row is not in expected state", 1, row.getLong(0)); assertEquals("Inserted row is not in expected state", "test_category", row.getString(1)); }
@Test public void testCassandraQueryWaitStrategy() { try ( CassandraContainer cassandraContainer = new CassandraContainer<>() .waitingFor(new CassandraQueryWaitStrategy()) ) { cassandraContainer.start(); ResultSet resultSet = performQuery(cassandraContainer, "SELECT release_version FROM system.local"); assertTrue("Query was not applied", resultSet.wasApplied()); } }
@Test public void testSimple() { try (CassandraContainer cassandraContainer = new CassandraContainer<>()) { cassandraContainer.start(); ResultSet resultSet = performQuery(cassandraContainer, "SELECT release_version FROM system.local"); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } }
@Test public void testSpecificVersion() { String cassandraVersion = "3.0.15"; try (CassandraContainer cassandraContainer = new CassandraContainer<>("cassandra:" + cassandraVersion)) { cassandraContainer.start(); ResultSet resultSet = performQuery(cassandraContainer, "SELECT release_version FROM system.local"); assertTrue("Query was not applied", resultSet.wasApplied()); assertEquals("Cassandra has wrong version", cassandraVersion, resultSet.one().getString(0)); } }
@Test public void testCassandraGetCluster() { try (CassandraContainer cassandraContainer = new CassandraContainer<>()) { cassandraContainer.start(); ResultSet resultSet = performQuery(cassandraContainer.getCluster(), "SELECT release_version FROM system.local"); assertTrue("Query was not applied", resultSet.wasApplied()); assertNotNull("Result set has no release_version", resultSet.one().getString(0)); } }
@Test public void testConfigurationOverride() { try ( CassandraContainer cassandraContainer = new CassandraContainer<>() .withConfigurationOverride("cassandra-test-configuration-example") ) { cassandraContainer.start(); ResultSet resultSet = performQuery(cassandraContainer, "SELECT cluster_name FROM system.local"); assertTrue("Query was not applied", resultSet.wasApplied()); assertEquals("Cassandra configuration is not overridden", TEST_CLUSTER_NAME_IN_CONF, resultSet.one().getString(0)); } }
private T insertLocked(T entity) { Insert insert = insertInto(getColumnFamilyName()).ifNotExists(); CassandraEntityMapper<T> entityMapper = CassandraEntityMapper.getEntityMapperForClass( getColumnFamilyClass(), cassandraClient); for (String name : entityMapper.getKeyColumnNames()) { insert.value(name, entityMapper.getColumnValueForName(name, entity, cassandraClient)); } for (String name : entityMapper.getNonKeyColumnNames()) { insert.value(name, entityMapper.getColumnValueForName(name, entity, cassandraClient)); } insert.setConsistencyLevel(getWriteConsistencyLevel()); ResultSet res = execute(insert); if (!res.wasApplied()) { LOG.error("[{}] Can't insert entity. Entity already exists!", getColumnFamilyClass()); throw new KaaOptimisticLockingFailureException("Can't insert entity. Entity already exists!"); } else { Clause[] whereClauses = buildKeyClauses(entityMapper, entity); Select.Where where = select().from(getColumnFamilyName()).where(whereClauses[0]); if (whereClauses.length > 1) { for (int i = 1; i < whereClauses.length; i++) { where = where.and(whereClauses[i]); } } return findOneByStatement(where); } }
if (!res.wasApplied()) { LOG.error("[{}] Can't update entity with version {}. Entity already changed!", getColumnFamilyClass(), version);
/** * Test for #JAVA-358 - Directly expose CAS_RESULT_COLUMN. * * <p>This test makes sure that the boolean flag {@code ResultSet.wasApplied()} is false when we * try to insert a row which already exists. * * @see ResultSet#wasApplied() */ @Test(groups = "short") public void insert_if_not_exist_should_support_wasApplied_boolean() { // First, make sure the test table and the row exist session().execute("CREATE TABLE IF NOT EXISTS Java358 (key int primary key, value int)"); ResultSet rs; rs = session().execute("INSERT INTO Java358(key, value) VALUES (42, 42) IF NOT EXISTS"); assertTrue(rs.wasApplied()); // Then, make sure the flag reports correctly that we did not create a new row rs = session().execute("INSERT INTO Java358(key, value) VALUES (42, 42) IF NOT EXISTS"); assertFalse(rs.wasApplied()); }
@Test(groups = "short") public void singleUpdateTest() { session().execute("TRUNCATE test"); session().execute("INSERT INTO test (k1, k2, v) VALUES (1, 1, 1)"); ResultSet rs = session().execute("UPDATE test SET v = 3 WHERE k1 = 1 AND k2 = 1 IF v = 2"); assertFalse(rs.wasApplied()); // Ensure that reading the status does not consume a row: assertFalse(rs.isExhausted()); rs = session().execute("UPDATE test SET v = 3 WHERE k1 = 1 AND k2 = 1 IF v = 1"); assertTrue(rs.wasApplied()); assertFalse(rs.isExhausted()); // Non-conditional statement rs = session().execute("UPDATE test SET v = 4 WHERE k1 = 1 AND k2 = 1"); assertTrue(rs.wasApplied()); }
/** * Test for #JAVA-358 - Directly expose CAS_RESULT_COLUMN. * * <p>This test makes sure that the boolean flag {@code ResultSet.wasApplied()} is false when we * try to delete a row which does not exist. * * @see ResultSet#wasApplied() */ @Test(groups = "short") public void delete_if_not_exist_should_support_wasApplied_boolean() { // First, make sure the test table and the row exist session().execute("CREATE TABLE IF NOT EXISTS Java358 (key int primary key, value int)"); session().execute("INSERT INTO Java358(key, value) VALUES (42, 42)"); // Then, make sure the flag reports correctly that we did delete the row ResultSet rs; rs = session().execute("DELETE FROM Java358 WHERE KEY=42 IF EXISTS"); assertTrue(rs.wasApplied()); // Finally, make sure the flag reports correctly that we did did not delete an non-existing row rs = session().execute("DELETE FROM Java358 WHERE KEY=42 IF EXISTS"); assertFalse(rs.wasApplied()); } }
@Test(groups = "short") public void multipageResultSetTest() { session().execute("TRUNCATE test"); session().execute("INSERT INTO test (k1, k2, v) VALUES (1, 1, 1)"); session().execute("INSERT INTO test (k1, k2, v) VALUES (1, 2, 1)"); // This is really contrived, we just want to cover the code path in // ArrayBackedResultSet#MultiPage. // Currently CAS update results are never multipage, so it's hard to come up with a meaningful // example. ResultSet rs = session().execute(new SimpleStatement("SELECT * FROM test WHERE k1 = 1").setFetchSize(1)); assertTrue(rs.wasApplied()); }
@Override public boolean wasApplied() { return resultSet.wasApplied(); } }
@Test(groups = "short") public void batchUpdateTest() { session().execute("TRUNCATE test"); session().execute("INSERT INTO test (k1, k2, v) VALUES (1, 1, 1)"); session().execute("INSERT INTO test (k1, k2, v) VALUES (1, 2, 1)"); PreparedStatement ps = session().prepare("UPDATE test SET v = :new WHERE k1 = :k1 AND k2 = :k2 IF v = :old"); BatchStatement batch = new BatchStatement(); batch.add( ps.bind().setInt("k1", 1).setInt("k2", 1).setInt("old", 2).setInt("new", 3)); // will fail batch.add(ps.bind().setInt("k1", 1).setInt("k2", 2).setInt("old", 1).setInt("new", 3)); ResultSet rs = session().execute(batch); assertFalse(rs.wasApplied()); }
@Override public boolean execute(String cql) throws DataAccessException { Assert.hasText(cql, "CQL must not be empty"); return queryForResultSet(cql).wasApplied(); }
assertThat(rs.wasApplied()).isTrue(); assertThat(rs.getColumnDefinitions()) .hasSize(1) assertThat(rs.wasApplied()).isFalse(); assertThat(rs.getColumnDefinitions()).hasSize(4); Row row = rs.one(); assertThat(rs.wasApplied()).isFalse(); assertThat(rs.getColumnDefinitions()).hasSize(5); row = rs.one();
private void updatePerRowMetric(ResultSet result) { uniqueHostsWrittenToInCurrentWindow.add(result.getExecutionInfo().getQueriedHost()); updateConsistencyLevelMetrics(result.getExecutionInfo().getAchievedConsistencyLevel()); successfullWrites += 1; if (!result.wasApplied()) { ignoredRequestsDuetoIfExistsCheck += 1; } }