Hi HBase Devs, Currently, Chaos Monkey does all the destructive actions by using passwordless-ssh with the help of HbaseClusterManager Class. This class uses RemoteShell and CommandProvider classes to perform these actions.
In our test framework,we are trying to bypass passwordless-ssh to perform destructive actions of Chaos Monkey. For these, we want to extend HBaseClusterManager Class (or ClusterManager interface) so we can create task in ZooKeeper, which will be executed by our framework as local action for intended hosts. Here ClusterManager Interface and its implementation HBaseClusterManager class are InterfaceAudience.Private, so they are not visible outside package level access. Also any implementation of ClusterManager needs to be merged with hbase-it package. CommandProvider Class, which creates commands for ssh based actions, has access type default in HBaseClusterManager class, because of that we can not re-use CommandProvider class. To have our own implementation outside hbase-testing-util, we wanted to make this classes InterfaceAudience.Public. As discussed on HBASE-23640 <https://issues.apache.org/jira/browse/HBASE-23640>, it would be an anti-pattern to expose these API directly. Currently We have thought of below improvements to do in hbase-it package to achieve our goal :- 1. Move ClusterManager interface and its implementation out of hbase-it package and create a separate artifact (Exposing them directly won't be a right approach) 2. Make ClusterManager interface as well as it's implementation public so it can be extended with minimum effort. 3. Separate out CommandProvider Class Currently we have filled two JIRAs :- HBASE-23639 <https://issues.apache.org/jira/browse/HBASE-23639> HBASE-23640 <https://issues.apache.org/jira/browse/HBASE-23640> It would be helpful to get more suggestions for theses changes and how to implement them like weather we need to move this into separate hbase-package. -- Thanks, Lokesh