diff --git a/storm-core/src/clj/org/apache/storm/pacemaker/pacemaker_state_factory.clj b/storm-core/src/clj/org/apache/storm/pacemaker/pacemaker_state_factory.clj index 3889dcfb6cf..92fa4cee7f3 100644 --- a/storm-core/src/clj/org/apache/storm/pacemaker/pacemaker_state_factory.clj +++ b/storm-core/src/clj/org/apache/storm/pacemaker/pacemaker_state_factory.clj @@ -106,16 +106,15 @@ (defn get-pacemaker-write-client [conf servers client-pool] ;; Client should be created in case of an exception or first write call ;; Shutdown happens in the retry loop - (try - (.waitUntilReady - (let [client (get @client-pool (first @servers))] - (if (nil? client) - (do - (swap! client-pool merge {(first @servers) (PacemakerClient. conf (first @servers))}) - (get @client-pool (first @servers))) - client))) - (catch Exception e - (throw e)))) + (let [client (get @client-pool (first @servers))] + (try + (.waitUntilReady + (let [] (if (nil? client) + (do (swap! client-pool merge {(first @servers) (PacemakerClient. conf (first @servers))}) + (get @client-pool (first @servers))) + client))) + (catch Exception e (throw e))) + (get @client-pool (first @servers)))) ;; So we can mock the client for testing (defn makeClientPool [conf client-pool servers] diff --git a/storm-core/src/jvm/org/apache/storm/pacemaker/PacemakerClient.java b/storm-core/src/jvm/org/apache/storm/pacemaker/PacemakerClient.java index eefc49395f8..5d8d13ff695 100644 --- a/storm-core/src/jvm/org/apache/storm/pacemaker/PacemakerClient.java +++ b/storm-core/src/jvm/org/apache/storm/pacemaker/PacemakerClient.java @@ -201,7 +201,7 @@ public HBMessage send(HBMessage m) throws PacemakerConnectionException { } } - private void waitUntilReady() throws PacemakerConnectionException { + public void waitUntilReady() throws PacemakerConnectionException { // Wait for 'ready' (channel connected and maybe authentication) if(!ready.get() || channelRef.get() == null) { synchronized(this) {