fixing registry serializing issue
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
index 534d57d..93f2675 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
@@ -35,7 +35,6 @@
import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
import org.apache.stratos.cloud.controller.stub.deployment.partition.Partition;
import org.apache.stratos.messaging.domain.applications.Application;
-import org.apache.stratos.messaging.domain.applications.Applications;
import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.Resource;
@@ -48,10 +47,25 @@
public class RegistryManager {
- private final static Log log = LogFactory.getLog(RegistryManager.class);
+ private final static Log log = LogFactory.getLog(RegistryManager.class);
private static Registry registryService;
private static RegistryManager registryManager;
+ private RegistryManager() {
+ try {
+ if (!registryService.resourceExists(AutoScalerConstants.AUTOSCALER_RESOURCE)) {
+ registryService.put(AutoScalerConstants.AUTOSCALER_RESOURCE,
+ registryService.newCollection());
+ }
+ } catch (RegistryException e) {
+ String msg =
+ "Failed to create the registry resource " +
+ AutoScalerConstants.AUTOSCALER_RESOURCE;
+ log.error(msg, e);
+ throw new AutoScalerException(msg, e);
+ }
+ }
+
public static RegistryManager getInstance() {
registryService = ServiceReferenceHolder.getInstance().getRegistry();
@@ -67,26 +81,11 @@
}
return registryManager;
}
-
- private RegistryManager() {
- try {
- if (!registryService.resourceExists(AutoScalerConstants.AUTOSCALER_RESOURCE)) {
- registryService.put(AutoScalerConstants.AUTOSCALER_RESOURCE,
- registryService.newCollection());
- }
- } catch (RegistryException e) {
- String msg =
- "Failed to create the registry resource " +
- AutoScalerConstants.AUTOSCALER_RESOURCE;
- log.error(msg, e);
- throw new AutoScalerException(msg, e);
- }
- }
-
+
/**
* Persist an object in the local registry.
*
- * @param dataObj object to be persisted.
+ * @param dataObj object to be persisted.
* @param resourcePath resource path to be persisted.
*/
private void persist(Object dataObj, String resourcePath) throws AutoScalerException {
@@ -99,15 +98,15 @@
registryService.beginTransaction();
Resource nodeResource = registryService.newResource();
- nodeResource.setContent(Serializer.serializeToByteArray(dataObj));
-
+ nodeResource.setContent(Serializer.serializeToByteArray(dataObj));
+
registryService.put(resourcePath, nodeResource);
registryService.commitTransaction();
} catch (Exception e) {
try {
registryService.rollbackTransaction();
} catch (RegistryException e1) {
- if(log.isErrorEnabled()) {
+ if (log.isErrorEnabled()) {
log.error("Could not rollback transaction", e);
}
}
@@ -116,27 +115,27 @@
}
public void persistPartition(Partition partition) {
- String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.PARTITION_RESOURCE + "/"+partition.getId();
+ String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.PARTITION_RESOURCE + "/" + partition.getId();
persist(partition, resourcePath);
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(String.format("Partition written to registry: [id] %s [provider] %s [min] %d [max] %d",
partition.getId(), partition.getProvider(), partition.getPartitionMin(), partition.getPartitionMax()));
}
}
-
+
public void persistNetworkPartitionIbHolder(NetworkPartitionLbHolder nwPartitionLbHolder) {
String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants
- .NETWORK_PARTITION_LB_HOLDER_RESOURCE + "/"+nwPartitionLbHolder.getNetworkPartitionId();
+ .NETWORK_PARTITION_LB_HOLDER_RESOURCE + "/" + nwPartitionLbHolder.getNetworkPartitionId();
persist(nwPartitionLbHolder, resourcePath);
- if(log.isDebugEnabled()) {
- log.debug("NetworkPartitionContext written to registry: "+nwPartitionLbHolder.toString());
+ if (log.isDebugEnabled()) {
+ log.debug("NetworkPartitionContext written to registry: " + nwPartitionLbHolder.toString());
}
}
public void persistAutoscalerPolicy(AutoscalePolicy autoscalePolicy) {
String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getId();
persist(autoscalePolicy, resourcePath);
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(String.format("Autoscaler policy written to registry: [id] %s [name] %s [description] %s",
autoscalePolicy.getId(), autoscalePolicy.getDisplayName(), autoscalePolicy.getDescription()));
}
@@ -145,13 +144,13 @@
public void persistDeploymentPolicy(DeploymentPolicy deploymentPolicy) {
String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE + "/" + deploymentPolicy.getId();
persist(deploymentPolicy, resourcePath);
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(deploymentPolicy.toString());
}
}
- public void persistApplication (Application application) {
+ public void persistApplication(Application application) {
try {
PrivilegedCarbonContext.startTenantFlow();
@@ -162,7 +161,7 @@
String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.APPLICATIONS_RESOURCE +
"/" + application.getUniqueIdentifier();
persist(application, resourcePath);
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug("Application [ " + application.getUniqueIdentifier() +
" ] persisted successfully in the Autoscaler Registry");
}
@@ -172,7 +171,7 @@
}
}
- public String [] getApplicationResourcePaths () {
+ public String[] getApplicationResourcePaths() {
try {
PrivilegedCarbonContext.startTenantFlow();
@@ -184,8 +183,8 @@
AutoScalerConstants.APPLICATIONS_RESOURCE);
if (obj != null) {
- if (obj instanceof String []) {
- return (String []) obj;
+ if (obj instanceof String[]) {
+ return (String[]) obj;
} else {
log.warn("Expected object type not found for Applications in Registry");
return null;
@@ -199,7 +198,7 @@
return null;
}
- public Application getApplication (String applicationResourcePath) {
+ public Application getApplication(String applicationResourcePath) {
try {
PrivilegedCarbonContext.startTenantFlow();
@@ -208,15 +207,28 @@
carbonContext.setTenantId(MultitenantConstants.SUPER_TENANT_ID);
Object obj = retrieve(applicationResourcePath);
-
if (obj != null) {
+ try {
+ Object dataObj = Deserializer
+ .deserializeFromByteArray((byte[]) obj);
+ if (dataObj instanceof Application) {
+ return (Application) dataObj;
+ } else {
+ return null;
+ }
+ } catch (Exception e) {
+ String msg = "Unable to retrieve data from Registry. Hence, any historical data will not get reflected.";
+ log.warn(msg, e);
+ }
+ }
+ /*if (obj != null) {
if (obj instanceof Application) {
return (Application) obj;
} else {
log.warn("Expected object type not found for Application " + applicationResourcePath + " in Registry");
return null;
}
- }
+ }*/
} finally {
PrivilegedCarbonContext.endTenantFlow();
@@ -225,7 +237,7 @@
return null;
}
- public void removeApplication (String applicationId) {
+ public void removeApplication(String applicationId) {
try {
PrivilegedCarbonContext.startTenantFlow();
@@ -243,21 +255,21 @@
}
public void persistServiceGroup(ServiceGroup servicegroup) {
- if(servicegroup == null || StringUtils.isEmpty(servicegroup.getName())){
- throw new IllegalArgumentException("Service group or group name can not be null");
+ if (servicegroup == null || StringUtils.isEmpty(servicegroup.getName())) {
+ throw new IllegalArgumentException("Service group or group name can not be null");
}
String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.SERVICE_GROUP + "/" + servicegroup.getName();
persist(servicegroup, resourcePath);
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(String.format("Persisted service group %s at path %s", servicegroup.getName(), resourcePath));
}
}
- public boolean serviceGroupExist(String serviceGroupName){
+ public boolean serviceGroupExist(String serviceGroupName) {
String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.SERVICE_GROUP + "/" + serviceGroupName;
return this.resourceExist(resourcePath);
}
-
+
private Object retrieve(String resourcePath) {
try {
Resource resource = registryService.get(resourcePath);
@@ -272,8 +284,8 @@
}
}
- private boolean resourceExist(String resourcePath){
- return this.retrieve(resourcePath) != null;
+ private boolean resourceExist(String resourcePath) {
+ return this.retrieve(resourcePath) != null;
}
public List<Partition> retrievePartitions() {
@@ -291,7 +303,7 @@
Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
if (dataObj instanceof Partition) {
partition = (Partition) dataObj;
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(String.format("Partition read from registry: [id] %s [provider] %s [min] %d [max] %d",
partition.getId(), partition.getProvider(), partition.getPartitionMin(), partition.getPartitionMax()));
}
@@ -308,12 +320,12 @@
}
return partitionList;
}
-
+
public List<NetworkPartitionLbHolder> retrieveNetworkPartitionLbHolders() {
List<NetworkPartitionLbHolder> nwPartitionLbHolderList = new ArrayList<NetworkPartitionLbHolder>();
RegistryManager registryManager = RegistryManager.getInstance();
- String[] partitionsResourceList = (String[]) registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE +
- AutoScalerConstants.NETWORK_PARTITION_LB_HOLDER_RESOURCE);
+ String[] partitionsResourceList = (String[]) registryManager.retrieve(AutoScalerConstants.AUTOSCALER_RESOURCE +
+ AutoScalerConstants.NETWORK_PARTITION_LB_HOLDER_RESOURCE);
if (partitionsResourceList != null) {
NetworkPartitionLbHolder nwPartitionLbHolder;
@@ -325,7 +337,7 @@
Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
if (dataObj instanceof NetworkPartitionLbHolder) {
nwPartitionLbHolder = (NetworkPartitionLbHolder) dataObj;
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(String.format("NetworkPartitionLbHolder read from registry: " + nwPartitionLbHolder.toString()));
}
nwPartitionLbHolderList.add(nwPartitionLbHolder);
@@ -356,7 +368,7 @@
Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
if (dataObj instanceof AutoscalePolicy) {
asPolicy = (AutoscalePolicy) dataObj;
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(String.format("Autoscaler policy read from registry: [id] %s [name] %s [description] %s",
asPolicy.getId(), asPolicy.getDisplayName(), asPolicy.getDescription()));
}
@@ -388,7 +400,7 @@
Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
if (dataObj instanceof DeploymentPolicy) {
depPolicy = (DeploymentPolicy) dataObj;
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(depPolicy.toString());
}
depPolicyList.add(depPolicy);
@@ -405,36 +417,16 @@
return depPolicyList;
}
- public ServiceGroup getServiceGroup(String name) throws Exception{
+ public ServiceGroup getServiceGroup(String name) throws Exception {
String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.SERVICE_GROUP + "/" + name;
Object serializedObj = registryManager.retrieve(resourcePath);
ServiceGroup group = null;
if (serializedObj != null) {
- Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
- if (dataObj instanceof ServiceGroup) {
- group = (ServiceGroup) dataObj;
- if(log.isDebugEnabled()) {
- log.debug(group.toString());
- }
- } else {
- return null;
- }
- }
-
- return group;
- }
-
- public ServiceGroup removeServiceGroup(String name) throws Exception{
- String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE +
- AutoScalerConstants.SERVICE_GROUP + "/" + name;
- Object serializedObj = registryManager.retrieve(resourcePath);
- ServiceGroup group = null;
- if (serializedObj != null) {
Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
if (dataObj instanceof ServiceGroup) {
group = (ServiceGroup) dataObj;
- if(log.isDebugEnabled()) {
+ if (log.isDebugEnabled()) {
log.debug(group.toString());
}
} else {
@@ -445,51 +437,71 @@
return group;
}
- public void removeAutoscalerPolicy(AutoscalePolicy autoscalePolicy) {
- String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getId();
- this.delete(resourcePath);
- if(log.isDebugEnabled()) {
- log.debug(String.format("Autoscaler policy deleted from registry: [id] %s [name] %s [description] %s",
- autoscalePolicy.getId(), autoscalePolicy.getDisplayName(), autoscalePolicy.getDescription()));
- }
-
- }
-
- public void removeDeploymentPolicy(DeploymentPolicy depPolicy){
- String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE;
- this.delete(resourcePath);
- if(log.isDebugEnabled()) {
- log.debug(String.format("Deployment policy deleted from registry: [id] %s" ,
- depPolicy.getId()));
- }
- }
-
- public void removeNetworkPartition(String networkPartition){
- String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.NETWORK_PARTITION_LB_HOLDER_RESOURCE;
- this.delete(resourcePath);
- if(log.isDebugEnabled()) {
- log.debug(String.format("Network partition deleted from registry: [id] %s" ,
- networkPartition));
- }
- }
-
+ public ServiceGroup removeServiceGroup(String name) throws Exception {
+ String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE +
+ AutoScalerConstants.SERVICE_GROUP + "/" + name;
+ Object serializedObj = registryManager.retrieve(resourcePath);
+ ServiceGroup group = null;
+ if (serializedObj != null) {
+ Object dataObj = Deserializer.deserializeFromByteArray((byte[]) serializedObj);
+ if (dataObj instanceof ServiceGroup) {
+ group = (ServiceGroup) dataObj;
+ if (log.isDebugEnabled()) {
+ log.debug(group.toString());
+ }
+ } else {
+ return null;
+ }
+ }
- private void delete(String resourcePath) {
- try {
- registryService.beginTransaction();
- registryService.delete(resourcePath);
- registryService.commitTransaction();
- } catch (RegistryException e) {
- try {
- registryService.rollbackTransaction();
- } catch (RegistryException e1) {
- if(log.isErrorEnabled()) {
- log.error("Could not rollback transaction", e);
- }
- }
- log.error("Could not delete resource at "+ resourcePath);
- throw new AutoScalerException("Could not delete data in registry at " + resourcePath, e);
- }
+ return group;
+ }
- }
+ public void removeAutoscalerPolicy(AutoscalePolicy autoscalePolicy) {
+ String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.AS_POLICY_RESOURCE + "/" + autoscalePolicy.getId();
+ this.delete(resourcePath);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Autoscaler policy deleted from registry: [id] %s [name] %s [description] %s",
+ autoscalePolicy.getId(), autoscalePolicy.getDisplayName(), autoscalePolicy.getDescription()));
+ }
+
+ }
+
+ public void removeDeploymentPolicy(DeploymentPolicy depPolicy) {
+ String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.DEPLOYMENT_POLICY_RESOURCE;
+ this.delete(resourcePath);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Deployment policy deleted from registry: [id] %s",
+ depPolicy.getId()));
+ }
+ }
+
+ public void removeNetworkPartition(String networkPartition) {
+ String resourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE + AutoScalerConstants.NETWORK_PARTITION_LB_HOLDER_RESOURCE;
+ this.delete(resourcePath);
+ if (log.isDebugEnabled()) {
+ log.debug(String.format("Network partition deleted from registry: [id] %s",
+ networkPartition));
+ }
+ }
+
+
+ private void delete(String resourcePath) {
+ try {
+ registryService.beginTransaction();
+ registryService.delete(resourcePath);
+ registryService.commitTransaction();
+ } catch (RegistryException e) {
+ try {
+ registryService.rollbackTransaction();
+ } catch (RegistryException e1) {
+ if (log.isErrorEnabled()) {
+ log.error("Could not rollback transaction", e);
+ }
+ }
+ log.error("Could not delete resource at " + resourcePath);
+ throw new AutoScalerException("Could not delete data in registry at " + resourcePath, e);
+ }
+
+ }
}