I guess the question is: why isn't this working? I'm a bit stuck because there isn't much in the way of documentation on the agent itself, and the exception (seemingly from Clojure) isn't particularly helpful.
- 3-node cluster running DSE 4.0.2 (on SLES 11 SP3, Oracle JRE 1.7.0_45)
- OpsCenter 4.1.2 on Ubuntu 14.04 LTS
- OpsCenter is able to connect to the cluster without problems, but obviously complaining that the agents on the three nodes haven't connected; being SLES the "Fix" link in the OpsCenter dashboard doesn't work (because SLES doesn't use apt or yum)
- Cassandra configuration in /etc/cassandra/ (which, based on strace, datastax-agent is finding, though it looks like it uses JMX after this, rather than reading cassandra.yaml)
Followed the manual agent setup instructions in the DataStax OpsCenter 4.1 documentation (basically just creating address.yaml), and started the datastax-agent on all three nodes. All three nodes get the same exception shortly after starting:
INFO [StompConnection receiver] 2014-05-26 16:06:17,735 Starting up agent collection.
INFO [StompConnection receiver] 2014-05-26 16:06:17,736 New JMX connection (127.0.0.1:7199)
ERROR [StompConnection receiver] 2014-05-26 16:06:17,749 failed calling listener
java.lang.IllegalArgumentException: No matching field found: getParentFile for class clojure.lang.Keyword
at clojure.lang.Reflector.getInstanceField(Reflector.java:271)
at clojure.lang.Reflector.invokeNoArgInstanceMember(Reflector.java:300)
at opsagent.util.cassandra_util$find_base_dse_dir.invoke(cassandra_util.clj:50)
at opsagent.util.cassandra_util$get_base_dse_dir.invoke(cassandra_util.clj:73)
at opsagent.util.cassandra_util$tar_conf_location.invoke(cassandra_util.clj:89)
at opsagent.util.cassandra_util$cassandra_conf_location.invoke(cassandra_util.clj:103)
at opsagent.util.cassandra_util$get_cassandra_conf.invoke(cassandra_util.clj:123)
at opsagent.opsagent$create_thrift_conf_vars.invoke(opsagent.clj:52)
at opsagent.opsagent$post_interface_startup.doInvoke(opsagent.clj:95)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at opsagent.conf$handle_new_conf.invoke(conf.clj:174)
at opsagent.messaging$message_callback$fn__5242.invoke(messaging.clj:31)
at opsagent.messaging.proxy$java.lang.Object$StompConnection$Listener$7f16bc72.onMessage(Unknown Source)
at org.jgroups.client.StompConnection.notifyListeners(StompConnection.java:311)
at org.jgroups.client.StompConnection.run(StompConnection.java:261)
at java.lang.Thread.run(Unknown Source)
I get a similar (but more detailed) exception logged if I try to manually configure the node through OpsCenter (using the Configure action when viewing the node overview dialog):
INFO [qtp1593743543-20] 2014-05-26 16:08:54,436 New JMX connection (127.0.0.1:7199)
ERROR [qtp1593743543-20] 2014-05-26 16:08:54,453 Unhandled route Exception: java.lang.IllegalArgumentException: No matching field found: getParentFile for class clojure.lang.Keyword
Reflector.java:271 clojure.lang.Reflector.getInstanceField
Reflector.java:300 clojure.lang.Reflector.invokeNoArgInstanceMember
cassandra_util.clj:50 opsagent.util.cassandra-util/find-base-dse-dir
cassandra_util.clj:73 opsagent.util.cassandra-util/get-base-dse-dir
cassandra_util.clj:89 opsagent.util.cassandra-util/tar-conf-location
cassandra_util.clj:103 opsagent.util.cassandra-util/cassandra-conf-location
cassandra_util.clj:123 opsagent.util.cassandra-util/get-cassandra-conf
routes.clj:130 opsagent.http.routes/fn
core.clj:94 compojure.core/make-route[fn]
core.clj:40 compojure.core/if-route[fn]
core.clj:25 compojure.core/if-method[fn]
core.clj:107 compojure.core/routing[fn]
core.clj:2443 clojure.core/some
core.clj:107 compojure.core/routing
RestFn.java:139 clojure.lang.RestFn.applyTo
core.clj:619 clojure.core/apply
core.clj:112 compojure.core/routes[fn]
Var.java:415 clojure.lang.Var.invoke
middleware.clj:76 opsagent.http.middleware/wrap-application-error[fn]
middleware.clj:58 opsagent.http.middleware/wrap-content-type[fn]
middleware.clj:95 opsagent.http.middleware/wrap-content-error[fn]
middleware.clj:14 opsagent.http.middleware/wrap-request-logging[fn]
keyword_params.clj:32 ring.middleware.keyword-params/wrap-keyword-params[fn]
params.clj:58 ring.middleware.params/wrap-params[fn]
jetty.clj:18 ring.adapter.jetty/proxy-handler[fn]
(Unknown Source) ring.adapter.jetty.proxy$org.eclipse.jetty.server.handler.AbstractHandler$0.handle
HandlerWrapper.java:111 org.eclipse.jetty.server.handler.HandlerWrapper.handle
Server.java:349 org.eclipse.jetty.server.Server.handle
AbstractHttpConnection.java:452 org.eclipse.jetty.server.AbstractHttpConnection.handleRequest
AbstractHttpConnection.java:894 org.eclipse.jetty.server.AbstractHttpConnection.content
AbstractHttpConnection.java:948 org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content
HttpParser.java:857 org.eclipse.jetty.http.HttpParser.parseNext
HttpParser.java:235 org.eclipse.jetty.http.HttpParser.parseAvailable
AsyncHttpConnection.java:76 org.eclipse.jetty.server.AsyncHttpConnection.handle
SelectChannelEndPoint.java:609 org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle
SelectChannelEndPoint.java:45 org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run
QueuedThreadPool.java:599 org.eclipse.jetty.util.thread.QueuedThreadPool.runJob
QueuedThreadPool.java:534 org.eclipse.jetty.util.thread.QueuedThreadPool$3.run
(Unknown Source) java.lang.Thread.run
There is a bug in Datastax OpsCenter 4.x that might cause problems during agent startup if DSE is installed, but
/etc/cassandra
is used as a config directory. It should be fixed in the upcoming version of the OpsCenter.As a workaround, try creating a
/etc/dse
directory and restarting the agent.