Search in sources :

Example 6 with Result

use of org.apache.accumulo.core.client.ConditionalWriter.Result in project accumulo by apache.

the class ConditionalWriterIT method testOffline.

@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) {
        }
    }
}
Also used : Condition(org.apache.accumulo.core.data.Condition) Status(org.apache.accumulo.core.client.ConditionalWriter.Status) Connector(org.apache.accumulo.core.client.Connector) ConditionalWriter(org.apache.accumulo.core.client.ConditionalWriter) AccumuloException(org.apache.accumulo.core.client.AccumuloException) ConditionalMutation(org.apache.accumulo.core.data.ConditionalMutation) TableOfflineException(org.apache.accumulo.core.client.TableOfflineException) ConditionalWriterConfig(org.apache.accumulo.core.client.ConditionalWriterConfig) Result(org.apache.accumulo.core.client.ConditionalWriter.Result) Test(org.junit.Test)

Example 7 with Result

use of org.apache.accumulo.core.client.ConditionalWriter.Result in project incubator-rya by apache.

the class AccumuloRyaInstanceDetailsRepository method update.

@Override
public void update(final RyaDetails oldDetails, final RyaDetails newDetails) throws NotInitializedException, ConcurrentUpdateException, RyaDetailsRepositoryException {
    // Preconditions.
    requireNonNull(oldDetails);
    requireNonNull(newDetails);
    if (!newDetails.getRyaInstanceName().equals(instanceName)) {
        throw new RyaDetailsRepositoryException("The instance name that was in the provided 'newDetails' does not match " + "the instance name that this repository is connected to. Make sure you're connected to the" + "correct Rya instance.");
    }
    if (!isInitialized()) {
        throw new NotInitializedException("Could not update the details for the Rya instanced named '" + instanceName + "' because it has not been initialized yet.");
    }
    // Use a conditional writer so that we can detect when the old details
    // are no longer the currently stored ones.
    ConditionalWriter writer = null;
    try {
        // Setup the condition that ensures the details have not changed since the edits were made.
        final byte[] oldDetailsBytes = serializer.serialize(oldDetails);
        final Condition condition = new Condition(COL_FAMILY, COL_QUALIFIER);
        condition.setValue(oldDetailsBytes);
        // Create the mutation that only performs the update if the details haven't changed.
        final ConditionalMutation mutation = new ConditionalMutation(ROW_ID);
        mutation.addCondition(condition);
        final byte[] newDetailsBytes = serializer.serialize(newDetails);
        mutation.put(COL_FAMILY, COL_QUALIFIER, new Value(newDetailsBytes));
        // Do the write.
        writer = connector.createConditionalWriter(detailsTableName, new ConditionalWriterConfig());
        final Result result = writer.write(mutation);
        switch(result.getStatus()) {
            case REJECTED:
            case VIOLATED:
                throw new ConcurrentUpdateException("Could not update the details for the Rya instance named '" + instanceName + "' because the old value is out of date.");
            case UNKNOWN:
            case INVISIBLE_VISIBILITY:
                throw new RyaDetailsRepositoryException("Could not update the details for the Rya instance named '" + instanceName + "'.");
        }
    } catch (final TableNotFoundException | AccumuloException | AccumuloSecurityException e) {
        throw new RyaDetailsRepositoryException("Could not update the details for the Rya instance named '" + instanceName + "'.");
    } finally {
        if (writer != null) {
            writer.close();
        }
    }
}
Also used : Condition(org.apache.accumulo.core.data.Condition) AccumuloException(org.apache.accumulo.core.client.AccumuloException) Result(org.apache.accumulo.core.client.ConditionalWriter.Result) ConditionalWriter(org.apache.accumulo.core.client.ConditionalWriter) TableNotFoundException(org.apache.accumulo.core.client.TableNotFoundException) ConditionalMutation(org.apache.accumulo.core.data.ConditionalMutation) Value(org.apache.accumulo.core.data.Value) ConditionalWriterConfig(org.apache.accumulo.core.client.ConditionalWriterConfig) AccumuloSecurityException(org.apache.accumulo.core.client.AccumuloSecurityException)

Example 8 with Result

use of org.apache.accumulo.core.client.ConditionalWriter.Result in project accumulo by apache.

the class ConditionalWriterIT method testSameRow.

@Test
public void testSameRow() throws Exception {
    // test multiple mutations for same row in same batch
    Connector conn = getConnector();
    String tableName = getUniqueNames(1)[0];
    conn.tableOperations().create(tableName);
    try (ConditionalWriter cw = conn.createConditionalWriter(tableName, new ConditionalWriterConfig())) {
        ConditionalMutation cm1 = new ConditionalMutation("r1", new Condition("tx", "seq"));
        cm1.put("tx", "seq", "1");
        cm1.put("data", "x", "a");
        Assert.assertEquals(Status.ACCEPTED, cw.write(cm1).getStatus());
        ConditionalMutation cm2 = new ConditionalMutation("r1", new Condition("tx", "seq").setValue("1"));
        cm2.put("tx", "seq", "2");
        cm2.put("data", "x", "b");
        ConditionalMutation cm3 = new ConditionalMutation("r1", new Condition("tx", "seq").setValue("1"));
        cm3.put("tx", "seq", "2");
        cm3.put("data", "x", "c");
        ConditionalMutation cm4 = new ConditionalMutation("r1", new Condition("tx", "seq").setValue("1"));
        cm4.put("tx", "seq", "2");
        cm4.put("data", "x", "d");
        Iterator<Result> results = cw.write(Arrays.asList(cm2, cm3, cm4).iterator());
        int accepted = 0;
        int rejected = 0;
        int total = 0;
        while (results.hasNext()) {
            Status status = results.next().getStatus();
            if (status == Status.ACCEPTED)
                accepted++;
            if (status == Status.REJECTED)
                rejected++;
            total++;
        }
        Assert.assertEquals("Expected one accepted result", 1, accepted);
        Assert.assertEquals("Expected two rejected results", 2, rejected);
        Assert.assertEquals("Expected three total results", 3, total);
    }
}
Also used : Condition(org.apache.accumulo.core.data.Condition) Status(org.apache.accumulo.core.client.ConditionalWriter.Status) Connector(org.apache.accumulo.core.client.Connector) ConditionalWriter(org.apache.accumulo.core.client.ConditionalWriter) ConditionalMutation(org.apache.accumulo.core.data.ConditionalMutation) ConditionalWriterConfig(org.apache.accumulo.core.client.ConditionalWriterConfig) AlphaNumKeyConstraint(org.apache.accumulo.test.constraints.AlphaNumKeyConstraint) Result(org.apache.accumulo.core.client.ConditionalWriter.Result) Test(org.junit.Test)

Example 9 with Result

use of org.apache.accumulo.core.client.ConditionalWriter.Result in project accumulo by apache.

the class ConditionalWriterIT method testError.

@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) {
        }
    }
}
Also used : Condition(org.apache.accumulo.core.data.Condition) Status(org.apache.accumulo.core.client.ConditionalWriter.Status) Connector(org.apache.accumulo.core.client.Connector) ConditionalWriter(org.apache.accumulo.core.client.ConditionalWriter) AccumuloException(org.apache.accumulo.core.client.AccumuloException) ConditionalMutation(org.apache.accumulo.core.data.ConditionalMutation) IteratorSetting(org.apache.accumulo.core.client.IteratorSetting) ConditionalWriterConfig(org.apache.accumulo.core.client.ConditionalWriterConfig) Result(org.apache.accumulo.core.client.ConditionalWriter.Result) Test(org.junit.Test)

Example 10 with Result

use of org.apache.accumulo.core.client.ConditionalWriter.Result in project accumulo by apache.

the class ConditionalWriterIT method testBigBatch.

@Test
public void testBigBatch() throws Exception {
    Connector conn = getConnector();
    String tableName = getUniqueNames(1)[0];
    conn.tableOperations().create(tableName);
    conn.tableOperations().addSplits(tableName, nss("2", "4", "6"));
    sleepUninterruptibly(2, TimeUnit.SECONDS);
    int num = 100;
    ArrayList<byte[]> rows = new ArrayList<>(num);
    ArrayList<ConditionalMutation> cml = new ArrayList<>(num);
    Random r = new Random();
    byte[] e = new byte[0];
    for (int i = 0; i < num; i++) {
        rows.add(FastFormat.toZeroPaddedString(abs(r.nextLong()), 16, 16, e));
    }
    for (int i = 0; i < num; i++) {
        ConditionalMutation cm = new ConditionalMutation(rows.get(i), new Condition("meta", "seq"));
        cm.put("meta", "seq", "1");
        cm.put("meta", "tx", UUID.randomUUID().toString());
        cml.add(cm);
    }
    try (ConditionalWriter cw = conn.createConditionalWriter(tableName, new ConditionalWriterConfig())) {
        Iterator<Result> results = cw.write(cml.iterator());
        int count = 0;
        // TODO check got each row back
        while (results.hasNext()) {
            Result result = results.next();
            Assert.assertEquals(Status.ACCEPTED, result.getStatus());
            count++;
        }
        Assert.assertEquals("Did not receive the expected number of results", num, count);
        ArrayList<ConditionalMutation> cml2 = new ArrayList<>(num);
        for (int i = 0; i < num; i++) {
            ConditionalMutation cm = new ConditionalMutation(rows.get(i), new Condition("meta", "seq").setValue("1"));
            cm.put("meta", "seq", "2");
            cm.put("meta", "tx", UUID.randomUUID().toString());
            cml2.add(cm);
        }
        count = 0;
        results = cw.write(cml2.iterator());
        while (results.hasNext()) {
            Result result = results.next();
            Assert.assertEquals(Status.ACCEPTED, result.getStatus());
            count++;
        }
        Assert.assertEquals("Did not receive the expected number of results", num, count);
    }
}
Also used : Condition(org.apache.accumulo.core.data.Condition) Connector(org.apache.accumulo.core.client.Connector) ArrayList(java.util.ArrayList) AlphaNumKeyConstraint(org.apache.accumulo.test.constraints.AlphaNumKeyConstraint) Result(org.apache.accumulo.core.client.ConditionalWriter.Result) ConditionalWriter(org.apache.accumulo.core.client.ConditionalWriter) ConditionalMutation(org.apache.accumulo.core.data.ConditionalMutation) Random(java.util.Random) ConditionalWriterConfig(org.apache.accumulo.core.client.ConditionalWriterConfig) Test(org.junit.Test)

Aggregations

ConditionalWriter (org.apache.accumulo.core.client.ConditionalWriter)12 Result (org.apache.accumulo.core.client.ConditionalWriter.Result)12 ConditionalMutation (org.apache.accumulo.core.data.ConditionalMutation)12 ConditionalWriterConfig (org.apache.accumulo.core.client.ConditionalWriterConfig)11 Connector (org.apache.accumulo.core.client.Connector)10 Condition (org.apache.accumulo.core.data.Condition)10 Test (org.junit.Test)10 Status (org.apache.accumulo.core.client.ConditionalWriter.Status)6 ArrayList (java.util.ArrayList)5 AccumuloException (org.apache.accumulo.core.client.AccumuloException)5 IsolatedScanner (org.apache.accumulo.core.client.IsolatedScanner)5 Scanner (org.apache.accumulo.core.client.Scanner)5 Value (org.apache.accumulo.core.data.Value)5 Text (org.apache.hadoop.io.Text)5 IteratorSetting (org.apache.accumulo.core.client.IteratorSetting)4 Key (org.apache.accumulo.core.data.Key)4 Authorizations (org.apache.accumulo.core.security.Authorizations)4 AlphaNumKeyConstraint (org.apache.accumulo.test.constraints.AlphaNumKeyConstraint)4 HashMap (java.util.HashMap)3 Random (java.util.Random)3