/*
* 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.heartbeat;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.annotation.concurrent.ThreadSafe;
/**
* This is a static class for storing and retrieving heartbeat related information.
*/
@ThreadSafe
public final class HeartbeatContext {
private static Map<String, Class<? extends HeartbeatTimer>> sTimerClasses;
// Names of different heartbeat timer classes.
public static final Class<? extends HeartbeatTimer> SCHEDULED_TIMER_CLASS = ScheduledTimer.class;
public static final Class<? extends HeartbeatTimer> SLEEPING_TIMER_CLASS = SleepingTimer.class;
// Names of different heartbeat executors.
public static final String MASTER_CHECKPOINT_SCHEDULING = "Master Checkpoint Scheduling";
public static final String MASTER_FILE_RECOMPUTATION = "Master File Recomputation";
public static final String MASTER_LOST_FILES_DETECTION = "Master Lost Files Detection";
public static final String MASTER_LOST_WORKER_DETECTION = "Master Lost Worker Detection";
public static final String MASTER_TTL_CHECK = "Master TTL Check";
public static final String WORKER_BLOCK_SYNC = "Worker Block Sync";
public static final String WORKER_CLIENT = "Worker Client";
public static final String WORKER_FILESYSTEM_MASTER_SYNC = "Worker FileSystemMaster Sync";
public static final String WORKER_PIN_LIST_SYNC = "Worker Pin List Sync";
public static final String WORKER_SPACE_RESERVER = "Worker Space Reserver";
static {
sTimerClasses = new HashMap<>();
sTimerClasses.put(MASTER_CHECKPOINT_SCHEDULING, SLEEPING_TIMER_CLASS);
sTimerClasses.put(MASTER_FILE_RECOMPUTATION, SLEEPING_TIMER_CLASS);
sTimerClasses.put(MASTER_LOST_FILES_DETECTION, SLEEPING_TIMER_CLASS);
sTimerClasses.put(MASTER_LOST_WORKER_DETECTION, SLEEPING_TIMER_CLASS);
sTimerClasses.put(MASTER_TTL_CHECK, SLEEPING_TIMER_CLASS);
sTimerClasses.put(WORKER_FILESYSTEM_MASTER_SYNC, SLEEPING_TIMER_CLASS);
sTimerClasses.put(WORKER_BLOCK_SYNC, SLEEPING_TIMER_CLASS);
sTimerClasses.put(WORKER_CLIENT, SLEEPING_TIMER_CLASS);
sTimerClasses.put(WORKER_PIN_LIST_SYNC, SLEEPING_TIMER_CLASS);
sTimerClasses.put(WORKER_SPACE_RESERVER, SLEEPING_TIMER_CLASS);
}
private HeartbeatContext() {} // to prevent initialization
/**
* @return the mapping from executor thread names to timer classes
*/
public static synchronized Map<String, Class<? extends HeartbeatTimer>> getTimerClasses() {
return Collections.unmodifiableMap(sTimerClasses);
}
/**
* @param name a name of a heartbeat executor thread
* @return the timer class to use for the executor thread
*/
public static synchronized Class<? extends HeartbeatTimer> getTimerClass(String name) {
return sTimerClasses.get(name);
}
/**
* Sets the timer class to use for the specified executor thread.
*
* This method should only be used by tests.
*
* @param name a name of a heartbeat executor thread
* @param timerClass the timer class to use for the executor thread
*/
@SuppressWarnings("unused")
private static synchronized void setTimerClass(String name,
Class<? extends HeartbeatTimer> timerClass) {
if (timerClass == null) {
sTimerClasses.remove(name);
} else {
sTimerClasses.put(name, timerClass);
}
}
}