ConditionalMutation toMutation() { Condition cond = new Condition("meta", "seq"); if (seq >= 0) cond.setValue(seq + ""); ConditionalMutation cm = new ConditionalMutation(row, cond); cm.put("meta", "seq", (seq + 1) + ""); cm.put("meta", "sum", (sum) + ""); for (int i = 0; i < data.length; i++) { cm.put("data", i + "", data[i] + ""); } return cm; }
cm0.put("name", "last", "doe"); cm0.put("name", "first", "john"); cm0.put("tx", "seq", "1"); Assert.assertEquals(Status.ACCEPTED, cw.write(cm0).getStatus()); Assert.assertEquals(Status.REJECTED, cw.write(cm0).getStatus()); cm1.put("name", "last", "Doe"); cm1.put("tx", "seq", "2"); Assert.assertEquals(Status.ACCEPTED, cw.write(cm1).getStatus()); cm2.put("name", "last", "DOE"); cm2.put("tx", "seq", "2"); Assert.assertEquals(Status.REJECTED, cw.write(cm2).getStatus()); cm3.put("name", "last", "deo"); cm3.put("tx", "seq", "2"); Assert.assertEquals(Status.REJECTED, cw.write(cm3).getStatus()); cm4.put("name", "last", "deo"); cm4.put("tx", "seq", "3"); Assert.assertEquals(Status.REJECTED, cw.write(cm4).getStatus()); cm5.put("name", "last", "deo"); cm5.put("tx", "seq", "3"); Assert.assertEquals(Status.REJECTED, cw.write(cm5).getStatus()); cm6.put("name", "last", "DOE"); cm6.put("tx", "seq", "3"); Assert.assertEquals(Status.ACCEPTED, cw.write(cm6).getStatus());
@Test(expected = IllegalArgumentException.class) public void testNoConditions() throws AccumuloException, AccumuloSecurityException, TableExistsException, TableNotFoundException { String table = getUniqueNames(1)[0]; Connector conn = getConnector(); conn.tableOperations().create(table); try ( ConditionalWriter cw = conn.createConditionalWriter(table, new ConditionalWriterConfig())) { ConditionalMutation cm1 = new ConditionalMutation("r1"); cm1.put("tx", "seq", "1"); cm1.put("data", "x", "a"); cw.write(cm1); } }
cm0.put("name+", "last", cvaob, "doe"); cm0.put("name", "first", cvaob, "john"); cm0.put("tx", "seq", cvaob, "1"); mutations.add(cm0); cm1.put("name", "last", cvaab, "doe"); cm1.put("name", "first", cvaab, "jane"); cm1.put("tx", "seq", cvaab, "1"); mutations.add(cm1); cm2.put("name", "last", cvaob, "doe"); cm2.put("name", "first", cvaob, "jack"); cm2.put("tx", "seq", cvaob, "1"); mutations.add(cm2); cm3.put("name", "last", cvaob, "doe"); cm3.put("name", "first", cvaob, "john"); cm3.put("tx", "seq", cvaob, "2"); mutations.add(cm3);
new Condition(acct1, "seq").setValue(Utils.getSeq(a1.seq)), new Condition(acct2, "seq").setValue(Utils.getSeq(a2.seq))); cm.put(acct1, "bal", (a1.bal - amt) + ""); cm.put(acct2, "bal", (a2.bal + amt) + ""); cm.put(acct1, "seq", Utils.getSeq(a1.seq + 1)); cm.put(acct2, "seq", Utils.getSeq(a2.seq + 1));
private void conditionWriteSome(String tableName, int n, ConditionalWriterConfig cfg) throws Exception { Connector c = getConnector(); ConditionalWriter cw = c.createConditionalWriter(tableName, cfg); for (int i = 0; i < n; i++) { ConditionalMutation m = new ConditionalMutation((CharSequence) (i + ""), new Condition("", "")); m.put("", "", "X"); assertEquals(Status.ACCEPTED, cw.write(m).getStatus()); } }
@Test public void testError() throws Exception { String table = getUniqueNames(1)[0]; Connector conn = getConnector(); conn.tableOperations().create(table); try ( ConditionalWriter cw = conn.createConditionalWriter(table, new ConditionalWriterConfig())) { IteratorSetting iterSetting = new IteratorSetting(5, BadIterator.class); ConditionalMutation cm1 = new ConditionalMutation("r1", new Condition("tx", "seq").setIterators(iterSetting)); cm1.put("tx", "seq", "1"); cm1.put("data", "x", "a"); Result result = cw.write(cm1); try { Status status = result.getStatus(); Assert .fail("Expected exception using iterator which throws an error, Got status: " + status); } catch (AccumuloException ae) { } } }
/** * Creates a {@link ConditionalMutation} that only updates the cardinality * of the PCJ table if the old value has not changed by the time this mutation * is committed to Accumulo. * * @param current - The current cardinality value. * @param delta - How much the cardinality will change. * @return The mutation that will perform the conditional update. */ private static ConditionalMutation makeUpdateCardinalityMutation(final long current, final long delta) { // Try to update the cardinality by the delta. final ConditionalMutation mutation = new ConditionalMutation(PCJ_METADATA_ROW_ID); final Condition lastCardinalityStillCurrent = new Condition( PCJ_METADATA_FAMILY, PCJ_METADATA_CARDINALITY); // Require the old cardinality to be the value we just read. final byte[] currentCardinalityBytes = longLexicoder.encode( current ); lastCardinalityStillCurrent.setValue( currentCardinalityBytes ); mutation.addCondition(lastCardinalityStillCurrent); // If that is the case, then update to the new value. final Value newCardinality = new Value( longLexicoder.encode(current + delta) ); mutation.put(PCJ_METADATA_FAMILY, PCJ_METADATA_CARDINALITY, newCardinality); return mutation; }
@Test public void testConstraints() throws Exception { // ensure constraint violations are properly reported Connector conn = getConnector(); String tableName = getUniqueNames(1)[0]; conn.tableOperations().create(tableName); conn.tableOperations().addConstraint(tableName, AlphaNumKeyConstraint.class.getName()); conn.tableOperations().clone(tableName, tableName + "_clone", true, new HashMap<String,String>(), new HashSet<String>()); Scanner scanner = conn.createScanner(tableName + "_clone", new Authorizations()); try (ConditionalWriter cw = conn.createConditionalWriter(tableName + "_clone", new ConditionalWriterConfig())) { ConditionalMutation cm0 = new ConditionalMutation("99006+", new Condition("tx", "seq")); cm0.put("tx", "seq", "1"); Assert.assertEquals(Status.VIOLATED, cw.write(cm0).getStatus()); Assert.assertFalse("Should find no results in the table is mutation result was violated", scanner.iterator().hasNext()); ConditionalMutation cm1 = new ConditionalMutation("99006", new Condition("tx", "seq")); cm1.put("tx", "seq", "1"); Assert.assertEquals(Status.ACCEPTED, cw.write(cm1).getStatus()); Assert.assertTrue("Accepted result should be returned when reading table", scanner.iterator().hasNext()); } }
@Test public void testOffline() throws Exception { String table = getUniqueNames(1)[0]; Connector conn = getConnector(); conn.tableOperations().create(table); try ( ConditionalWriter cw = conn.createConditionalWriter(table, new ConditionalWriterConfig())) { conn.tableOperations().offline(table, true); ConditionalMutation cm1 = new ConditionalMutation("r1", new Condition("tx", "seq")); cm1.put("tx", "seq", "1"); cm1.put("data", "x", "a"); Result result = cw.write(cm1); try { Status status = result.getStatus(); Assert.fail("Expected exception writing conditional mutation to offline table. Got status: " + status); } catch (AccumuloException ae) { Assert.assertEquals(TableOfflineException.class, ae.getCause().getClass()); } try { conn.createConditionalWriter(table, new ConditionalWriterConfig()); Assert.fail("Expected exception creating conditional writer to offline table"); } catch (TableOfflineException e) {} } }
@Test public void testDeleteTable() throws Exception { String table = getUniqueNames(1)[0]; Connector conn = getConnector(); try { conn.createConditionalWriter(table, new ConditionalWriterConfig()); Assert.fail("Creating conditional writer for table that doesn't exist should fail"); } catch (TableNotFoundException e) {} conn.tableOperations().create(table); try ( ConditionalWriter cw = conn.createConditionalWriter(table, new ConditionalWriterConfig())) { conn.tableOperations().delete(table); ConditionalMutation cm1 = new ConditionalMutation("r1", new Condition("tx", "seq")); cm1.put("tx", "seq", "1"); cm1.put("data", "x", "a"); Result result = cw.write(cm1); try { Status status = result.getStatus(); Assert.fail("Expected exception writing conditional mutation to deleted table. Got status: " + status); } catch (AccumuloException ae) { Assert.assertEquals(TableDeletedException.class, ae.getCause().getClass()); } } }
cm6.put("count", "comments", "7"); Assert.assertEquals(Status.ACCEPTED, cw.write(cm6).getStatus()); cm7.put("count", "comments", "8"); Assert.assertEquals(Status.ACCEPTED, cw.write(cm7).getStatus()); cm8.put("count", "comments", "9"); Assert.assertEquals(Status.ACCEPTED, cw.write(cm8).getStatus()); cm3.put("count", "comments", "3"); cm4.put("count", "comments", "3"); cm5.put("count", "comments", "3");
mutation.addCondition( condition ); final byte[] newDetailsBytes = serializer.serialize(newDetails); mutation.put(COL_FAMILY, COL_QUALIFIER, new Value(newDetailsBytes));
mutation.addCondition( condition ); final byte[] newDetailsBytes = serializer.serialize(newDetails); mutation.put(COL_FAMILY, COL_QUALIFIER, new Value(newDetailsBytes));