Remove the fake getJmxPort from the storage node entity. The jmx port is no longer needed for the storage cluster communication.
Follow up with removal of StorageNode.getJmxPort().
BZ 988735 - discovery callbacks that allow extension plugins to alter discovered details from some resource type
BZ 980076 - also make the check if storage is running for the status command
 [BZ 997665] adding queue-length for bounded and blocking bounded thread pool support.
 [BZ 998058] Adding blocking-bounded-queue-thread-pool and blocking-queueless-thread-pool to list of supported templates.
initialze storage cluster settings at install time

The storage installer now also adds the gossip port to rhq-server.properties.
The server installer now initializes the cluster settings, namely the cql and
gossip ports. This was previously done in server code when the first storage
node is imported into inventory. This simplifies things. We are able to remove
the conditional logic for initializing the cluster settings. And we no longer
need to store the cql and gossip ports in the storage node's plugin
configuration.
more fixes/improvements for storage node (un)deployment

There was a deadlock issue that could manifest itself in the
performAddNodeMaintenanceIfNecessary and in the
performRemoveNodeMaintenanceIfNecessary methods when an occurred. Both methods
had nested transactions in which both the outer and inner transactions tried to
update the same storage node entity. The transactions aren no longer nested.

This commit also adds support for continuing the (un)deployment in situations
where the event notifications for the node joining/leaving the cluster are
missed.
upgrade to C* 1.2.9
fixing server itest failures

need to set the cql and gossip ports for itests. In dbsetup/dbupgrade they are
set to empty strings because the server installer sets them, but we do not run
the installer for itests.
[BZ 1002174] - uninventory storage node for stopped agent destabilizes system and leads to Administration-> Topology -> Storage Nodes page dysfunction - Adding yet another confirmation box when uninventorying the platform or storage node.
[BZ 855674] - Get rid of the dreaded "PageList was passed an empty collection but 'totalSize' was X" exception.

The main part of the fix is just the realization that the "error"
condition for which the exception was thrown is actually no error but can
be triggered by the mere fact that we use READ_COMMITTED isolation level.
The fact that a user can go past the last page of a result is actually also
not an error and can be triggered by for example a massive change in the
available data between the user asking for first and second page.

I think it is better to stop treating all such conditions as errors and
instead provide the user with means of detecting such states.

For that a new method on pagelist was introduced:
PageList.isConsistent(), which calls out to PageControl.isConsistentWith()
that check if the data and total size of the page list are consistent with
the page control.

This in turn is used by the CriteriaQueryRunner to re-attempt the queries
if it finds the inconsistency (which is most possibly caused by the phantom
read due to our transaction isolation level).
Add a few more translations.
Add sonarqube plugin to the build
BZ 1001499 Provide a link to resource/group/type of the definition
BZ 973101 - Check passed MeasurementDefinitionId for validity
Add support for proxies for HTTPService resources
More descriptive log warning when no storage node is found in the database (StorageNodeManagerBean.getLoad() was failing with NPE). This situation somehow happened when the nodes were installed prior to the RHQ server itself.
[BZ 855674] - Refactored the phantom-read detection out of CriteriaQueryRunner

This was to make it testable but more importantly reusable by ordinary SLSB
methods (that don't use criteria queries).

Also added unit tests for the phantom-read detection (now placed in
QueryUtility in server jar) and for PageControl in domain jar.
Show metric sparklines even when there is only a single point of data. The sparkline graphs only render a plot if there is at least two points of data. When a new system first comes up and only one point of data is available no sparkline is shown. By adding an additional "0" point to the single point of data the sparkline will now render.