diff --git a/messaging/gt4.0/java/msgbridge/src/org/nimbustools/messaging/gt4_0/factory/FactoryResource.java b/messaging/gt4.0/java/msgbridge/src/org/nimbustools/messaging/gt4_0/factory/FactoryResource.java
index 8f686838..1dcd67c7 100644
--- a/messaging/gt4.0/java/msgbridge/src/org/nimbustools/messaging/gt4_0/factory/FactoryResource.java
+++ b/messaging/gt4.0/java/msgbridge/src/org/nimbustools/messaging/gt4_0/factory/FactoryResource.java
@@ -385,9 +385,9 @@ public void setRPs(Advertised advert) throws ResourceException {
/* CPUArchitectureName */
- if (advert.getCpuArchitectureName() != null) {
+ if (advert.getCpuArchitectureNames() != null) {
prop = new SimpleResourceProperty(Constants_GT4_0.RP_FACTORY_CPUArch);
- prop.add(advert.getCpuArchitectureName());
+ prop.add(advert.getCpuArchitectureNames());
this.propSet.add(prop);
}
diff --git a/service-api/java/source/src/org/nimbustools/api/_repr/_Advertised.java b/service-api/java/source/src/org/nimbustools/api/_repr/_Advertised.java
index 8f6e6324..39c5960b 100644
--- a/service-api/java/source/src/org/nimbustools/api/_repr/_Advertised.java
+++ b/service-api/java/source/src/org/nimbustools/api/_repr/_Advertised.java
@@ -22,7 +22,7 @@ public interface _Advertised extends Advertised {
public void setDefaultRunningTimeSeconds(int defaultRunningTime);
public void setMaximumRunningTimeSeconds(int maximumRunningTime);
- public void setCpuArchitectureName(String cpuArchitectureName);
+ public void setCpuArchitectureNames(String[] cpuArchitectureNames);
public void setVmmVersions(String[] vmmVersions);
public void setVmm(String vmm);
public void setNetworkNames(String[] networkNames);
diff --git a/service-api/java/source/src/org/nimbustools/api/defaults/repr/DefaultAdvertised.java b/service-api/java/source/src/org/nimbustools/api/defaults/repr/DefaultAdvertised.java
index fa5b4b06..27fa84cb 100644
--- a/service-api/java/source/src/org/nimbustools/api/defaults/repr/DefaultAdvertised.java
+++ b/service-api/java/source/src/org/nimbustools/api/defaults/repr/DefaultAdvertised.java
@@ -29,7 +29,7 @@ public class DefaultAdvertised implements _Advertised {
private int defaultRunningTimeSeconds;
private int maximumRunningTimeSeconds;
private int maximumAfterRunningTimeSeconds;
- private String cpuArchitectureName;
+ private String[] cpuArchitectureNames;
private String[] vmmVersions;
private String vmm;
private String[] networkNames;
@@ -53,8 +53,8 @@ public int getMaximumAfterRunningTimeSeconds() {
return this.maximumAfterRunningTimeSeconds;
}
- public String getCpuArchitectureName() {
- return this.cpuArchitectureName;
+ public String[] getCpuArchitectureNames() {
+ return this.cpuArchitectureNames;
}
public String[] getVmmVersions() {
@@ -94,8 +94,8 @@ public void setMaximumAfterRunningTimeSeconds(int maximumAfterRunningTime) {
this.maximumAfterRunningTimeSeconds = maximumAfterRunningTime;
}
- public void setCpuArchitectureName(String cpuArchitectureName) {
- this.cpuArchitectureName = cpuArchitectureName;
+ public void setCpuArchitectureNames(String[] cpuArchitectureNames) {
+ this.cpuArchitectureNames = cpuArchitectureNames;
}
public void setVmmVersions(String[] vmmVersions) {
@@ -129,7 +129,8 @@ public String toString() {
", maximumRunningTimeSeconds=" + maximumRunningTimeSeconds +
", maximumAfterRunningTimeSeconds=" +
maximumAfterRunningTimeSeconds +
- ", cpuArchitectureName='" + cpuArchitectureName + '\'' +
+ ", cpuArchitectureNames='" +
+ (cpuArchitectureNames == null ? null : Arrays.asList(cpuArchitectureNames)) +
", vmmVersions=" +
(vmmVersions == null ? null : Arrays.asList(vmmVersions)) +
", vmm='" + vmm + '\'' +
diff --git a/service-api/java/source/src/org/nimbustools/api/repr/Advertised.java b/service-api/java/source/src/org/nimbustools/api/repr/Advertised.java
index cd972379..16a111b2 100644
--- a/service-api/java/source/src/org/nimbustools/api/repr/Advertised.java
+++ b/service-api/java/source/src/org/nimbustools/api/repr/Advertised.java
@@ -25,7 +25,7 @@ public interface Advertised {
public int getDefaultRunningTimeSeconds();
public int getMaximumRunningTimeSeconds();
- public String getCpuArchitectureName();
+ public String[] getCpuArchitectureNames();
public String[] getVmmVersions();
public String getVmm();
public String[] getNetworkNames();
diff --git a/service/service/java/source/etc/workspace-service/other/main.xml b/service/service/java/source/etc/workspace-service/other/main.xml
index 10fef601..3200b71e 100644
--- a/service/service/java/source/etc/workspace-service/other/main.xml
+++ b/service/service/java/source/etc/workspace-service/other/main.xml
@@ -125,7 +125,7 @@
init-method="validate">
-
diff --git a/service/service/java/source/src/org/globus/workspace/creation/defaults/DefaultCreation.java b/service/service/java/source/src/org/globus/workspace/creation/defaults/DefaultCreation.java
index e0308e42..020715b9 100644
--- a/service/service/java/source/src/org/globus/workspace/creation/defaults/DefaultCreation.java
+++ b/service/service/java/source/src/org/globus/workspace/creation/defaults/DefaultCreation.java
@@ -229,8 +229,8 @@ public void setAccountingEventAdapter(AccountingEventAdapter accEvents) {
public Advertised getAdvertised() {
final _Advertised adv = this.repr._newAdvertised();
- adv.setCpuArchitectureName(
- this.globals.getCpuArchitectureName());
+ adv.setCpuArchitectureNames(
+ this.globals.getCpuArchitectureNames());
adv.setDefaultRunningTimeSeconds(
this.globals.getDefaultRunningTimeSeconds());
adv.setMaxGroupSize(
diff --git a/service/service/java/source/src/org/globus/workspace/service/binding/GlobalPolicies.java b/service/service/java/source/src/org/globus/workspace/service/binding/GlobalPolicies.java
index a3855308..1a1cbbb8 100644
--- a/service/service/java/source/src/org/globus/workspace/service/binding/GlobalPolicies.java
+++ b/service/service/java/source/src/org/globus/workspace/service/binding/GlobalPolicies.java
@@ -24,7 +24,7 @@ public interface GlobalPolicies {
public int getTerminationOffsetSeconds();
- public String getCpuArchitectureName();
+ public String[] getCpuArchitectureNames();
public String[] getVmmVersions();
diff --git a/service/service/java/source/src/org/globus/workspace/service/binding/authorization/DefaultAuthorize.java b/service/service/java/source/src/org/globus/workspace/service/binding/authorization/DefaultAuthorize.java
index 74182da4..f183e2ae 100644
--- a/service/service/java/source/src/org/globus/workspace/service/binding/authorization/DefaultAuthorize.java
+++ b/service/service/java/source/src/org/globus/workspace/service/binding/authorization/DefaultAuthorize.java
@@ -29,6 +29,8 @@
import org.nimbustools.api.services.rm.ResourceRequestDeniedException;
import javax.security.auth.Subject;
+import java.util.List;
+import java.util.Arrays;
public class DefaultAuthorize implements Authorize {
@@ -264,8 +266,8 @@ protected static void authorizeDuration(VirtualMachine vm,
protected void checkArchitecture(VirtualMachine vm)
throws ResourceRequestDeniedException {
- final String fact = this.globals.getCpuArchitectureName();
- if (fact == null) {
+ final String[] allowedCPUArchitectures = this.globals.getCpuArchitectureNames();
+ if (allowedCPUArchitectures == null) {
// if policy is null, means 'any'
return; // *** EARLY RETURN ***
}
@@ -276,16 +278,32 @@ protected void checkArchitecture(VirtualMachine vm)
"no CPU architecture description (no dep)");
}
- final String arch = dep.getCPUArchitecture();
- if (arch == null) {
+ final String requestedArch = dep.getCPUArchitecture();
+ if (requestedArch == null) {
throw new ResourceRequestDeniedException(
"no CPU architecture description (no dep.arch)");
}
- if (!arch.equals(fact)) {
+ List archList = Arrays.asList(allowedCPUArchitectures);
+
+ if (!archList.contains(requestedArch)) {
+
+ StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for (int i=0; i < allowedCPUArchitectures.length ; i++) {
+ if (first) {
+ first = false;
+ }
+ else {
+ sb.append(", ");
+ }
+ sb.append(allowedCPUArchitectures[i]);
+ }
+ final String allArchitectures = sb.toString();
+
throw new ResourceRequestDeniedException(
- "incorrect CPU architecture, only '" + fact +
- "' supported, you request '" + arch + "'");
+ "incorrect CPU architecture, only '" + allArchitectures +
+ "' supported, you requested '" + requestedArch + "'");
}
}
diff --git a/service/service/java/source/src/org/globus/workspace/service/binding/defaults/DefaultGlobalPolicies.java b/service/service/java/source/src/org/globus/workspace/service/binding/defaults/DefaultGlobalPolicies.java
index 9757e42a..3f6399de 100644
--- a/service/service/java/source/src/org/globus/workspace/service/binding/defaults/DefaultGlobalPolicies.java
+++ b/service/service/java/source/src/org/globus/workspace/service/binding/defaults/DefaultGlobalPolicies.java
@@ -38,7 +38,7 @@ public class DefaultGlobalPolicies implements GlobalPolicies {
private int defaultRunningTimeSeconds;
private int maximumRunningTimeSeconds;
private int terminationOffsetSeconds;
- private String cpuArchitectureName;
+ private String[] cpuArchitectureNames;
private String[] vmmVersions;
private String vmm;
@@ -83,12 +83,12 @@ public void setTerminationOffsetSeconds(int terminationOffsetSeconds) {
this.terminationOffsetSeconds = terminationOffsetSeconds;
}
- public String getCpuArchitectureName() {
- return this.cpuArchitectureName;
+ public String[] getCpuArchitectureNames() {
+ return this.cpuArchitectureNames;
}
- public void setCpuArchitectureName(String cpuArchitectureName) {
- this.cpuArchitectureName = cpuArchitectureName;
+ public void setCpuArchitectureNames(String[] cpuArchitectureNames) {
+ this.cpuArchitectureNames = cpuArchitectureNames;
}
public String[] getVmmVersions() {