Skip to content
This repository has been archived by the owner on Jul 11, 2022. It is now read-only.

Commit

Permalink
[BZ 1120418] initial support for bootstrap step
Browse files Browse the repository at this point in the history
  • Loading branch information
John Sanda committed Aug 11, 2014
1 parent 1d9a98e commit 4f801c5
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,23 @@

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.rhq.core.domain.cloud.StorageClusterSettings;
import org.rhq.core.domain.cloud.StorageNode;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.storage.MaintenanceStep;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.storage.StorageClusterSettingsManagerLocal;
import org.rhq.enterprise.server.storage.maintenance.StorageMaintenanceJob;
import org.rhq.enterprise.server.storage.maintenance.step.AnnounceStorageNode;
import org.rhq.enterprise.server.storage.maintenance.step.BootstrapNode;

/**
* @author John Sanda
Expand All @@ -25,6 +30,12 @@ public class DeployCalculator implements StepCalculator {
@PersistenceContext(unitName = RHQConstants.PERSISTENCE_UNIT_NAME)
private EntityManager entityManager;

@EJB
private StorageClusterSettingsManagerLocal clusterSesttingsManager;

@EJB
private SubjectManagerLocal subjectManager;

@Override
public StorageMaintenanceJob calculateSteps(StorageMaintenanceJob job, List<StorageNode> cluster) {
int stepNumber = 1;
Expand All @@ -44,10 +55,35 @@ public StorageMaintenanceJob calculateSteps(StorageMaintenanceJob job, List<Stor
.addSimple("address", newNodeAddress)
.closeMap()
.build());
entityManager.persist(step.getConfiguration());
// entityManager.persist(step.getConfiguration());
entityManager.persist(step);
job.addStep(step);
}

StorageClusterSettings clusterSettings = clusterSesttingsManager.getClusterSettings(
subjectManager.getOverlord());

MaintenanceStep bootstrapStep = new MaintenanceStep()
.setJobNumber(job.getJobNumber())
.setJobType(job.getJobType())
.setName(BootstrapNode.class.getName())
.setStepNumber(stepNumber++)
.setDescription("Bootstrap new node " + newNodeAddress)
.setConfiguration(new Configuration.Builder()
.addSimple("targetAddress", newNodeAddress)
.openMap("parameters")
.addSimple("cqlPort", clusterSettings.getCqlPort())
.addSimple("gossipPort", clusterSettings.getGossipPort())
.openList("addresses", "addresses")
.addSimple(newNodeAddress)
.addSimples(job.getClusterSnapshot().toArray(new String[job.getClusterSnapshot().size()]))
.closeList()
.closeMap()
.build());

entityManager.persist(bootstrapStep);
job.addStep(bootstrapStep);

return job;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@
import org.rhq.core.domain.criteria.ResourceOperationHistoryCriteria;
import org.rhq.core.domain.operation.OperationHistory;
import org.rhq.core.domain.operation.OperationRequestStatus;
import org.rhq.core.domain.operation.ResourceOperationHistory;
import org.rhq.core.domain.operation.bean.ResourceOperationSchedule;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.cloud.StorageNodeManagerLocal;
import org.rhq.enterprise.server.operation.OperationManagerLocal;
Expand Down Expand Up @@ -53,14 +55,20 @@ private OperationHistory waitForOperationToComplete(ResourceOperationSchedule sc
criteria.addFilterJobId(schedule.getJobId());

Thread.sleep(5000);
OperationHistory operationHistory = operationManager.getOperationHistoryByJobId(
subjectManager.getOverlord(), schedule.getJobId().toString());
while (operationHistory.getStatus() == OperationRequestStatus.INPROGRESS) {
PageList<ResourceOperationHistory> results = operationManager.findResourceOperationHistoriesByCriteria(
subjectManager.getOverlord(), criteria);
if (results.isEmpty()) {
throw new RuntimeException("Failed to find resource operation history for " + schedule);
}
OperationHistory history = results.get(0);


while (history.getStatus() == OperationRequestStatus.INPROGRESS) {
Thread.sleep(5000);
operationHistory = operationManager.getOperationHistoryByJobId(subjectManager.getOverlord(),
schedule.getJobId().toString());
history = operationManager.getOperationHistoryByHistoryId(subjectManager.getOverlord(),
history.getId());
}
return operationHistory;
return history;
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package org.rhq.enterprise.server.storage.maintenance.step;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.storage.MaintenanceStep;

/**
* @author John Sanda
*/
public class BootstrapNode extends BaseStepRunner {

private static final Log log = LogFactory.getLog(BootstrapNode.class);

@Override
public void execute(MaintenanceStep step) {
log.info("Bootstrapping new node");

Configuration configuration = step.getConfiguration();
String targetAddress = configuration.getSimpleValue("targetAddress");
PropertyMap params = (PropertyMap) configuration.get("parameters");

Configuration operationParams = new Configuration();
operationParams.put(params.get("cqlPort"));
operationParams.put(params.get("gossipPort"));
operationParams.put(params.get("addresses"));

executeOperation(targetAddress, "prepareForBootstrap", operationParams);
}
}

0 comments on commit 4f801c5

Please sign in to comment.