use of alluxio.exception.status.UnavailableException in project alluxio by Alluxio.
the class ClientMasterSync method loadConf.
/**
* Loads configuration.
*
* @return true if successfully loaded configuration
*/
private boolean loadConf() {
try {
InetSocketAddress masterAddr = mInquireClient.getPrimaryRpcAddress();
mContext.loadConf(masterAddr, true, false);
} catch (UnavailableException e) {
SAMPLING_LOG.error("Failed to get master address during initialization", e);
return false;
} catch (AlluxioStatusException ae) {
SAMPLING_LOG.error("Failed to load configuration from meta master during initialization", ae);
return false;
}
return true;
}
use of alluxio.exception.status.UnavailableException in project alluxio by Alluxio.
the class RetryHandlingMetricsMasterClient method heartbeat.
@Override
public void heartbeat(final List<ClientMetrics> metrics) throws IOException {
connect();
try {
MetricsHeartbeatPRequest.Builder request = MetricsHeartbeatPRequest.newBuilder();
request.setOptions(MetricsHeartbeatPOptions.newBuilder().addAllClientMetrics(metrics).build());
mClient.metricsHeartbeat(request.build());
} catch (io.grpc.StatusRuntimeException e) {
disconnect();
throw new UnavailableException(e);
}
}
use of alluxio.exception.status.UnavailableException in project alluxio by Alluxio.
the class AlluxioBlockStoreTest method getInStreamInAlluxioWhenCreateStreamIsFailed.
@Test
public void getInStreamInAlluxioWhenCreateStreamIsFailed() throws Exception {
int workerCount = 5;
boolean persisted = false;
int[] blockLocations = new int[] { 2, 3, 4 };
Map<Integer, Long> failedWorkers = ImmutableMap.of(0, 3L, 1, 1L, 3, 2L);
int expectedWorker = 2;
WorkerNetAddress[] workers = new WorkerNetAddress[workerCount];
for (int i = 0; i < workers.length - 1; i++) {
workers[i] = new WorkerNetAddress().setHost(String.format("worker-%d", i));
}
workers[workers.length - 1] = new WorkerNetAddress().setHost(WORKER_HOSTNAME_LOCAL);
when(mContext.acquireBlockWorkerClient(WORKER_NET_ADDRESS_LOCAL)).thenThrow(new UnavailableException("failed to connect to " + WORKER_NET_ADDRESS_LOCAL.getHost()));
BlockInfo info = new BlockInfo().setBlockId(BLOCK_ID).setLocations(Arrays.stream(blockLocations).mapToObj(x -> new BlockLocation().setWorkerAddress(workers[x])).collect(Collectors.toList()));
URIStatus dummyStatus = new URIStatus(new FileInfo().setPersisted(persisted).setBlockIds(Collections.singletonList(BLOCK_ID)).setFileBlockInfos(Collections.singletonList(new FileBlockInfo().setBlockInfo(info))));
BlockLocationPolicy mockPolicy = mock(BlockLocationPolicy.class);
when(mockPolicy.getWorker(any())).thenAnswer(arg -> arg.getArgument(0, GetWorkerOptions.class).getBlockWorkerInfos().iterator().next().getNetAddress());
InStreamOptions options = new InStreamOptions(dummyStatus, FileSystemOptions.openFileDefaults(sConf), sConf);
options.setUfsReadLocationPolicy(mockPolicy);
when(mMasterClient.getBlockInfo(BLOCK_ID)).thenReturn(info);
when(mContext.getCachedWorkers()).thenReturn(Arrays.stream(workers).map(x -> new BlockWorkerInfo(x, -1, -1)).collect((Collectors.toList())));
Map<WorkerNetAddress, Long> failedWorkerAddresses = failedWorkers.entrySet().stream().map(x -> new AbstractMap.SimpleImmutableEntry<>(workers[x.getKey()], x.getValue())).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
BlockInStream inStream = null;
int i = 2;
while (i-- > 0) {
try {
inStream = mBlockStore.getInStream(BLOCK_ID, options, failedWorkerAddresses);
} catch (Exception e) {
// do nothing
}
}
assertEquals(workers[expectedWorker], inStream.getAddress());
}
use of alluxio.exception.status.UnavailableException in project alluxio by Alluxio.
the class AbstractClient method retryRPCInternal.
private synchronized <V> V retryRPCInternal(RetryPolicy retryPolicy, RpcCallable<V> rpc, Supplier<Void> onRetry) throws AlluxioStatusException {
Exception ex = null;
while (retryPolicy.attempt()) {
if (mClosed) {
throw new FailedPreconditionException("Client is closed");
}
connect();
try {
return rpc.call();
} catch (StatusRuntimeException e) {
AlluxioStatusException se = AlluxioStatusException.fromStatusRuntimeException(e);
if (se.getStatusCode() == Status.Code.UNAVAILABLE || se.getStatusCode() == Status.Code.CANCELLED || se.getStatusCode() == Status.Code.UNAUTHENTICATED || e.getCause() instanceof UnresolvedAddressException) {
ex = se;
} else {
throw se;
}
}
LOG.debug("Rpc failed ({}): ", retryPolicy.getAttemptCount(), ex);
onRetry.get();
disconnect();
}
throw new UnavailableException("Failed after " + retryPolicy.getAttemptCount() + " attempts: " + ex.toString(), ex);
}
use of alluxio.exception.status.UnavailableException in project alluxio by Alluxio.
the class ConfigHashSync method heartbeat.
@Override
public synchronized void heartbeat() {
if (!mContext.getClientContext().getClusterConf().clusterDefaultsLoaded()) {
// Wait until the initial cluster defaults are loaded.
return;
}
ConfigHash hash;
try {
hash = mClient.getConfigHash();
} catch (IOException e) {
LOG.error("Failed to heartbeat to meta master to get configuration hash:", e);
// Disconnect to reconnect in the next heartbeat.
mClient.disconnect();
return;
}
boolean isClusterConfUpdated = !hash.getClusterConfigHash().equals(mContext.getClientContext().getClusterConfHash());
boolean isPathConfUpdated = !hash.getPathConfigHash().equals(mContext.getClientContext().getPathConfHash());
if (isClusterConfUpdated || isPathConfUpdated) {
try {
mContext.reinit(isClusterConfUpdated, isPathConfUpdated);
mException = null;
} catch (UnavailableException e) {
LOG.error("Failed to reinitialize FileSystemContext:", e);
// Meta master might be temporarily unavailable, retry in next heartbeat.
} catch (IOException e) {
LOG.error("Failed to close FileSystemContext, interrupting the heartbeat thread", e);
mException = e;
// If the heartbeat keeps running, the context might be reinitialized successfully in the
// next heartbeat, then the resources that are not closed in the old context are leaked.
Thread.currentThread().interrupt();
}
}
}
Aggregations