Search in sources :

Example 21 with AutoScalingPolicy

use of com.netflix.titus.api.appscale.model.AutoScalingPolicy in project titus-control-plane by Netflix.

the class CassAppScalePolicyStoreTest method checkUpdates.

@Test
public void checkUpdates() throws Exception {
    Session session = cassandraCQLUnit.getSession();
    CassAppScalePolicyStore store = new CassAppScalePolicyStore(session, configuration, new DefaultRegistry());
    String jobId = UUID.randomUUID().toString();
    Observable<String> respRefId = store.storePolicy(buildAutoScalingPolicy(jobId));
    String refId = respRefId.toBlocking().first();
    Assertions.assertThat(refId).isNotNull().isNotEmpty();
    // update policyId
    String policyId = "PolicyARN";
    store.updatePolicyId(refId, policyId).await();
    String getPolicyIdQuery = "SELECT policy_id from app_scale_policy where ref_id = ?;";
    BoundStatement stmt = session.prepare(getPolicyIdQuery).bind(UUID.fromString(refId));
    ResultSet rs = session.execute(stmt);
    List<Row> rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    String policyIdStored = rows.get(0).getString(CassAppScalePolicyStore.COLUMN_POLICY_ID);
    Assertions.assertThat(policyIdStored).isEqualTo(policyId);
    // update alarmId
    String alarmId = "AlarmARM";
    store.updateAlarmId(refId, alarmId).await();
    String getAlarmIdQuery = "SELECT alarm_id from app_scale_policy where ref_id = ?;";
    stmt = session.prepare(getAlarmIdQuery).bind(UUID.fromString(refId));
    rs = session.execute(stmt);
    rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    String alarmIdStored = rows.get(0).getString(CassAppScalePolicyStore.COLUMN_ALARM_ID);
    Assertions.assertThat(alarmIdStored).isEqualTo(alarmId);
    // update policy status
    PolicyStatus status = PolicyStatus.Applied;
    store.updatePolicyStatus(refId, status).await();
    String getPolicyStatusQuery = "SELECT status from app_scale_policy where ref_id = ?;";
    stmt = session.prepare(getPolicyStatusQuery).bind(UUID.fromString(refId));
    rs = session.execute(stmt);
    rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    PolicyStatus updatedStatus = PolicyStatus.valueOf(rows.get(0).getString(CassAppScalePolicyStore.COLUMN_STATUS));
    Assertions.assertThat(updatedStatus).isEqualTo(status);
    String errorStatusMessage = "Got Trumped";
    store.updateStatusMessage(refId, errorStatusMessage).await();
    String getStatusMessageQuery = "SELECT status_message from app_scale_policy where ref_id = ?;";
    stmt = session.prepare(getStatusMessageQuery).bind(UUID.fromString(refId));
    rs = session.execute(stmt);
    rows = rs.all();
    Assertions.assertThat(rows.size()).isEqualTo(1);
    String statusMessage = rows.get(0).getString(CassAppScalePolicyStore.COLUMN_STATUS_MESSAGE);
    Assertions.assertThat(statusMessage).isEqualTo(errorStatusMessage);
    // read policy by refId
    Observable<AutoScalingPolicy> autoScalingPolicyObservable = store.retrievePolicyForRefId(refId);
    AutoScalingPolicy autoScalingPolicy = autoScalingPolicyObservable.toBlocking().first();
    Assertions.assertThat(autoScalingPolicy.getRefId()).isEqualTo(refId);
    Assertions.assertThat(autoScalingPolicy.getStatus()).isEqualTo(status);
    Assertions.assertThat(autoScalingPolicy.getAlarmId()).isEqualTo(alarmId);
    Assertions.assertThat(autoScalingPolicy.getPolicyId()).isEqualTo(policyId);
    // update alarm threshold
    AlarmConfiguration alarmConfiguration = autoScalingPolicy.getPolicyConfiguration().getAlarmConfiguration();
    double currentThreshold = alarmConfiguration.getThreshold();
    int thresholdIncrement = 10;
    AlarmConfiguration newAlarmConfiguration = AlarmConfiguration.newBuilder().withStatistic(alarmConfiguration.getStatistic()).withName(alarmConfiguration.getName()).withMetricNamespace(alarmConfiguration.getMetricNamespace()).withMetricName(alarmConfiguration.getMetricName()).withComparisonOperator(alarmConfiguration.getComparisonOperator()).withThreshold(alarmConfiguration.getThreshold() + thresholdIncrement).withPeriodSec(alarmConfiguration.getPeriodSec()).withEvaluationPeriods(alarmConfiguration.getEvaluationPeriods()).withActionsEnabled(alarmConfiguration.getActionsEnabled().get()).build();
    PolicyConfiguration newPolicyConfig = PolicyConfiguration.newBuilder().withPolicyType(autoScalingPolicy.getPolicyConfiguration().getPolicyType()).withStepScalingPolicyConfiguration(autoScalingPolicy.getPolicyConfiguration().getStepScalingPolicyConfiguration()).withName(autoScalingPolicy.getPolicyConfiguration().getName()).withPolicyType(autoScalingPolicy.getPolicyConfiguration().getPolicyType()).withAlarmConfiguration(newAlarmConfiguration).build();
    AutoScalingPolicy newPolicy = AutoScalingPolicy.newBuilder().withAutoScalingPolicy(autoScalingPolicy).withPolicyConfiguration(newPolicyConfig).build();
    store.updatePolicyConfiguration(newPolicy).await();
    autoScalingPolicyObservable = store.retrievePolicyForRefId(refId);
    AutoScalingPolicy updatedPolicy = autoScalingPolicyObservable.toBlocking().first();
    Assertions.assertThat(updatedPolicy.getPolicyConfiguration().getAlarmConfiguration().getName()).isEqualTo(newAlarmConfiguration.getName());
    Assertions.assertThat(updatedPolicy.getPolicyConfiguration().getAlarmConfiguration().getThreshold()).isEqualTo(currentThreshold + thresholdIncrement);
}
Also used : AlarmConfiguration(com.netflix.titus.api.appscale.model.AlarmConfiguration) AutoScalingPolicy(com.netflix.titus.api.appscale.model.AutoScalingPolicy) PolicyStatus(com.netflix.titus.api.appscale.model.PolicyStatus) ResultSet(com.datastax.driver.core.ResultSet) DefaultRegistry(com.netflix.spectator.api.DefaultRegistry) StepScalingPolicyConfiguration(com.netflix.titus.api.appscale.model.StepScalingPolicyConfiguration) PolicyConfiguration(com.netflix.titus.api.appscale.model.PolicyConfiguration) Row(com.datastax.driver.core.Row) BoundStatement(com.datastax.driver.core.BoundStatement) Session(com.datastax.driver.core.Session) Test(org.junit.Test) IntegrationNotParallelizableTest(com.netflix.titus.testkit.junit.category.IntegrationNotParallelizableTest)

Aggregations

AutoScalingPolicy (com.netflix.titus.api.appscale.model.AutoScalingPolicy)21 PolicyConfiguration (com.netflix.titus.api.appscale.model.PolicyConfiguration)8 StepScalingPolicyConfiguration (com.netflix.titus.api.appscale.model.StepScalingPolicyConfiguration)8 Test (org.junit.Test)7 DefaultRegistry (com.netflix.spectator.api.DefaultRegistry)6 AlarmConfiguration (com.netflix.titus.api.appscale.model.AlarmConfiguration)6 StepAdjustment (com.netflix.titus.api.appscale.model.StepAdjustment)4 BoundStatement (com.datastax.driver.core.BoundStatement)3 ResultSet (com.datastax.driver.core.ResultSet)3 Row (com.datastax.driver.core.Row)3 Session (com.datastax.driver.core.Session)3 PolicyStatus (com.netflix.titus.api.appscale.model.PolicyStatus)3 PolicyType (com.netflix.titus.api.appscale.model.PolicyType)3 V3JobOperations (com.netflix.titus.api.jobmanager.service.V3JobOperations)3 TitusRuntime (com.netflix.titus.common.runtime.TitusRuntime)3 InMemoryPolicyStore (com.netflix.titus.runtime.store.v3.memory.InMemoryPolicyStore)3 IntegrationNotParallelizableTest (com.netflix.titus.testkit.junit.category.IntegrationNotParallelizableTest)3 List (java.util.List)3 Optional (java.util.Optional)3 UUID (java.util.UUID)3