content: /*
   * The Alluxio Open Foundation licenses this work under the Apache License, version 2.0
   * (the "License"). You may not use this work except in compliance with the License, which is
   * available at www.apache.org/licenses/LICENSE-2.0
   *
   * This software is distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
   * either express or implied, as more fully set forth in the License.
   *
   * See the NOTICE file distributed with this work for information regarding copyright ownership.
   */
  
  package alluxio.worker;
  
  import alluxio.exception.ConnectionFailedException;
  import alluxio.master.job.JobMaster;
  import alluxio.wire.WorkerNetAddress;
  import alluxio.worker.job.JobMasterClient;
  
  import java.io.IOException;
  import java.util.concurrent.atomic.AtomicLong;
  import javax.annotation.concurrent.NotThreadSafe;
  
  /**
   * The single place to get, set, and update job worker id.
   *
   * This class should be the only source of job worker id within the same job worker process.
   */
  @NotThreadSafe
  public final class JobWorkerIdRegistry {
    /**
     * The default value to initialize job worker id, the job worker id generated by job master will
     * never be the same as this value.
     */
    public static final long INVALID_WORKER_ID = 0;
    private static final AtomicLong WORKER_ID = new AtomicLong(INVALID_WORKER_ID);
  
    private JobWorkerIdRegistry() {}
  
    /**
     * Registers with {@link JobMaster} to get a new job worker id.
     *
     * @param jobMasterClient the job master client to be used for RPC
     * @param workerAddress current worker address
     * @throws IOException when fails to get a new worker id
     * @throws ConnectionFailedException if network connection failed
     */
    public static void registerWorker(JobMasterClient jobMasterClient, WorkerNetAddress workerAddress)
        throws IOException, ConnectionFailedException {
      WORKER_ID.set(jobMasterClient.registerWorker(workerAddress));
    }
  
    /**
     * @return job worker id, 0 is invalid job worker id, representing that the job worker hasn't
     *         been registered with job master
     */
    public static Long getWorkerId() {
      return WORKER_ID.get();
    }
  }
  