public void run()

in projects/dataproc-trino-autoscaler/src/main/java/com/google/cloud/solutions/trinoscaler/gcp/DataprocInstanceShutdownService.java [150:202]


  public void run() {

    var instancesToDelete = new ArrayList<String>();
    instanceTerminationQueue.drainTo(instancesToDelete);

    if (instancesToDelete.isEmpty()) {
      logger.atInfo().log("No workers to terminate");
      return;
    }

    logger.atInfo().log("Terminating workers: %s", instancesToDelete);

    try {
      var dataprocInstanceDeleteRequest =
          new Request.Builder()
              .url(
                  HOSTNAME
                      + String.format(
                          ENDPOINT,
                          clusterInformation.projectId(),
                          clusterInformation.region(),
                          clusterInformation.name()))
              .post(
                  RequestBody.create(
                      JsonFormat.printer()
                          .print(
                              RepairClusterRequest.newBuilder()
                                  .addNodePools(
                                      NodePool.newBuilder()
                                          .addAllInstanceNames(instancesToDelete)
                                          .setId(NodePoolType.SECONDARY_WORKER_POOL)
                                          .setRepairAction(RepairAction.DELETE))
                                  .build()),
                      MediaType.get("application/json")))
              .addHeader("Authorization", "Bearer " + credentialsProvider.create().getTokenValue())
              .build();

      try (var response =
          okHttpClientFactory.create().newCall(dataprocInstanceDeleteRequest).execute()) {

        logger.atInfo().log(
            "Start Cluster repair delete for: %s %n Operation Id: %s",
            instancesToDelete, response.body().string());
      }

    } catch (InvalidProtocolBufferException invalidProtoException) {
      logger.atSevere().withCause(invalidProtoException).log("invalid proto during request");
    } catch (IOException ioException) {
      logger.atSevere().withCause(ioException).log(
          "Error cluster repair-delete: %s", instancesToDelete);
      instancesToDelete.forEach(instanceTerminationQueue::offer);
    }
  }