Hey everyone! Thanks for the great discussion - I've consolidated the discussion points into the following set of requirements:
*Include the async-profiler library with Cassandra *Allow for easy async-profiler library version upgrades independent of Cassandra *Expose a JMX interface to access common commands (start, stop, etc.) *Expose a default-disabled interface to access the 'execute' method for advanced usage *Create a nodetool command that reaches out to this interface *Expose this feature through Sidecar's API Given these requirements, I'll be developing this feature with the following general plan in mind: *Drop-in async-profiler jar & native lib files into top-level cassandra repo *Include these files into the Cassandra build via build.xml *Make an AsyncProfilerService class for loading native lib file and calling out to the async-profiler.jar *Register an MBean for the AsyncProfilerService * *MBean provides 3 methods: start, stop, and raw * *"Simple mode": start/stop will allow a common subset of flags (duration, event, output format, etc.) *raw will expose the execute method for free-use * *default disabled - calls are rejected at runtime unless a JVM flag is included to enable this feature *Add new `nodetool profile` command * *`nodetool profile start --duration 30 --event cpu` *`nodetool profile stop ` *`nodetool profile --raw ...` *Create Sidecar API interface to call out to C* node-specific AsyncProfilerService *Build a unit/integration test suite for this async-profiler integration in C* and Sidecar