Search in sources :

Example 6 with Cmp

use of io.etcd.jetcd.op.Cmp in project jetcd by coreos.

the class KVNamespaceTest method testNestedTxn.

@Test
public void testNestedTxn() throws Exception {
    // kvClient without namespace used as the judge for the final result
    kvClient = TestUtil.client(cluster).build().getKVClient();
    // kvClient with one namespace used to test operations with namespace
    ByteSequence namespace = ByteSequence.from(TestUtil.randomByteSequence().concat(ByteSequence.NAMESPACE_DELIMITER).getBytes());
    kvClientWithNamespace = TestUtil.client(cluster).namespace(namespace).build().getKVClient();
    ByteSequence cmpKey1 = getNonexistentKey();
    putKVWithAssertion(kvClient, cmpKey1, TestUtil.randomByteSequence(), null);
    ByteSequence cmpKey2 = getNonexistentKey();
    putKVWithAssertion(kvClientWithNamespace, cmpKey2, TestUtil.randomByteSequence(), null);
    ByteSequence key1 = getNonexistentKey();
    ByteSequence value1 = TestUtil.randomByteSequence();
    putKVWithAssertion(kvClientWithNamespace, key1, value1, null);
    ByteSequence key2 = getNonexistentKey();
    ByteSequence value2 = TestUtil.randomByteSequence();
    putKVWithAssertion(kvClientWithNamespace, key2, value2, null);
    {
        Txn txn = kvClientWithNamespace.txn();
        ByteSequence nextValue1 = TestUtil.randomByteSequence();
        CompletableFuture<TxnResponse> txnFuture = txn.If(new Cmp(cmpKey1, Cmp.Op.EQUAL, CmpTarget.version(0))).Then(Op.txn(new Cmp[] { new Cmp(cmpKey2, Cmp.Op.GREATER, CmpTarget.version(0)) }, new Op[] { Op.put(key1, nextValue1, PutOption.newBuilder().withPrevKV().build()) }, new Op[] { Op.put(key2, TestUtil.randomByteSequence(), PutOption.newBuilder().withPrevKV().build()) })).Else(Op.txn(new Cmp[] { new Cmp(cmpKey2, Cmp.Op.GREATER, CmpTarget.version(0)) }, new Op[] { Op.put(key2, TestUtil.randomByteSequence(), PutOption.newBuilder().withPrevKV().build()) }, new Op[] { Op.put(key1, TestUtil.randomByteSequence(), PutOption.newBuilder().withPrevKV().build()) })).commit();
        TxnResponse response = txnFuture.get();
        assertThat(response.getTxnResponses().size()).isEqualTo(1);
        assertThat(response.getTxnResponses().get(0).getPutResponses().size()).isEqualTo(1);
        assertThat(response.getTxnResponses().get(0).getPutResponses().get(0).hasPrevKv()).isTrue();
        assertThat(response.getTxnResponses().get(0).getPutResponses().get(0).getPrevKv().getKey()).isEqualTo(key1);
        assertThat(response.getTxnResponses().get(0).getPutResponses().get(0).getPrevKv().getValue()).isEqualTo(value1);
        value1 = nextValue1;
        assertExistentKey(kvClient, ByteSequence.from(namespace.concat(key1).getBytes()), value1);
    }
}
Also used : Op(io.etcd.jetcd.op.Op) CompletableFuture(java.util.concurrent.CompletableFuture) Cmp(io.etcd.jetcd.op.Cmp) Txn(io.etcd.jetcd.Txn) TxnResponse(io.etcd.jetcd.kv.TxnResponse) ByteSequence(io.etcd.jetcd.ByteSequence) Test(org.junit.jupiter.api.Test) ParameterizedTest(org.junit.jupiter.params.ParameterizedTest)

Aggregations

ByteSequence (io.etcd.jetcd.ByteSequence)6 TxnResponse (io.etcd.jetcd.kv.TxnResponse)6 Cmp (io.etcd.jetcd.op.Cmp)6 Test (org.junit.jupiter.api.Test)6 Txn (io.etcd.jetcd.Txn)5 GetResponse (io.etcd.jetcd.kv.GetResponse)4 Op (io.etcd.jetcd.op.Op)3 CompletableFuture (java.util.concurrent.CompletableFuture)2 ParameterizedTest (org.junit.jupiter.params.ParameterizedTest)2 TestUtil.randomString (io.etcd.jetcd.impl.TestUtil.randomString)1 DeleteResponse (io.etcd.jetcd.kv.DeleteResponse)1