Search in sources :

Example 6 with AutoscalingPolicy

use of com.google.cloud.dataproc.v1.AutoscalingPolicy in project cdap by caskdata.

the class PredefinedAutoScaling method generatePredefinedAutoScaling.

// Builds the auto scaling policy according to cdap's predefined values.
@VisibleForTesting
AutoscalingPolicy generatePredefinedAutoScaling() {
    InstanceGroupAutoscalingPolicyConfig workerInstanceGroupAutoscalingPolicyConfig = InstanceGroupAutoscalingPolicyConfig.newBuilder().setMinInstances(PredefinedAutoScalingPolicy.WorkerConfig.MIN_INSTANCES).setMaxInstances(PredefinedAutoScalingPolicy.WorkerConfig.MAX_INSTANCES).setWeight(1).build();
    InstanceGroupAutoscalingPolicyConfig secondaryWorkerInstanceGroupAutoscalingPolicyConfig = InstanceGroupAutoscalingPolicyConfig.newBuilder().setMinInstances(PredefinedAutoScalingPolicy.SecondaryWorkerConfig.MIN_INSTANCES).setMaxInstances(PredefinedAutoScalingPolicy.SecondaryWorkerConfig.MAX_INSTANCES).setWeight(1).build();
    BasicYarnAutoscalingConfig basicYarnApplicationConfig = BasicYarnAutoscalingConfig.newBuilder().setScaleUpFactor(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.SCALE_UP_FACTOR).setScaleDownFactor(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.SCALE_DOWN_FACTOR).setScaleUpMinWorkerFraction(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.SCALE_UP_MIN_WORKER_FRACTION).setGracefulDecommissionTimeout(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.GRACEFUL_DECOMMISSION).build();
    BasicAutoscalingAlgorithm basicAutoscalingAlgorithm = BasicAutoscalingAlgorithm.newBuilder().setYarnConfig(basicYarnApplicationConfig).build();
    AutoscalingPolicy autoscalingPolicy = AutoscalingPolicy.newBuilder().setId(AUTOSCALING_POLICY_ID).setWorkerConfig(workerInstanceGroupAutoscalingPolicyConfig).setSecondaryWorkerConfig(secondaryWorkerInstanceGroupAutoscalingPolicyConfig).setBasicAlgorithm(basicAutoscalingAlgorithm).build();
    return autoscalingPolicy;
}
Also used : AutoscalingPolicy(com.google.cloud.dataproc.v1.AutoscalingPolicy) BasicAutoscalingAlgorithm(com.google.cloud.dataproc.v1.BasicAutoscalingAlgorithm) BasicYarnAutoscalingConfig(com.google.cloud.dataproc.v1.BasicYarnAutoscalingConfig) InstanceGroupAutoscalingPolicyConfig(com.google.cloud.dataproc.v1.InstanceGroupAutoscalingPolicyConfig) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 7 with AutoscalingPolicy

use of com.google.cloud.dataproc.v1.AutoscalingPolicy in project cdap by caskdata.

the class PredefinedAutoScalingTest method testFetchFailedAndCreateIsCalled.

@Test
public void testFetchFailedAndCreateIsCalled() throws IOException {
    PredefinedAutoScaling predefinedAutoScaling = new PredefinedAutoScaling(dataprocConf);
    // mock Return generated auto-scaling policy while fetching
    AutoscalingPolicyName autoscalingPolicyName = AutoscalingPolicyName.ofProjectLocationAutoscalingPolicyName(dataprocConf.getProjectId(), dataprocConf.getRegion(), PredefinedAutoScaling.AUTOSCALING_POLICY_ID);
    AutoscalingPolicy generatedPolicy = predefinedAutoScaling.generatePredefinedAutoScaling();
    AutoscalingPolicyServiceClient mockClient = PowerMockito.mock(AutoscalingPolicyServiceClient.class);
    Mockito.when(mockClient.getAutoscalingPolicy(autoscalingPolicyName)).thenThrow(NotFoundException.class);
    RegionName parent = RegionName.of(dataprocConf.getProjectId(), dataprocConf.getRegion());
    Mockito.when(mockClient.createAutoscalingPolicy(parent, generatedPolicy)).thenReturn(null);
    PredefinedAutoScaling spy = Mockito.spy(predefinedAutoScaling);
    Mockito.doReturn(mockClient).when(spy).getAutoscalingPolicyServiceClient();
    String name = spy.createPredefinedAutoScalingPolicy();
    Mockito.verify(mockClient, Mockito.times(1)).getAutoscalingPolicy(autoscalingPolicyName);
    // verify that create call is not made
    Mockito.verify(mockClient, Mockito.times(1)).createAutoscalingPolicy(parent, generatedPolicy);
    Assert.assertEquals(name, autoscalingPolicyName.toString());
}
Also used : AutoscalingPolicy(com.google.cloud.dataproc.v1.AutoscalingPolicy) RegionName(com.google.cloud.dataproc.v1.RegionName) AutoscalingPolicyName(com.google.cloud.dataproc.v1.AutoscalingPolicyName) AutoscalingPolicyServiceClient(com.google.cloud.dataproc.v1.AutoscalingPolicyServiceClient) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 8 with AutoscalingPolicy

use of com.google.cloud.dataproc.v1.AutoscalingPolicy in project cdap by caskdata.

the class PredefinedAutoScalingTest method testFetchingExistingAutoScalingPolicySuccess.

@Test
public void testFetchingExistingAutoScalingPolicySuccess() throws IOException {
    PredefinedAutoScaling predefinedAutoScaling = new PredefinedAutoScaling(dataprocConf);
    // mock Return generated auto-scaling policy while fetching
    AutoscalingPolicyName autoscalingPolicyName = AutoscalingPolicyName.ofProjectLocationAutoscalingPolicyName(dataprocConf.getProjectId(), dataprocConf.getRegion(), PredefinedAutoScaling.AUTOSCALING_POLICY_ID);
    AutoscalingPolicy generatedPolicy = predefinedAutoScaling.generatePredefinedAutoScaling();
    AutoscalingPolicyServiceClient mockClient = PowerMockito.mock(AutoscalingPolicyServiceClient.class);
    Mockito.when(mockClient.getAutoscalingPolicy(autoscalingPolicyName)).thenReturn(generatedPolicy);
    PredefinedAutoScaling spy = Mockito.spy(predefinedAutoScaling);
    Mockito.doReturn(mockClient).when(spy).getAutoscalingPolicyServiceClient();
    String name = spy.createPredefinedAutoScalingPolicy();
    Mockito.verify(mockClient, Mockito.times(1)).getAutoscalingPolicy(autoscalingPolicyName);
    // verify that create call is not made
    RegionName parent = RegionName.of(dataprocConf.getProjectId(), dataprocConf.getRegion());
    Mockito.verify(mockClient, Mockito.never()).createAutoscalingPolicy(parent, generatedPolicy);
    Assert.assertEquals(name, autoscalingPolicyName.toString());
}
Also used : AutoscalingPolicy(com.google.cloud.dataproc.v1.AutoscalingPolicy) RegionName(com.google.cloud.dataproc.v1.RegionName) AutoscalingPolicyName(com.google.cloud.dataproc.v1.AutoscalingPolicyName) AutoscalingPolicyServiceClient(com.google.cloud.dataproc.v1.AutoscalingPolicyServiceClient) Test(org.junit.Test) PrepareForTest(org.powermock.core.classloader.annotations.PrepareForTest)

Example 9 with AutoscalingPolicy

use of com.google.cloud.dataproc.v1.AutoscalingPolicy in project cdap by cdapio.

the class PredefinedAutoScaling method generatePredefinedAutoScaling.

// Builds the auto scaling policy according to cdap's predefined values.
@VisibleForTesting
AutoscalingPolicy generatePredefinedAutoScaling() {
    InstanceGroupAutoscalingPolicyConfig workerInstanceGroupAutoscalingPolicyConfig = InstanceGroupAutoscalingPolicyConfig.newBuilder().setMinInstances(PredefinedAutoScalingPolicy.WorkerConfig.MIN_INSTANCES).setMaxInstances(PredefinedAutoScalingPolicy.WorkerConfig.MAX_INSTANCES).setWeight(1).build();
    InstanceGroupAutoscalingPolicyConfig secondaryWorkerInstanceGroupAutoscalingPolicyConfig = InstanceGroupAutoscalingPolicyConfig.newBuilder().setMinInstances(PredefinedAutoScalingPolicy.SecondaryWorkerConfig.MIN_INSTANCES).setMaxInstances(PredefinedAutoScalingPolicy.SecondaryWorkerConfig.MAX_INSTANCES).setWeight(1).build();
    BasicYarnAutoscalingConfig basicYarnApplicationConfig = BasicYarnAutoscalingConfig.newBuilder().setScaleUpFactor(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.SCALE_UP_FACTOR).setScaleDownFactor(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.SCALE_DOWN_FACTOR).setScaleUpMinWorkerFraction(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.SCALE_UP_MIN_WORKER_FRACTION).setGracefulDecommissionTimeout(PredefinedAutoScalingPolicy.BasicAlgorithm.YarnConfig.GRACEFUL_DECOMMISSION).build();
    BasicAutoscalingAlgorithm basicAutoscalingAlgorithm = BasicAutoscalingAlgorithm.newBuilder().setYarnConfig(basicYarnApplicationConfig).build();
    AutoscalingPolicy autoscalingPolicy = AutoscalingPolicy.newBuilder().setId(AUTOSCALING_POLICY_ID).setWorkerConfig(workerInstanceGroupAutoscalingPolicyConfig).setSecondaryWorkerConfig(secondaryWorkerInstanceGroupAutoscalingPolicyConfig).setBasicAlgorithm(basicAutoscalingAlgorithm).build();
    return autoscalingPolicy;
}
Also used : AutoscalingPolicy(com.google.cloud.dataproc.v1.AutoscalingPolicy) BasicAutoscalingAlgorithm(com.google.cloud.dataproc.v1.BasicAutoscalingAlgorithm) BasicYarnAutoscalingConfig(com.google.cloud.dataproc.v1.BasicYarnAutoscalingConfig) InstanceGroupAutoscalingPolicyConfig(com.google.cloud.dataproc.v1.InstanceGroupAutoscalingPolicyConfig) VisibleForTesting(com.google.common.annotations.VisibleForTesting)

Example 10 with AutoscalingPolicy

use of com.google.cloud.dataproc.v1.AutoscalingPolicy in project cdap by cdapio.

the class PredefinedAutoScaling method createPredefinedAutoScalingPolicy.

// Creates the auto-scaling policy if doesn't exist.
public String createPredefinedAutoScalingPolicy() throws IOException {
    AutoscalingPolicyName autoscalingPolicyName = AutoscalingPolicyName.ofProjectLocationAutoscalingPolicyName(dataprocConf.getProjectId(), dataprocConf.getRegion(), AUTOSCALING_POLICY_ID);
    AutoscalingPolicy generatedPolicy = generatePredefinedAutoScaling();
    try (AutoscalingPolicyServiceClient autoscalingPolicyServiceClient = getAutoscalingPolicyServiceClient()) {
        // If the policy already exists meaning it is already created by cdap or in rare scenario the customer might have
        // created with a similar name. It is also possible that the user might have changed configs in the autoscaling
        // policy.
        // So, if exists -> we will fetch and check if it differs from our predefined values and LOG it
        AutoscalingPolicy existingPolicy = null;
        boolean createPolicy = false;
        try {
            existingPolicy = autoscalingPolicyServiceClient.getAutoscalingPolicy(autoscalingPolicyName);
            boolean yarnDiff = !existingPolicy.getBasicAlgorithm().getYarnConfig().equals(generatedPolicy.getBasicAlgorithm().getYarnConfig());
            boolean workerDiff = !existingPolicy.getWorkerConfig().equals(generatedPolicy.getWorkerConfig());
            boolean secondaryWorkerDiff = !existingPolicy.getSecondaryWorkerConfig().equals(generatedPolicy.getSecondaryWorkerConfig());
            if (yarnDiff || workerDiff || secondaryWorkerDiff) {
                LOG.warn("The predefined auto-scaling policy {} already exists and is having a different configuration" + "as compared to CDF/CDAP's chosen configuration", existingPolicy.getName());
            }
        } catch (NotFoundException e) {
            createPolicy = true;
            LOG.debug("The autoscaling policy doesn't exists");
        }
        if (createPolicy) {
            RegionName parent = RegionName.of(dataprocConf.getProjectId(), dataprocConf.getRegion());
            try {
                autoscalingPolicyServiceClient.createAutoscalingPolicy(parent, generatedPolicy);
            } catch (AlreadyExistsException e) {
            // no - op Race condition: in case 2 pipelines with auto-scaling are triggered together and might try to
            // create in parallel
            }
        }
    }
    return autoscalingPolicyName.toString();
}
Also used : AutoscalingPolicy(com.google.cloud.dataproc.v1.AutoscalingPolicy) AlreadyExistsException(com.google.api.gax.rpc.AlreadyExistsException) RegionName(com.google.cloud.dataproc.v1.RegionName) NotFoundException(com.google.api.gax.rpc.NotFoundException) AutoscalingPolicyName(com.google.cloud.dataproc.v1.AutoscalingPolicyName) AutoscalingPolicyServiceClient(com.google.cloud.dataproc.v1.AutoscalingPolicyServiceClient)

Aggregations

AutoscalingPolicy (com.google.cloud.dataproc.v1.AutoscalingPolicy)11 Test (org.junit.Test)9 AutoscalingPolicyServiceClient (com.google.cloud.dataproc.v1.AutoscalingPolicyServiceClient)7 RegionName (com.google.cloud.dataproc.v1.RegionName)7 AutoscalingPolicyName (com.google.cloud.dataproc.v1.AutoscalingPolicyName)6 PrepareForTest (org.powermock.core.classloader.annotations.PrepareForTest)6 ListAutoscalingPoliciesPagedResponse (com.google.cloud.dataproc.v1.AutoscalingPolicyServiceClient.ListAutoscalingPoliciesPagedResponse)3 BasicAutoscalingAlgorithm (com.google.cloud.dataproc.v1.BasicAutoscalingAlgorithm)3 BasicYarnAutoscalingConfig (com.google.cloud.dataproc.v1.BasicYarnAutoscalingConfig)3 Cluster (com.google.cloud.dataproc.v1.Cluster)3 ClusterConfig (com.google.cloud.dataproc.v1.ClusterConfig)3 ClusterOperationMetadata (com.google.cloud.dataproc.v1.ClusterOperationMetadata)3 InstanceGroupAutoscalingPolicyConfig (com.google.cloud.dataproc.v1.InstanceGroupAutoscalingPolicyConfig)3 InstanceGroupConfig (com.google.cloud.dataproc.v1.InstanceGroupConfig)3 AbstractMessage (com.google.protobuf.AbstractMessage)3 ExecutionException (java.util.concurrent.ExecutionException)3 AlreadyExistsException (com.google.api.gax.rpc.AlreadyExistsException)2 ApiException (com.google.api.gax.rpc.ApiException)2 NotFoundException (com.google.api.gax.rpc.NotFoundException)2 DiskConfig (com.google.cloud.dataproc.v1.DiskConfig)2