NIFI-259: Distinguish between unable to communicate with ZK and 'bad version' 
when performing 'replace' method of ZooKeeperStateProvider

Signed-off-by: Aldrin Piri <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/35d2b921
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/35d2b921
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/35d2b921

Branch: refs/heads/master
Commit: 35d2b921ea90eb42ff09b1d77bb70fef827eb22f
Parents: a931e72
Author: Mark Payne <[email protected]>
Authored: Mon Feb 1 16:12:01 2016 -0500
Committer: Aldrin Piri <[email protected]>
Committed: Mon Feb 1 16:29:12 2016 -0500

----------------------------------------------------------------------
 .../state/providers/zookeeper/ZooKeeperStateProvider.java | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/35d2b921/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/state/providers/zookeeper/ZooKeeperStateProvider.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/state/providers/zookeeper/ZooKeeperStateProvider.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/state/providers/zookeeper/ZooKeeperStateProvider.java
index 239b68a..27727a7 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/state/providers/zookeeper/ZooKeeperStateProvider.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-core/src/main/java/org/apache/nifi/controller/state/providers/zookeeper/ZooKeeperStateProvider.java
@@ -439,7 +439,15 @@ public class ZooKeeperStateProvider extends 
AbstractStateProvider {
             setState(newValue, (int) oldValue.getVersion(), componentId);
             return true;
         } catch (final IOException ioe) {
-            return false;
+            final Throwable cause = ioe.getCause();
+            if (cause != null && cause instanceof KeeperException) {
+                final KeeperException ke = (KeeperException) cause;
+                if (Code.BADVERSION == ke.code()) {
+                    return false;
+                }
+            }
+
+            throw ioe;
         }
     }
 

Reply via email to