Search code examples
apache-stormpacemaker

storm1.1.0: No matching field found: waitUntilReady for class org.apache.storm.pacemaker.PacemakerClient


I got an error with pacemaker on storm’s worker when using storm 1.1.0 to run my topology。 ->java.lang.IllegalArgumentException: No matching field found: waitUntilReady for class org.apache.storm.pacemaker.PacemakerClient

It seems when using reflection,the invoker can’t find method waitUntilReady? But I find this method in the source code of PacemakerClient:private void waitUntilReady() throws PacemakerConnectionException { } When I use storm 1.0.1 with the same topology code and the same config,the communication from worker to pacemaker was running well, without this exception。

I packaged the topology using jdk1.8 and the storm1.1.0 was started using jdk1.8 too!

I have the config of pacemaker with strom 1.1.0 like this:


    pacemaker.servers: ["exp104.didatick.com"]
    pacemaker.port: 6699
    pacemaker.max.threads: 10
    pacemaker.childopts: "-Xmx512m"
    pacemaker.auth.method: "NONE"

    storm.cluster.state.store: "org.apache.storm.pacemaker.pacemaker_state_factory"

The Full Stacktrace:

2017-04-16 17:08:50.896 o.a.s.d.worker main [INFO] Worker 855fbf1e-d23d-400f-b181-1a0934720bbf for storm TRIDENT-TEST-4-1492333594 on 47d8b370-85c2-41d1-b4e6-e63fbf832bff:6700 has finished loading
2017-04-16 17:08:50.998 o.a.s.p.pacemaker-state-factory executor-heartbeat-timer [ERROR] Failed to set_worker_hb. Will make [10] more attempts.
java.lang.IllegalArgumentException: No matching field found: waitUntilReady for class org.apache.storm.pacemaker.PacemakerClient
         at clojure.lang.Reflector.getInstanceField(Reflector.java:271) ~[clojure-1.7.0.jar:?]
         at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:315) ~[clojure-1.7.0.jar:?]
         at org.apache.storm.pacemaker.pacemaker_state_factory$get_pacemaker_write_client.invoke(pacemaker_state_factory.clj:110) ~[storm-core-1.1.0.jar:1.1.0]
         at org.apache.storm.pacemaker.pacemaker_state_factory$_mkState$reify__12511$fn__12512.invoke(pacemaker_state_factory.clj:187) ~[storm-core-1.1.0.jar:1.1.0]
         at org.apache.storm.pacemaker.pacemaker_state_factory$pacemaker_retry_on_exception$fn__12506.invoke(pacemaker_state_factory.clj:139) ~[storm-core-1.1.0.jar:1.1.0]
         at org.apache.storm.pacemaker.pacemaker_state_factory$pacemaker_retry_on_exception.invoke(pacemaker_state_factory.clj:139) [storm-core-1.1.0.jar:1.1.0]
         at org.apache.storm.pacemaker.pacemaker_state_factory$_mkState$reify__12511.set_worker_hb(pacemaker_state_factory.clj:183) [storm-core-1.1.0.jar:1.1.0]
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
         at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
         at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) [clojure-1.7.0.jar:?]
         at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28) [clojure-1.7.0.jar:?]
         at org.apache.storm.cluster$mk_storm_cluster_state$reify__4395.worker_heartbeat_BANG_(cluster.clj:468) [storm-core-1.1.0.jar:1.1.0]
         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_92]
         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_92]
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_92]
         at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_92]
         at clojure.lang.Reflector.invokeMatchingMethod(Reflector.java:93) [clojure-1.7.0.jar:?]
         at clojure.lang.Reflector.invokeInstanceMethod(Reflector.java:28) [clojure-1.7.0.jar:?]
         at org.apache.storm.daemon.worker$do_executor_heartbeats.doInvoke(worker.clj:76) [storm-core-1.1.0.jar:1.1.0]
         at clojure.lang.RestFn.invoke(RestFn.java:439) [clojure-1.7.0.jar:?]
         at org.apache.storm.daemon.worker$fn__5542$exec_fn__1364__auto__$reify__5544$fn__5547.invoke(worker.clj:624) [storm-core-1.1.0.jar:1.1.0]
         at org.apache.storm.timer$schedule_recurring$this__1737.invoke(timer.clj:105) [storm-core-1.1.0.jar:1.1.0]
         at org.apache.storm.timer$mk_timer$fn__1720$fn__1721.invoke(timer.clj:50) [storm-core-1.1.0.jar:1.1.0]
         at org.apache.storm.timer$mk_timer$fn__1720.invoke(timer.clj:42) [storm-core-1.1.0.jar:1.1.0]
         at clojure.lang.AFn.run(AFn.java:22) [clojure-1.7.0.jar:?]
         at java.lang.Thread.run(Thread.java:745) [?:1.8.0_92]

Solution

  • I've seen the same issue.

    The Pacemaker functionality seems to be broken in 1.1.0: STORM-2500.

    Looking at the source code, I believe it worked fine up to 1.0.3, but I haven't tested it. I guess you'd have to get in contact with one of the project's maintainers in order to see if they have any intention to fix this, or not.

    It's certainly possible they plan to let this be resolved only in 2.0.0 when some of the Pacemaker code is rewritten in java anyway.