@Override
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void handleAnnounce(ResourceOperationHistory resourceOperationHistory) {
StorageNode storageNode = findStorageNode(resourceOperationHistory.getResource());
Configuration parameters = resourceOperationHistory.getParameters();
PropertyList addresses = parameters.getList("addresses");
StorageNode newStorageNode;
switch (resourceOperationHistory.getStatus()) {
case INPROGRESS:
// nothing to do here
return;
case CANCELED:
newStorageNode = findStorageNodeByAddress(getAddress(addresses));
deploymentOperationCanceled(storageNode, resourceOperationHistory, newStorageNode);
case FAILURE:
newStorageNode = findStorageNodeByAddress(getAddress(addresses));
deploymentOperationFailed(storageNode, resourceOperationHistory, newStorageNode);
return;
default: // SUCCESS
storageNode.setMaintenancePending(false);
StorageNode nextNode = takeFromMaintenanceQueue();
Subject subject = getSubject(resourceOperationHistory);
newStorageNode = findStorageNodeByAddress(getAddress(addresses));
if (nextNode == null) {
log.info("Successfully announced new storage node to storage cluster");
newStorageNode = storageNodeOperationsHandler.setMode(newStorageNode,
StorageNode.OperationMode.BOOTSTRAP);
storageNodeOperationsHandler.bootstrapStorageNode(subject, newStorageNode);
} else {
announceStorageNode(subject, newStorageNode, nextNode, addresses.deepCopy(false));
}
}
}