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

Commit

Permalink
[BZ 1120418] first semi succesful attempt at getting announce step to…
Browse files Browse the repository at this point in the history
… work

The announce step completed successfully in some manual testing, but
StorageNodeOperationsHandlerBean needs to be disabled. Right now it will
get invoked when the deployment related operations complete.
  • Loading branch information
John Sanda committed Aug 10, 2014
1 parent 24728c9 commit c2e3ac7
Show file tree
Hide file tree
Showing 9 changed files with 109 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,9 @@

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.cloud.StorageNodeManagerLocal;
import org.rhq.enterprise.server.operation.OperationManagerLocal;
import org.rhq.enterprise.server.storage.maintenance.StorageMaintenanceJob;
import org.rhq.enterprise.server.storage.maintenance.job.DeployCalculator;
import org.rhq.enterprise.server.storage.maintenance.job.StepCalculator;
Expand All @@ -42,6 +44,12 @@ public class StorageClusterMaintenanceManagerBean implements StorageClusterMaint
@EJB
private StorageClusterMaintenanceManagerLocal maintenanceManager;

@EJB
private OperationManagerLocal operationManager;

@EJB
private SubjectManagerLocal subjectManager;

@Override
public void scheduleMaintenance(StorageMaintenanceJob job) {
MaintenanceStep baseStep = job.getBaseStep();
Expand Down Expand Up @@ -81,7 +89,7 @@ public List<StorageMaintenanceJob> loadQueue() {

private void refreshJob(StorageMaintenanceJob job) {
StepCalculator stepCalculator = getStepCalculator(job.getJobType());
stepCalculator.calculateSteps(job, storageNodeManager.getStorageNodes());
stepCalculator.calculateSteps(job, storageNodeManager.getClusterNodes());
}

private StepCalculator getStepCalculator(MaintenanceStep.JobType jobType) {
Expand Down Expand Up @@ -126,6 +134,11 @@ public void execute() {
log.info("Executing " + job);
for (MaintenanceStep step : job) {
log.info("Executing " + step);
MaintenanceStepRunner stepRunner = getStepRunner(step);
stepRunner.setOperationManager(operationManager);
stepRunner.setStorageNodeManager(storageNodeManager);
stepRunner.setSubjectManager(subjectManager);
stepRunner.execute(step);
maintenanceManager.deleteStep(step.getId());
}
maintenanceManager.deleteStep(job.getBaseStep().getId());
Expand All @@ -134,7 +147,7 @@ public void execute() {

private MaintenanceStepRunner getStepRunner(MaintenanceStep step) {
try {
Class clazz = Class.forName("org.rhq.enterprise.server.storage.maintenance.step." + step.getName());
Class clazz = Class.forName(step.getName());
MaintenanceStepRunner runner = (MaintenanceStepRunner) clazz.newInstance();

return runner;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.rhq.enterprise.server.storage.maintenance.job;

import java.util.List;
import java.util.Set;

import javax.ejb.LocalBean;
import javax.ejb.Singleton;
Expand All @@ -9,7 +10,9 @@

import org.rhq.core.domain.cloud.StorageNode;
import org.rhq.core.domain.configuration.Configuration;
import org.rhq.core.domain.configuration.PropertyList;
import org.rhq.core.domain.configuration.PropertyMap;
import org.rhq.core.domain.configuration.PropertySimple;
import org.rhq.core.domain.storage.MaintenanceStep;
import org.rhq.enterprise.server.RHQConstants;
import org.rhq.enterprise.server.storage.maintenance.StorageMaintenanceJob;
Expand All @@ -32,21 +35,37 @@ public StorageMaintenanceJob calculateSteps(StorageMaintenanceJob job, List<Stor
PropertyMap parametersMap = job.getJobParameters();
String newNodeAddress = parametersMap.getSimple("address").getStringValue();
for (String address : job.getClusterSnapshot()) {
Configuration configuration = new Configuration();
configuration.put(new PropertySimple("targetAddress", address));
PropertyMap params = new PropertyMap("parameters");
params.put(createPropertyListOfAddresses("addresses", job.getClusterSnapshot()));
configuration.put(params);

MaintenanceStep step = new MaintenanceStep()
.setJobNumber(job.getJobNumber())
.setJobType(job.getJobType())
.setName(AnnounceStorageNode.class.getName())
.setStepNumber(stepNumber++)
.setDescription("Announce new node " + newNodeAddress + " to " + address)
.setConfiguration(new Configuration.Builder()
.openMap("parameters")
.addSimple("address", address)
.closeMap()
.build());
.setConfiguration(configuration);
// .setConfiguration(new Configuration.Builder()
// .addSimple("targetAddress", address)
// .openMap("parameters")
// .addSimple("address", newNodeAddress)
// .closeMap()
// .build());
entityManager.persist(step.getConfiguration());
entityManager.persist(step);
job.addStep(step);
}
return job;
}

private PropertyList createPropertyListOfAddresses(String propertyName, Set<String> addresses) {
PropertyList list = new PropertyList(propertyName);
for (String address : addresses) {
list.add(new PropertySimple("address", address));
}
return list;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
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;

/**
Expand All @@ -14,15 +16,15 @@ public class AnnounceStorageNode extends BaseStepRunner implements MaintenanceSt

@Override
public void execute(MaintenanceStep step) {
// Map<String, String> argsMap = convertArgs(step.getArgs());
// Configuration args = new Configuration();
// args.put(new PropertySimple("address", argsMap.get("address")));
//
// log.info("Announcing new node " + argsMap.get("address") + " to " + step.getStorageNode().getAddress());
//
// executeOperation(step.getStorageNode(), "announce", args);

log.info("Announcing 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("addresses"));
// operationParams.put(new PropertySimple("address", params.getSimple("address").getStringValue()));
executeOperation(targetAddress, "announce", operationParams);
}

}
Original file line number Diff line number Diff line change
@@ -1,37 +1,67 @@
package org.rhq.enterprise.server.storage.maintenance.step;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;

import org.rhq.core.domain.cloud.StorageNode;
import org.rhq.core.domain.configuration.Configuration;
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.bean.ResourceOperationSchedule;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.cloud.StorageNodeManagerLocal;
import org.rhq.enterprise.server.operation.OperationManagerLocal;

/**
* @author John Sanda
*/
public class BaseStepRunner {
public abstract class BaseStepRunner implements MaintenanceStepRunner {

private static final int DEFAULT_OPERATION_TIMEOUT = 300;

private StorageNodeManagerLocal storageNodeManager;

private ObjectMapper mapper;
private OperationManagerLocal operationManager;

private TypeReference<HashMap<String,String>> typeReference;
private SubjectManagerLocal subjectManager;

protected void executeOperation(StorageNode node, String operation, Configuration arguments) {
@Override
public void setStorageNodeManager(StorageNodeManagerLocal storageNodeManager) {
this.storageNodeManager = storageNodeManager;
}

@Override
public void setOperationManager(OperationManagerLocal operationManager) {
this.operationManager = operationManager;
}

@Override
public void setSubjectManager(SubjectManagerLocal subjectManager) {
this.subjectManager = subjectManager;
}

protected List<StorageNode> getCluster() {
return null;
protected void executeOperation(String storageNodeAddress, String operation, Configuration parameters) {
StorageNode node = storageNodeManager.findStorageNodeByAddress(storageNodeAddress);
int resourceId = node.getResource().getId();
ResourceOperationSchedule operationSchedule = operationManager.scheduleResourceOperation(
subjectManager.getOverlord(), resourceId, operation, 0, 0, 0, DEFAULT_OPERATION_TIMEOUT,
parameters.deepCopyWithoutProxies(), "");
waitForOperationToComplete(operationSchedule);
}

protected Map<String, String> convertArgs(String args) {
private OperationHistory waitForOperationToComplete(ResourceOperationSchedule schedule) {
try {
return mapper.readValue(args, typeReference);
} catch (IOException e) {
ResourceOperationHistoryCriteria criteria = new ResourceOperationHistoryCriteria();
criteria.addFilterJobId(schedule.getJobId());

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

import org.rhq.core.domain.storage.MaintenanceStep;
import org.rhq.enterprise.server.auth.SubjectManagerLocal;
import org.rhq.enterprise.server.cloud.StorageNodeManagerLocal;
import org.rhq.enterprise.server.operation.OperationManagerLocal;

/**
* @author Stefan Negrea
Expand All @@ -27,4 +30,10 @@
public interface MaintenanceStepRunner {

void execute(MaintenanceStep maintenanceStep);

void setStorageNodeManager(StorageNodeManagerLocal storageNodeManager);

void setOperationManager(OperationManagerLocal operationManager);

void setSubjectManager(SubjectManagerLocal subjectManager);
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*
*/
//@Stateless
public class ShutdownStorageClient implements MaintenanceStepRunner {
public class ShutdownStorageClient extends BaseStepRunner implements MaintenanceStepRunner {

// @EJB
private StorageClientManager storageClientManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
*
*/
//@Stateless
public class StartStorageClient implements MaintenanceStepRunner {
public class StartStorageClient extends BaseStepRunner implements MaintenanceStepRunner {

// @EJB
private StorageClientManager storageClientManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
*
*/
//@Stateless
public class UpdateStorageNodeEndpoints implements MaintenanceStepRunner {
public class UpdateStorageNodeEndpoints extends BaseStepRunner implements MaintenanceStepRunner {

// @EJB
private StorageNodeManagerBean storageNodeManager;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
*
*/
//@Stateless
public class UpdateStorageNodeEntity implements MaintenanceStepRunner {
public class UpdateStorageNodeEntity extends BaseStepRunner implements MaintenanceStepRunner {

// @EJB
StorageNodeManagerLocal storageNodeManagerBean;
Expand Down

0 comments on commit c2e3ac7

Please sign in to comment.