Skip to content

Commit b6c900f

Browse files
author
Josh Harshman
committed
CLOUDSTACK-9004: Add features to HyperVEnlightenmentFeatureDef
Add function to set vapic, spinlock and retries Add function to get retry value Modify toString to output appropriate XML for spinlock value if set CLOUDSTACK-9004: Add features to HyperVEnlightenmentFeatureDef Refactored set methods to get rid of code duplication. Modified unit tests accordingly
1 parent 7e902cd commit b6c900f

File tree

2 files changed

+51
-10
lines changed

2 files changed

+51
-10
lines changed

plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtVMDef.java

Lines changed: 43 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -191,22 +191,57 @@ public String toString() {
191191
}
192192

193193
public static class HyperVEnlightenmentFeatureDef {
194-
private final Map<String, String> features = new HashMap<String,String>();
195-
public void setRelaxed(boolean on) {
196-
String state = on ? "On":"Off";
197-
features.put("relaxed", state);
194+
enum Enlight {
195+
RELAX("relaxed"),
196+
VAPIC("vapic"),
197+
SPIN("spinlocks");
198+
199+
private final String featureName;
200+
Enlight(String featureName) { this.featureName = featureName; }
201+
String getFeatureName() { return featureName; }
202+
203+
static boolean isValidFeature(String featureName) {
204+
Enlight[] enlights = Enlight.values();
205+
for(Enlight e : enlights) {
206+
if(e.getFeatureName().equals(featureName))
207+
return true;
208+
}
209+
return false;
210+
}
211+
}
212+
213+
private final Map<String, String> features = new HashMap<String, String>();
214+
private int retries = 4096; // set to sane default
215+
216+
public void setFeature(String feature, boolean on) {
217+
if(on && Enlight.isValidFeature(feature))
218+
setFeature(feature);
219+
}
220+
221+
private void setFeature(String feature) {
222+
features.put(feature, "on");
198223
}
224+
225+
public void setRetries(int retry) {
226+
if(retry>=retries)
227+
retries=retry;
228+
}
229+
230+
public int getRetries() {
231+
return retries;
232+
}
233+
199234
@Override
200235
public String toString() {
201-
if (features.isEmpty()) {
202-
return "";
203-
}
204236
StringBuilder feaBuilder = new StringBuilder();
205237
feaBuilder.append("<hyperv>\n");
206238
for (Map.Entry<String, String> e : features.entrySet()) {
207239
feaBuilder.append("<");
208240
feaBuilder.append(e.getKey());
209-
feaBuilder.append(" state='" + e.getValue() + "'");
241+
242+
if(e.getKey().equals("spinlocks")) feaBuilder.append(" state='" + e.getValue() + "' retries='" + getRetries() + "'");
243+
else feaBuilder.append(" state='" + e.getValue() + "'");
244+
210245
feaBuilder.append("/>\n");
211246
}
212247
feaBuilder.append("</hyperv>\n");

plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtVMDefTest.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,16 +94,22 @@ public void testDiskDef() {
9494
public void testHypervEnlightDef() {
9595
LibvirtVMDef.FeaturesDef featuresDef = new LibvirtVMDef.FeaturesDef();
9696
LibvirtVMDef.HyperVEnlightenmentFeatureDef hyperVEnlightenmentFeatureDef = new LibvirtVMDef.HyperVEnlightenmentFeatureDef();
97-
hyperVEnlightenmentFeatureDef.setRelaxed(true);
97+
hyperVEnlightenmentFeatureDef.setFeature("relaxed", true);
98+
hyperVEnlightenmentFeatureDef.setFeature("vapic", true);
99+
hyperVEnlightenmentFeatureDef.setFeature("spinlocks", true);
100+
hyperVEnlightenmentFeatureDef.setRetries(8096);
98101
featuresDef.addHyperVFeature(hyperVEnlightenmentFeatureDef);
99102
String defs = featuresDef.toString();
100103
assertTrue(defs.contains("relaxed"));
104+
assertTrue(defs.contains("vapic"));
105+
assertTrue(defs.contains("spinlocks"));
101106

102107
featuresDef = new LibvirtVMDef.FeaturesDef();
103108
featuresDef.addFeatures("pae");
104109
defs = featuresDef.toString();
105110
assertFalse(defs.contains("relaxed"));
106-
111+
assertFalse(defs.contains("vapic"));
112+
assertFalse(defs.contains("spinlocks"));
107113
assertTrue("Windows Server 2008 R2".contains("Windows Server 2008"));
108114

109115
Pair<Integer,Integer> hostOsVersion = new Pair<Integer,Integer>(6,5);

0 commit comments

Comments
 (0)