/** * 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 Object copyTo(ObjectLocator locator, Object target, CopyStrategy2 strategy) { final Object draftCopy = ((target == null)?createNewInstance():target); if (draftCopy instanceof InstanceDefinitions) { final InstanceDefinitions copy = ((InstanceDefinitions) draftCopy); if (masterInstancesShouldBeCopiedAndSet == Boolean.TRUE) { MasterInstanceDefinition sourceMasterInstances; sourceMasterInstances = this.getMasterInstances(); MasterInstanceDefinition copyMasterInstances = ((MasterInstanceDefinition) strategy.copy(LocatorUtils.property(locator, "masterInstances", sourceMasterInstances), sourceMasterInstances, (this.masterInstances!= null))); copy.setMasterInstances(copyMasterInstances); } else { if (masterInstancesShouldBeCopiedAndSet == Boolean.FALSE) { if (coreInstancesShouldBeCopiedAndSet == Boolean.TRUE) { InstanceDefinition sourceCoreInstances; sourceCoreInstances = this.getCoreInstances(); InstanceDefinition copyCoreInstances = ((InstanceDefinition) strategy.copy(LocatorUtils.property(locator, "coreInstances", sourceCoreInstances), sourceCoreInstances, (this.coreInstances!= null))); copy.setCoreInstances(copyCoreInstances); } else { if (coreInstancesShouldBeCopiedAndSet == Boolean.FALSE) { if (taskInstancesShouldBeCopiedAndSet == Boolean.TRUE) { InstanceDefinition sourceTaskInstances; sourceTaskInstances = this.getTaskInstances(); InstanceDefinition copyTaskInstances = ((InstanceDefinition) strategy.copy(LocatorUtils.property(locator, "taskInstances", sourceTaskInstances), sourceTaskInstances, (this.taskInstances!= null))); copy.setTaskInstances(copyTaskInstances); } else { if (taskInstancesShouldBeCopiedAndSet == Boolean.FALSE) {
/** * Create an instance of {@link InstanceDefinitions } * */ public InstanceDefinitions createInstanceDefinitions() { return new InstanceDefinitions(); }
/** * 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())); } }
Assert.notNull(emrClusterDefinition.getInstanceDefinitions().getMasterInstances(), "Master instances must be specified."); validateMasterInstanceDefinition(emrClusterDefinition.getInstanceDefinitions().getMasterInstances()); if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances() != null) validateInstanceDefinition("core", emrClusterDefinition.getInstanceDefinitions().getCoreInstances(), 0); if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances().getInstanceCount() <= 0) emrClusterDefinition.getInstanceDefinitions().setCoreInstances(null); if (emrClusterDefinition.getInstanceDefinitions().getTaskInstances() != null) validateInstanceDefinition("task", emrClusterDefinition.getInstanceDefinitions().getTaskInstances(), 1); if (maxEmrInstanceCount > 0) int instancesRequested = emrClusterDefinition.getInstanceDefinitions().getMasterInstances().getInstanceCount(); if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances() != null) instancesRequested += emrClusterDefinition.getInstanceDefinitions().getCoreInstances().getInstanceCount(); if (emrClusterDefinition.getInstanceDefinitions().getTaskInstances() != null) instancesRequested += emrClusterDefinition.getInstanceDefinitions().getTaskInstances().getInstanceCount();
/** * Creates a new EMR cluster definition using the specified parameters, updates it with best price algorithm, and returns the definition. * * @param subnetId Subnet ID. Optional. * @param masterInstanceDefinition The master instance definition * @param coreInstanceDefinition The core instance definition * @param taskInstanceDefinition The task instance definition. Optional. * * @return Updated EMR cluster definition. */ private EmrClusterDefinition updateEmrClusterDefinitionWithBestPrice(String subnetId, MasterInstanceDefinition masterInstanceDefinition, InstanceDefinition coreInstanceDefinition, InstanceDefinition taskInstanceDefinition) { EmrClusterDefinition emrClusterDefinition = new EmrClusterDefinition(); emrClusterDefinition.setSubnetId(subnetId); InstanceDefinitions instanceDefinitions = new InstanceDefinitions(); instanceDefinitions.setMasterInstances(masterInstanceDefinition); instanceDefinitions.setCoreInstances(coreInstanceDefinition); instanceDefinitions.setTaskInstances(taskInstanceDefinition); emrClusterDefinition.setInstanceDefinitions(instanceDefinitions); emrPricingHelper.updateEmrClusterDefinitionWithBestPrice(new EmrClusterAlternateKeyDto(), emrClusterDefinition, new AwsParamsDto(NO_AWS_ACCESS_KEY, NO_AWS_SECRET_KEY, NO_SESSION_TOKEN, NO_HTTP_PROXY_HOST, NO_HTTP_PROXY_PORT, AWS_REGION_NAME_US_EAST_1)); return emrClusterDefinition; } }
emrClusterDefinitionConfiguration.getInstanceDefinitions().setMasterInstances(null); emrClusterDefinitionService .createEmrClusterDefinition(createEmrClusterDefinitionCreateRequest(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getMasterInstances().setInstanceCount(0); emrClusterDefinitionService .createEmrClusterDefinition(createEmrClusterDefinitionCreateRequest(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getMasterInstances().setInstanceType(BLANK_TEXT); emrClusterDefinitionService .createEmrClusterDefinition(createEmrClusterDefinitionCreateRequest(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getCoreInstances().setInstanceCount(-1); emrClusterDefinitionService .createEmrClusterDefinition(createEmrClusterDefinitionCreateRequest(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getCoreInstances().setInstanceType(BLANK_TEXT); emrClusterDefinitionService .createEmrClusterDefinition(createEmrClusterDefinitionCreateRequest(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME, emrClusterDefinitionConfiguration));
InstanceDefinitions instanceDefinitions = new InstanceDefinitions(); instanceDefinitions.setMasterInstances( new MasterInstanceDefinition(10, "masterInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD)); instanceDefinitions.setCoreInstances( new InstanceDefinition(20, "coreInstanceType", NO_EMR_CLUSTER_DEFINITION_EBS_CONFIGURATION, NO_INSTANCE_SPOT_PRICE, NO_INSTANCE_MAX_SEARCH_PRICE, NO_INSTANCE_ON_DEMAND_THRESHOLD));
/** * 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()); } }
@Test public void testCreateEmrClusterOverrideExistingCoreInstanceToNullAssertSuccess() throws Exception { // Create the namespace entity. NamespaceEntity namespaceEntity = namespaceDaoTestHelper.createNamespaceEntity(NAMESPACE); String definitionXml = IOUtils.toString(resourceLoader.getResource(EMR_CLUSTER_DEFINITION_XML_FILE_WITH_CLASSPATH).getInputStream()); EmrClusterDefinition emrClusterDefinition = xmlHelper.unmarshallXmlToObject(EmrClusterDefinition.class, definitionXml); emrClusterDefinition.getInstanceDefinitions().getCoreInstances().setInstanceCount(1); emrClusterDefinitionDaoTestHelper .createEmrClusterDefinitionEntity(namespaceEntity, EMR_CLUSTER_DEFINITION_NAME, xmlHelper.objectToXml(emrClusterDefinition)); // Create a new EMR cluster create request EmrClusterCreateRequest request = getNewEmrClusterCreateRequest(); EmrClusterDefinition emrClusterDefinitionOverride = new EmrClusterDefinition(); emrClusterDefinitionOverride.setInstanceDefinitions(emrClusterDefinition.getInstanceDefinitions()); emrClusterDefinitionOverride.getInstanceDefinitions().setCoreInstances(null); request.setEmrClusterDefinitionOverride(emrClusterDefinitionOverride); EmrCluster emrClusterCreateResponse = emrService.createCluster(request); assertNull(emrClusterCreateResponse.getEmrClusterDefinition().getInstanceDefinitions().getCoreInstances()); }
/** * Returns the core instance definition. * * @param emrClusterDefinition the EMR cluster definition * * @return the core instance definition */ private InstanceDefinition getCoreInstanceDefinition(EmrClusterDefinition emrClusterDefinition) { InstanceDefinition coreInstances = emrClusterDefinition.getInstanceDefinitions().getCoreInstances(); if (coreInstances != null && coreInstances.getInstanceCount() <= 0) { coreInstances = null; } return coreInstances; }
/** * Returns the task instance definition. Returns null if no task definition is specified. * * @param emrClusterDefinition the EMR cluster definition * * @return the task instance definition, or null */ private InstanceDefinition getTaskInstanceDefinition(EmrClusterDefinition emrClusterDefinition) { return emrClusterDefinition.getInstanceDefinitions().getTaskInstances(); }
@Test public void testValidateEmrClusterDefinitionConfigurationCoreInstancesNotSpecified() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().setCoreInstances(null); 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 task instance is not specified. The * definition should be valid because task instance is optional. */ @Test public void testValidateEmrClusterDefinitionConfigurationTaskInstanceDefinitionNotSpecified() { EmrClusterDefinition emrClusterDefinition = createValidEmrClusterDefinition(); emrClusterDefinition.getInstanceDefinitions().setTaskInstances(null); try { emrClusterDefinitionHelper.validateEmrClusterDefinitionConfiguration(emrClusterDefinition); } catch (Exception e) { fail("expected no exception, but " + e.getClass() + " was thrown. " + e); } }
public String toString() { final ToStringStrategy2 strategy = JAXBToStringStrategy.INSTANCE; final StringBuilder buffer = new StringBuilder(); append(null, buffer, strategy); return buffer.toString(); }
public StringBuilder append(ObjectLocator locator, StringBuilder buffer, ToStringStrategy2 strategy) { strategy.appendStart(locator, this, buffer); appendFields(locator, buffer, strategy); strategy.appendEnd(locator, this, buffer); 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())); } }
Assert.notNull(emrClusterDefinition.getInstanceDefinitions().getMasterInstances(), "Master instances must be specified."); validateMasterInstanceDefinition(emrClusterDefinition.getInstanceDefinitions().getMasterInstances()); if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances() != null) validateInstanceDefinition("core", emrClusterDefinition.getInstanceDefinitions().getCoreInstances(), 0); if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances().getInstanceCount() <= 0) emrClusterDefinition.getInstanceDefinitions().setCoreInstances(null); if (emrClusterDefinition.getInstanceDefinitions().getTaskInstances() != null) validateInstanceDefinition("task", emrClusterDefinition.getInstanceDefinitions().getTaskInstances(), 1); if (maxEmrInstanceCount > 0) int instancesRequested = emrClusterDefinition.getInstanceDefinitions().getMasterInstances().getInstanceCount(); if (emrClusterDefinition.getInstanceDefinitions().getCoreInstances() != null) instancesRequested += emrClusterDefinition.getInstanceDefinitions().getCoreInstances().getInstanceCount(); if (emrClusterDefinition.getInstanceDefinitions().getTaskInstances() != null) instancesRequested += emrClusterDefinition.getInstanceDefinitions().getTaskInstances().getInstanceCount();
InstanceDefinitions instanceDefinitions = new InstanceDefinitions(); instanceDefinitions.setMasterInstances(masterInstanceDefinition); instanceDefinitions.setCoreInstances(coreInstanceDefinition); instanceDefinitions.setTaskInstances(taskInstanceDefinition);
emrClusterDefinitionConfiguration.getInstanceDefinitions().setMasterInstances(null); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getMasterInstances().setInstanceCount(0); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getMasterInstances().setInstanceType(BLANK_TEXT); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getCoreInstances().setInstanceCount(-1); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration)); emrClusterDefinitionConfiguration.getInstanceDefinitions().getCoreInstances().setInstanceType(BLANK_TEXT); emrClusterDefinitionService.updateEmrClusterDefinition(new EmrClusterDefinitionKey(NAMESPACE, EMR_CLUSTER_DEFINITION_NAME), createEmrClusterDefinitionUpdateRequest(emrClusterDefinitionConfiguration));