modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageNodeOperationsHandlerBean.java | 36 +++++++--- 1 file changed, 26 insertions(+), 10 deletions(-)
New commits: commit b30d3fe1ff1b1a6caf86795618892d77c36835f9 Author: John Sanda jsanda@redhat.com Date: Tue Sep 10 15:34:57 2013 -0400
[BZ 1004050] add more error handling for advanced storage node deployments
One of the errors that can be made when deploying multiple storage nodes prior to installing the server is failing to include all of the nodes in the rhq.storage.nodes property in rhq-server.properties. This could have resulted in an IndexOutOfBoundsException that was propagated up the call stack, preventing resources (from the current inventory report) from being imported into inventory.
Exception handling has been added along with detailed logging to deal with this scenario.
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageNodeOperationsHandlerBean.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageNodeOperationsHandlerBean.java index 44c0e9d..66ee2fc 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageNodeOperationsHandlerBean.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/storage/StorageNodeOperationsHandlerBean.java @@ -86,18 +86,34 @@ public class StorageNodeOperationsHandlerBean implements StorageNodeOperationsHa if (log.isInfoEnabled()) { log.info("Announcing " + storageNode + " to storage node cluster."); } - List<StorageNode> clusterNodes = entityManager.createNamedQuery(StorageNode.QUERY_FIND_ALL_BY_MODE, - StorageNode.class).setParameter("operationMode", StorageNode.OperationMode.NORMAL).getResultList(); - List<StorageNode> allNodes = new ArrayList<StorageNode>(clusterNodes); - allNodes.add(storageNode); + try { + storageNode.setOperationMode(StorageNode.OperationMode.ANNOUNCE); + List<StorageNode> clusterNodes = entityManager.createNamedQuery(StorageNode.QUERY_FIND_ALL_BY_MODE, + StorageNode.class).setParameter("operationMode", StorageNode.OperationMode.NORMAL).getResultList(); + List<StorageNode> allNodes = new ArrayList<StorageNode>(clusterNodes); + allNodes.add(storageNode); + + for (StorageNode clusterNode : clusterNodes) { + clusterNode.setMaintenancePending(true); + }
- for (StorageNode clusterNode : clusterNodes) { - clusterNode.setMaintenancePending(true); + announceStorageNode(subject, storageNode, clusterNodes.get(0), createPropertyListOfAddresses("addresses", + allNodes)); + } catch (IndexOutOfBoundsException e) { + String msg = "Aborting storage node deployment due to unexpected error while announcing storage node at " + + storageNode.getAddress(); + log.error(msg, e); + log.error("If this error occurred with a storage node that was deployed prior to installing the server, " + + "then this may indicate that the rhq.storage.nodes property in rhq-server.properties was not set " + + "correctly. All nodes deployed prior to server installation should be listed in the " + + "rhq.storage.nodes property. Please review the deployment documentation for additional details."); + logError(StorageNode.OperationMode.ANNOUNCE, msg, e); + } catch (Exception e) { + String msg = "Aborting storage node deployment due to unexpected error while announcing storage node at " + + storageNode.getAddress(); + log.error(msg, e); + logError(StorageNode.OperationMode.ANNOUNCE, msg, e); } - - announceStorageNode(subject, storageNode, clusterNodes.get(0), createPropertyListOfAddresses("addresses", - allNodes)); - }
private void announceStorageNode(Subject subject, StorageNode newStorageNode, StorageNode clusterNode,
rhq-commits@lists.fedorahosted.org