Repository: curator Updated Branches: refs/heads/master b04c8b5af -> 2f751df40
CURATOR-93 - Added compress() option for transactions. Project: http://git-wip-us.apache.org/repos/asf/curator/repo Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/30e66cfa Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/30e66cfa Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/30e66cfa Branch: refs/heads/master Commit: 30e66cfa3e8e7d09f553adbaa699edbd05993a4e Parents: 6e98562 Author: Cameron McKenzie <came...@unico.com.au> Authored: Wed Jun 18 11:28:23 2014 +1000 Committer: Cameron McKenzie <came...@unico.com.au> Committed: Wed Jun 18 11:28:23 2014 +1000 ---------------------------------------------------------------------- .../transaction/TransactionCreateBuilder.java | 5 +- .../framework/imps/CreateBuilderImpl.java | 18 +++++- .../imps/TestCompressionInTransaction.java | 61 ++++++++++++++++++++ 3 files changed, 80 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/30e66cfa/curator-framework/src/main/java/org/apache/curator/framework/api/transaction/TransactionCreateBuilder.java ---------------------------------------------------------------------- diff --git a/curator-framework/src/main/java/org/apache/curator/framework/api/transaction/TransactionCreateBuilder.java b/curator-framework/src/main/java/org/apache/curator/framework/api/transaction/TransactionCreateBuilder.java index f269daf..51f4cb7 100644 --- a/curator-framework/src/main/java/org/apache/curator/framework/api/transaction/TransactionCreateBuilder.java +++ b/curator-framework/src/main/java/org/apache/curator/framework/api/transaction/TransactionCreateBuilder.java @@ -19,12 +19,15 @@ package org.apache.curator.framework.api.transaction; import org.apache.curator.framework.api.ACLPathAndBytesable; +import org.apache.curator.framework.api.Compressible; +import org.apache.curator.framework.api.CreateBackgroundModeACLable; import org.apache.curator.framework.api.CreateModable; import org.apache.curator.framework.api.PathAndBytesable; public interface TransactionCreateBuilder extends PathAndBytesable<CuratorTransactionBridge>, CreateModable<ACLPathAndBytesable<CuratorTransactionBridge>>, - ACLPathAndBytesable<CuratorTransactionBridge> + ACLPathAndBytesable<CuratorTransactionBridge>, + Compressible<ACLPathAndBytesable<CuratorTransactionBridge>> { } http://git-wip-us.apache.org/repos/asf/curator/blob/30e66cfa/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java ---------------------------------------------------------------------- diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java index fa95b2c..b5d5f97 100644 --- a/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java +++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/CreateBuilderImpl.java @@ -87,16 +87,28 @@ class CreateBuilderImpl implements CreateBuilder, BackgroundOperation<PathAndByt CreateBuilderImpl.this.withMode(mode); return this; } - + + @Override + public ACLPathAndBytesable<CuratorTransactionBridge> compressed() + { + CreateBuilderImpl.this.compressed(); + return this; + } + @Override public CuratorTransactionBridge forPath(String path) throws Exception { return forPath(path, client.getDefaultData()); - } + } @Override public CuratorTransactionBridge forPath(String path, byte[] data) throws Exception - { + { + if ( compress ) + { + data = client.getCompressionProvider().compress(path, data); + } + String fixedPath = client.fixForNamespace(path); transaction.add(Op.create(fixedPath, data, acling.getAclList(path), createMode), OperationType.CREATE, path); return curatorTransaction; http://git-wip-us.apache.org/repos/asf/curator/blob/30e66cfa/curator-framework/src/test/java/org/apache/curator/framework/imps/TestCompressionInTransaction.java ---------------------------------------------------------------------- diff --git a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestCompressionInTransaction.java b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestCompressionInTransaction.java new file mode 100644 index 0000000..f5adaff --- /dev/null +++ b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestCompressionInTransaction.java @@ -0,0 +1,61 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.framework.imps; + +import org.apache.curator.test.BaseClassForTests; +import org.apache.curator.utils.CloseableUtils; +import org.apache.curator.framework.CuratorFramework; +import org.apache.curator.framework.CuratorFrameworkFactory; +import org.apache.curator.framework.api.CompressionProvider; +import org.apache.curator.retry.RetryOneTime; +import org.testng.Assert; +import org.testng.annotations.Test; +import java.util.concurrent.atomic.AtomicInteger; + +public class TestCompressionInTransaction extends BaseClassForTests +{ + @Test + public void testSimple() throws Exception + { + final String path1 = "/a"; + final String path2 = "/a/b"; + + final byte[] data1 = "here's a string".getBytes(); + final byte[] data2 = "here's another string".getBytes(); + + CuratorFramework client = CuratorFrameworkFactory.newClient(server.getConnectString(), new RetryOneTime(1)); + try + { + client.start(); + + client.inTransaction().create().compressed().forPath(path1, data1).and(). + create().compressed().forPath(path2, data2).and().commit(); + + Assert.assertNotEquals(data1, client.getData().forPath(path1)); + Assert.assertEquals(data1.length, client.getData().decompressed().forPath(path1).length); + + Assert.assertNotEquals(data2, client.getData().forPath(path2)); + Assert.assertEquals(data2.length, client.getData().decompressed().forPath(path2).length); + } + finally + { + CloseableUtils.closeQuietly(client); + } + } +}