[HELIX-673] Fix inconsistent behavior in ZKCacheBaseDataAccessor
Project: http://git-wip-us.apache.org/repos/asf/helix/repo Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/751f023e Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/751f023e Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/751f023e Branch: refs/heads/master Commit: 751f023e12c9f27c7e164c6ab1625b31e392ce5c Parents: 9d590f4 Author: Junkai Xue <[email protected]> Authored: Thu Jan 25 18:12:11 2018 -0800 Committer: Junkai Xue <[email protected]> Committed: Mon Jan 29 18:05:04 2018 -0800 ---------------------------------------------------------------------- .../manager/zk/ZkCacheBaseDataAccessor.java | 24 +++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/helix/blob/751f023e/helix-core/src/main/java/org/apache/helix/manager/zk/ZkCacheBaseDataAccessor.java ---------------------------------------------------------------------- diff --git a/helix-core/src/main/java/org/apache/helix/manager/zk/ZkCacheBaseDataAccessor.java b/helix-core/src/main/java/org/apache/helix/manager/zk/ZkCacheBaseDataAccessor.java index 18abe91..3a7553f 100644 --- a/helix-core/src/main/java/org/apache/helix/manager/zk/ZkCacheBaseDataAccessor.java +++ b/helix-core/src/main/java/org/apache/helix/manager/zk/ZkCacheBaseDataAccessor.java @@ -32,6 +32,7 @@ import java.util.concurrent.locks.ReentrantLock; import org.I0Itec.zkclient.DataUpdater; import org.I0Itec.zkclient.IZkChildListener; import org.I0Itec.zkclient.IZkDataListener; +import org.I0Itec.zkclient.exception.ZkBadVersionException; import org.I0Itec.zkclient.exception.ZkNoNodeException; import org.I0Itec.zkclient.serialize.ZkSerializer; import org.apache.helix.AccessOption; @@ -257,25 +258,26 @@ public class ZkCacheBaseDataAccessor<T> implements HelixPropertyStore<T> { String serverPath = prependChroot(clientPath); Cache<T> cache = getCache(serverPath); - if (cache != null) { - try { + boolean success = false; + try { + if (cache != null) { cache.lockWrite(); ZkBaseDataAccessor<T>.AccessResult result = _baseAccessor.doSet(serverPath, data, expectVersion, options); - boolean success = result._retCode == RetCode.OK; + success = result._retCode == RetCode.OK; updateCache(cache, result._pathCreated, success, serverPath, data, result._stat); - - return success; - } catch (Exception e) { - return false; - } finally { + } else { + // no cache + success = _baseAccessor.set(serverPath, data, expectVersion, options); + } + } catch (Exception e) { + } finally { + if (cache != null) { cache.unlockWrite(); } } - - // no cache - return _baseAccessor.set(serverPath, data, expectVersion, options); + return success; } @Override
