There are 3 issues while deleting hosts.
1. Created a cluster with multiple hosts, then stopped all of the services on 1 host (preferably one with only clients so it has nothing to stop). Then deleted the host using the API.
E.g., curl -u admin:admin -H "X-Requested-By: ambari" -X DELETE http://c6401.ambari.apache.org:8080/api/v1/hosts/c6404.ambari.apache.org
This led to Null Pointer Exceptions in ambari-server because the UI is still generating requests to get the ServiceComponentHost response, which isn't locking code, and makes request to get the HostState (this record has been deleted), so a NPE is thrown. This needs to be more robust; adding locks around here may have other repercussions, so I decided to just check for != null.
2. If a Host with DataNode becomes decommissioned, it will have a record in the requestoperationlevel table, whose records are not currently being deleted when a Host is deleted.
3. There are differences between deleting a Host using the /hosts/name and /clusters/name/hosts/name API. In the former, since no cluster is provided, it blindly deletes the host without checking if it has any masters/slaves on it, which need to be stopped and deleted first.