/** * Returns {@code true} if the supplied InstanceDefinitions is {@code null} or empty (contains no elements). * * @param instanceDefinitions the instance group definitions from the EMR cluster definition * * @return whether the given InstanceDefinitions is empty */ public boolean isInstanceDefinitionsEmpty(InstanceDefinitions instanceDefinitions) { return (instanceDefinitions == null || (instanceDefinitions.getMasterInstances() == null && instanceDefinitions.getCoreInstances() == null && instanceDefinitions.getTaskInstances() == null)); }
/** * Returns {@code true} if the supplied InstanceDefinitions is {@code null} or empty (contains no elements). * * @param instanceDefinitions the instance group definitions from the EMR cluster definition * * @return whether the given InstanceDefinitions is empty */ public boolean isInstanceDefinitionsEmpty(InstanceDefinitions instanceDefinitions) { return (instanceDefinitions == null || (instanceDefinitions.getMasterInstances() == null && instanceDefinitions.getCoreInstances() == null && instanceDefinitions.getTaskInstances() == null)); }
public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy2 strategy) { { MasterInstanceDefinition theMasterInstances; theMasterInstances = this.getMasterInstances(); strategy.appendField(locator, this, "masterInstances", buffer, theMasterInstances, (this.masterInstances!= null)); } { InstanceDefinition theCoreInstances; theCoreInstances = this.getCoreInstances(); strategy.appendField(locator, this, "coreInstances", buffer, theCoreInstances, (this.coreInstances!= null)); } { InstanceDefinition theTaskInstances; theTaskInstances = this.getTaskInstances(); strategy.appendField(locator, this, "taskInstances", buffer, theTaskInstances, (this.taskInstances!= null)); } return buffer; }
public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy2 strategy) { { MasterInstanceDefinition theMasterInstances; theMasterInstances = this.getMasterInstances(); strategy.appendField(locator, this, "masterInstances", buffer, theMasterInstances, (this.masterInstances!= null)); } { InstanceDefinition theCoreInstances; theCoreInstances = this.getCoreInstances(); strategy.appendField(locator, this, "coreInstances", buffer, theCoreInstances, (this.coreInstances!= null)); } { InstanceDefinition theTaskInstances; theTaskInstances = this.getTaskInstances(); strategy.appendField(locator, this, "taskInstances", buffer, theTaskInstances, (this.taskInstances!= null)); } return buffer; }
public StringBuilder appendFields(ObjectLocator locator, StringBuilder buffer, ToStringStrategy2 strategy) { { MasterInstanceDefinition theMasterInstances; theMasterInstances = this.getMasterInstances(); strategy.appendField(locator, this, "masterInstances", buffer, theMasterInstances, (this.masterInstances!= null)); } { InstanceDefinition theCoreInstances; theCoreInstances = this.getCoreInstances(); strategy.appendField(locator, this, "coreInstances", buffer, theCoreInstances, (this.coreInstances!= null)); } { InstanceDefinition theTaskInstances; theTaskInstances = this.getTaskInstances(); strategy.appendField(locator, this, "taskInstances", buffer, theTaskInstances, (this.taskInstances!= null)); } return buffer; }
/** * Updates the given definition with the given subnet and EMR pricing information. * <p/> * Sets the subnet with the given subnet ID. Removes any maxSearchPrice and onDemandThreshold that were set. Sets the spotPrice only if the given cluster * price is a spot. * * @param emrClusterDefinition the definition to update * @param bestEmrClusterSubnet the subnet to use * @param bestEmrClusterPrice the EMR pricing information for each instance */ private void updateInstanceDefinitionsWithBestPrice(EmrClusterDefinition emrClusterDefinition, Subnet bestEmrClusterSubnet, EmrClusterPriceDto bestEmrClusterPrice) { emrClusterDefinition.setSubnetId(bestEmrClusterSubnet.getSubnetId()); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceMaxSearchPrice(null); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceOnDemandThreshold(null); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceSpotPrice(getSpotBidPrice(bestEmrClusterPrice.getMasterPrice())); if (bestEmrClusterPrice.getCorePrice() != null) { emrClusterDefinition.getInstanceDefinitions().getCoreInstances().setInstanceMaxSearchPrice(null); emrClusterDefinition.getInstanceDefinitions().getCoreInstances().setInstanceOnDemandThreshold(null); emrClusterDefinition.getInstanceDefinitions().getCoreInstances().setInstanceSpotPrice(getSpotBidPrice(bestEmrClusterPrice.getCorePrice())); } }
public int hashCode(ObjectLocator locator, HashCodeStrategy2 strategy) { int currentHashCode = 1; { MasterInstanceDefinition theMasterInstances; theMasterInstances = this.getMasterInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "masterInstances", theMasterInstances), currentHashCode, theMasterInstances, (this.masterInstances!= null)); } { InstanceDefinition theCoreInstances; theCoreInstances = this.getCoreInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "coreInstances", theCoreInstances), currentHashCode, theCoreInstances, (this.coreInstances!= null)); } { InstanceDefinition theTaskInstances; theTaskInstances = this.getTaskInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "taskInstances", theTaskInstances), currentHashCode, theTaskInstances, (this.taskInstances!= null)); } return currentHashCode; }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master instance max search price and * on-demand threshold is specified The definition should be valid because on-demand threshold can be used with max search price. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterMaxSearchPriceAndOnDemandThresholdSpecified() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceMaxSearchPrice(BigDecimal.ONE); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceOnDemandThreshold(BigDecimal.ONE); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); } catch (Exception e) { fail("expected no exception, but " + e.getClass() + " was thrown. " + e); } }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master instance on-demand threshold is * negative. The definition is not valid. All prices must be positive. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterMaxSearchPriceSpecifiedAndOnDemandThresholdNegative() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceMaxSearchPrice(BigDecimal.ONE); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceOnDemandThreshold(BigDecimal.ONE.negate()); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); fail("expected IllegalArgumentException, but no exception was thrown"); } catch (IllegalArgumentException e) { assertEquals("Master instance on-demand threshold must be greater than 0", e.getMessage()); } }
public int hashCode(ObjectLocator locator, HashCodeStrategy2 strategy) { int currentHashCode = 1; { MasterInstanceDefinition theMasterInstances; theMasterInstances = this.getMasterInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "masterInstances", theMasterInstances), currentHashCode, theMasterInstances, (this.masterInstances!= null)); } { InstanceDefinition theCoreInstances; theCoreInstances = this.getCoreInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "coreInstances", theCoreInstances), currentHashCode, theCoreInstances, (this.coreInstances!= null)); } { InstanceDefinition theTaskInstances; theTaskInstances = this.getTaskInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "taskInstances", theTaskInstances), currentHashCode, theTaskInstances, (this.taskInstances!= null)); } return currentHashCode; }
public int hashCode(ObjectLocator locator, HashCodeStrategy2 strategy) { int currentHashCode = 1; { MasterInstanceDefinition theMasterInstances; theMasterInstances = this.getMasterInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "masterInstances", theMasterInstances), currentHashCode, theMasterInstances, (this.masterInstances!= null)); } { InstanceDefinition theCoreInstances; theCoreInstances = this.getCoreInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "coreInstances", theCoreInstances), currentHashCode, theCoreInstances, (this.coreInstances!= null)); } { InstanceDefinition theTaskInstances; theTaskInstances = this.getTaskInstances(); currentHashCode = strategy.hashCode(LocatorUtils.property(locator, "taskInstances", theTaskInstances), currentHashCode, theTaskInstances, (this.taskInstances!= null)); } return currentHashCode; }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master spot price is negative. The * definition is not valid. All prices must be positive. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterSpotPriceNegative() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceSpotPrice(BigDecimal.ONE.negate()); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); fail("expected IllegalArgumentException, but no exception was thrown"); } catch (Exception e) { assertEquals("thrown exception", IllegalArgumentException.class, e.getClass()); } }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master instance max search price is * negative. The definition is not valid. All prices must be positive. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterMaxSearchPriceNegative() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceMaxSearchPrice(BigDecimal.ONE.negate()); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); fail("expected IllegalArgumentException, but no exception was thrown"); } catch (Exception e) { assertEquals("thrown exception", IllegalArgumentException.class, e.getClass()); } }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master instance spot price and max search * price is specified. The definition is not valid. The two parameters are exclusive. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterSpotPriceAndMaxSearchPriceSpecified() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceSpotPrice(BigDecimal.ONE); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceMaxSearchPrice(BigDecimal.ONE); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); fail("expected IllegalArgumentException, but no exception was thrown"); } catch (Exception e) { assertEquals("thrown exception", IllegalArgumentException.class, e.getClass()); } }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master instance spot price is specified The * definition should be valid because spot price is allowed when max search price is not specified. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterSpotPriceSpecified() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceSpotPrice(BigDecimal.ONE); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); } catch (Exception e) { fail("expected no exception, but " + e.getClass() + " was thrown. " + e); } }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master instance max search price is * specified The definition should be valid because max search price is allowed when no instance spot price is specified. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterMaxSearchPriceSpecified() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceMaxSearchPrice(BigDecimal.ONE); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); } catch (Exception e) { fail("expected no exception, but " + e.getClass() + " was thrown. " + e); } }
/** * Tests case where validation is run against the definition generated by createValidEmrClusterDefinition() The master instance on-demand threshold is * specified. The definition is not valid. On-demand threshold is only allowed when max search price is specified. */ @Test public void testValidateEmrClusterDefinitionConfigurationMasterOnDemandThresholdSpecified() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().getMasterInstances().setInstanceOnDemandThreshold(BigDecimal.ONE); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); fail("expected IllegalArgumentException, but no exception was thrown"); } catch (Exception e) { assertEquals("thrown exception", IllegalArgumentException.class, e.getClass()); } }
/** * Returns the master instance definition. Copies the {@link MasterInstanceDefinition} to a {@link InstanceDefinition} to keep the class type consistent * with the core instance. * * @param emrClusterDefinition the EMR cluster definition * * @return the master instance definition */ private InstanceDefinition getMasterInstanceDefinition(EmrClusterDefinition emrClusterDefinition) { MasterInstanceDefinition masterInstanceDefinition = emrClusterDefinition.getInstanceDefinitions().getMasterInstances(); InstanceDefinition instanceDefinition = new InstanceDefinition(); instanceDefinition.setInstanceType(masterInstanceDefinition.getInstanceType()); instanceDefinition.setInstanceCount(masterInstanceDefinition.getInstanceCount()); instanceDefinition.setInstanceSpotPrice(masterInstanceDefinition.getInstanceSpotPrice()); instanceDefinition.setInstanceMaxSearchPrice(masterInstanceDefinition.getInstanceMaxSearchPrice()); instanceDefinition.setInstanceOnDemandThreshold(masterInstanceDefinition.getInstanceOnDemandThreshold()); return instanceDefinition; }
/** * Returns the master instance definition. Copies the {@link MasterInstanceDefinition} to a {@link InstanceDefinition} to keep the class type consistent * with the core instance. * * @param emrClusterDefinition the EMR cluster definition * * @return the master instance definition */ private InstanceDefinition getMasterInstanceDefinition(EmrClusterDefinition emrClusterDefinition) { MasterInstanceDefinition masterInstanceDefinition = emrClusterDefinition.getInstanceDefinitions().getMasterInstances(); InstanceDefinition instanceDefinition = new InstanceDefinition(); instanceDefinition.setInstanceType(masterInstanceDefinition.getInstanceType()); instanceDefinition.setInstanceCount(masterInstanceDefinition.getInstanceCount()); instanceDefinition.setInstanceSpotPrice(masterInstanceDefinition.getInstanceSpotPrice()); instanceDefinition.setInstanceMaxSearchPrice(masterInstanceDefinition.getInstanceMaxSearchPrice()); instanceDefinition.setInstanceOnDemandThreshold(masterInstanceDefinition.getInstanceOnDemandThreshold()); return instanceDefinition; }
/** * Test cases where user sets instances to explicitly use spot for master and on-demand for core by setting the instanceSpotPrice property and not * specifying criteria, respectively. */ @Test public void testBestPriceExplicitSpotAndOnDemand() { String subnetId = SUBNET_1; MasterInstanceDefinition masterInstanceDefinition = new MasterInstanceDefinition(); masterInstanceDefinition.setInstanceCount(1); masterInstanceDefinition.setInstanceType(INSTANCE_TYPE_1); masterInstanceDefinition.setInstanceSpotPrice(ON_DEMAND); InstanceDefinition coreInstanceDefinition = new InstanceDefinition(); coreInstanceDefinition.setInstanceCount(1); coreInstanceDefinition.setInstanceType(INSTANCE_TYPE_1); InstanceDefinition taskInstanceDefinition = null; EmrClusterDefinition emrClusterDefinition = updateEmrClusterDefinitionWithBestPrice(subnetId, masterInstanceDefinition, coreInstanceDefinition, taskInstanceDefinition); assertBestPriceCriteriaRemoved(emrClusterDefinition); assertEquals("master instance bid price", ON_DEMAND, emrClusterDefinition.getInstanceDefinitions().getMasterInstances().getInstanceSpotPrice()); assertNull("core instance was not on-demand", emrClusterDefinition.getInstanceDefinitions().getCoreInstances().getInstanceSpotPrice()); }