mirror of https://github.com/apache/cloudstack.git
Merge pull request #1013 from jharshman/CLOUDSTACK-9004
[4.7] CLOUDSTACK-9004: Add features to HyperVEnlightenmentFeatureDefAdd function to set vapic, spinlock and retries Add function to get retry value Modify toString to output appropriate XML for spinlock value if set * pr/1013: CLOUDSTACK-9004: Add features to HyperVEnlightenmentFeatureDef Signed-off-by: Daan Hoogland <daan@onecht.net>
This commit is contained in:
commit
79b054ae22
|
|
@ -191,22 +191,57 @@ public class LibvirtVMDef {
|
|||
}
|
||||
|
||||
public static class HyperVEnlightenmentFeatureDef {
|
||||
private final Map<String, String> features = new HashMap<String,String>();
|
||||
public void setRelaxed(boolean on) {
|
||||
String state = on ? "On":"Off";
|
||||
features.put("relaxed", state);
|
||||
enum Enlight {
|
||||
RELAX("relaxed"),
|
||||
VAPIC("vapic"),
|
||||
SPIN("spinlocks");
|
||||
|
||||
private final String featureName;
|
||||
Enlight(String featureName) { this.featureName = featureName; }
|
||||
String getFeatureName() { return featureName; }
|
||||
|
||||
static boolean isValidFeature(String featureName) {
|
||||
Enlight[] enlights = Enlight.values();
|
||||
for(Enlight e : enlights) {
|
||||
if(e.getFeatureName().equals(featureName))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private final Map<String, String> features = new HashMap<String, String>();
|
||||
private int retries = 4096; // set to sane default
|
||||
|
||||
public void setFeature(String feature, boolean on) {
|
||||
if(on && Enlight.isValidFeature(feature))
|
||||
setFeature(feature);
|
||||
}
|
||||
|
||||
private void setFeature(String feature) {
|
||||
features.put(feature, "on");
|
||||
}
|
||||
|
||||
public void setRetries(int retry) {
|
||||
if(retry>=retries)
|
||||
retries=retry;
|
||||
}
|
||||
|
||||
public int getRetries() {
|
||||
return retries;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
if (features.isEmpty()) {
|
||||
return "";
|
||||
}
|
||||
StringBuilder feaBuilder = new StringBuilder();
|
||||
feaBuilder.append("<hyperv>\n");
|
||||
for (Map.Entry<String, String> e : features.entrySet()) {
|
||||
feaBuilder.append("<");
|
||||
feaBuilder.append(e.getKey());
|
||||
feaBuilder.append(" state='" + e.getValue() + "'");
|
||||
|
||||
if(e.getKey().equals("spinlocks")) feaBuilder.append(" state='" + e.getValue() + "' retries='" + getRetries() + "'");
|
||||
else feaBuilder.append(" state='" + e.getValue() + "'");
|
||||
|
||||
feaBuilder.append("/>\n");
|
||||
}
|
||||
feaBuilder.append("</hyperv>\n");
|
||||
|
|
|
|||
|
|
@ -94,16 +94,22 @@ public class LibvirtVMDefTest extends TestCase {
|
|||
public void testHypervEnlightDef() {
|
||||
LibvirtVMDef.FeaturesDef featuresDef = new LibvirtVMDef.FeaturesDef();
|
||||
LibvirtVMDef.HyperVEnlightenmentFeatureDef hyperVEnlightenmentFeatureDef = new LibvirtVMDef.HyperVEnlightenmentFeatureDef();
|
||||
hyperVEnlightenmentFeatureDef.setRelaxed(true);
|
||||
hyperVEnlightenmentFeatureDef.setFeature("relaxed", true);
|
||||
hyperVEnlightenmentFeatureDef.setFeature("vapic", true);
|
||||
hyperVEnlightenmentFeatureDef.setFeature("spinlocks", true);
|
||||
hyperVEnlightenmentFeatureDef.setRetries(8096);
|
||||
featuresDef.addHyperVFeature(hyperVEnlightenmentFeatureDef);
|
||||
String defs = featuresDef.toString();
|
||||
assertTrue(defs.contains("relaxed"));
|
||||
assertTrue(defs.contains("vapic"));
|
||||
assertTrue(defs.contains("spinlocks"));
|
||||
|
||||
featuresDef = new LibvirtVMDef.FeaturesDef();
|
||||
featuresDef.addFeatures("pae");
|
||||
defs = featuresDef.toString();
|
||||
assertFalse(defs.contains("relaxed"));
|
||||
|
||||
assertFalse(defs.contains("vapic"));
|
||||
assertFalse(defs.contains("spinlocks"));
|
||||
assertTrue("Windows Server 2008 R2".contains("Windows Server 2008"));
|
||||
|
||||
Pair<Integer,Integer> hostOsVersion = new Pair<Integer,Integer>(6,5);
|
||||
|
|
|
|||
Loading…
Reference in New Issue