async executeScalingRequest()

in projects/alloydb-autoscaler/src/autoscaler-core/scaler/scaler-builder.ts [211:278]


  async executeScalingRequest(
    instance: ScalableInstanceWithData,
    payloadLogger: pino.Logger,
    stateStore: IStateStore,
    suggestedSize: number
  ): Promise<string> {
    const currentState = await stateStore.getState();
    try {
      const operationId = await this.scalerExecutor.scaleInstance(
        instance,
        suggestedSize
      );
      await stateStore.updateState({
        ...currentState,
        scalingOperationId: operationId,
        scalingRequestedSize: suggestedSize,
        lastScalingTimestamp: Date.now(),
        lastScalingCompleteTimestamp: null,
        scalingPreviousSize: instance.metadata.currentSize,
        scalingMethod: instance.scalingConfig.scalingMethod,
      });
      this.counterManager.incrementCounter(
        SCALER_COUNTER_DEFINITION_MAP.SCALING_SUCCESS.counterName,
        instance,
        {
          [COUNTER_ATTRIBUTE_NAMES.SCALING_METHOD]:
            instance.scalingConfig.scalingMethod,
          [COUNTER_ATTRIBUTE_NAMES.SCALING_DIRECTION]: getScalingDirection(
            instance,
            suggestedSize,
            instance.metadata.currentSize
          ),
        }
      );
      return 'SCALING';
    } catch (e) {
      payloadLogger.error({
        message:
          `----- ${instance.info.resourcePath}: ` +
          `Unsuccessful scaling attempt: ${e}`,
        err: e,
      });
      const scalingStatusReporter = new ScalingRequestReporter(
        payloadLogger,
        this.counterManager,
        instance,
        currentState,
        suggestedSize
      );
      await scalingStatusReporter.reportFailedScalingOperation(`${e}`);

      this.counterManager.incrementCounter(
        SCALER_COUNTER_DEFINITION_MAP.SCALING_FAILED.counterName,
        instance,
        {
          [COUNTER_ATTRIBUTE_NAMES.SCALING_FAILED_REASON]: e,
          [COUNTER_ATTRIBUTE_NAMES.SCALING_METHOD]:
            instance.scalingConfig.scalingMethod,
          [COUNTER_ATTRIBUTE_NAMES.SCALING_DIRECTION]: getScalingDirection(
            instance,
            suggestedSize,
            instance.metadata.currentSize
          ),
        }
      );
      return 'SCALING_FAILURE';
    }
  }