/*
* 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.block;
import alluxio.heartbeat.HeartbeatExecutor;
import alluxio.worker.file.FileSystemMasterClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Set;
import javax.annotation.concurrent.NotThreadSafe;
/**
* PinListSync periodically syncs the set of pinned inodes from master, and saves the new pinned
* inodes to the {@link BlockWorker}.
*
*/
@NotThreadSafe
public final class PinListSync implements HeartbeatExecutor {
private static final Logger LOG = LoggerFactory.getLogger(PinListSync.class);
/** Block worker handle responsible for interacting with Alluxio and UFS storage. */
private final BlockWorker mBlockWorker;
/** Client for all master communication. */
private FileSystemMasterClient mMasterClient;
/**
* Creates a new instance of {@link PinListSync}.
*
* @param blockWorker the block worker handle
* @param masterClient the Alluxio master client
*/
public PinListSync(BlockWorker blockWorker, FileSystemMasterClient masterClient) {
mBlockWorker = blockWorker;
mMasterClient = masterClient;
}
@Override
public void heartbeat() {
// Send the sync
try {
Set<Long> pinList = mMasterClient.getPinList();
mBlockWorker.updatePinList(pinList);
} catch (Exception e) {
// An error occurred, retry after 1 second or error if sync timeout is reached
LOG.warn("Failed to receive pinlist: {}", e.getMessage());
LOG.debug("Exception: ", e);
// TODO(gene): Add this method to AbstractMasterClient.
// mMasterClient.resetConnection();
}
}
@Override
public void close() {
// Nothing to clean up
}
}