/** * @param fsCommand wire type * @return proto representation of given wire type */ public static alluxio.grpc.FileSystemCommand toProto(FileSystemCommand fsCommand) { return alluxio.grpc.FileSystemCommand.newBuilder() .setCommandType(toProto(fsCommand.getCommandType())) .setCommandOptions(FileSystemCommandOptions.newBuilder() .setPersistOptions(PersistCommandOptions.newBuilder().addAllPersistFiles( fsCommand.getCommandOptions().getPersistOptions().getFilesToPersist().stream() .map(GrpcUtils::toProto).collect(Collectors.toList())))) .build(); }
@Override public FileSystemCommand workerHeartbeat(long workerId, List<Long> persistedFiles, WorkerHeartbeatContext context) throws IOException { List<String> persistedUfsFingerprints = context.getOptions().getPersistedFileFingerprintsList(); boolean hasPersistedFingerprints = persistedUfsFingerprints.size() == persistedFiles.size(); for (int i = 0; i < persistedFiles.size(); i++) { long fileId = persistedFiles.get(i); String ufsFingerprint = hasPersistedFingerprints ? persistedUfsFingerprints.get(i) : Constants.INVALID_UFS_FINGERPRINT; try { // Permission checking for each file is performed inside setAttribute setAttribute(getPath(fileId), SetAttributeContext .defaults(SetAttributePOptions.newBuilder().setPersisted(true)) .setUfsFingerprint(ufsFingerprint)); } catch (FileDoesNotExistException | AccessControlException | InvalidPathException e) { LOG.error("Failed to set file {} as persisted, because {}", fileId, e); } } // TODO(zac) Clean up master and worker code since this is taken care of by job service now. // Worker should not persist any files. Instead, files are persisted through job service. List<PersistFile> filesToPersist = new ArrayList<>(); FileSystemCommandOptions commandOptions = new FileSystemCommandOptions(); commandOptions.setPersistOptions(new PersistCommandOptions(filesToPersist)); return new FileSystemCommand(CommandType.Persist, commandOptions); }
/** * Tests the {@link FileSystemMaster#workerHeartbeat} method. */ @Test public void workerHeartbeat() throws Exception { long blockId = createFileWithSingleBlock(ROOT_FILE_URI); long fileId = mFileSystemMaster.getFileId(ROOT_FILE_URI); mFileSystemMaster.scheduleAsyncPersistence(ROOT_FILE_URI); FileSystemCommand command = mFileSystemMaster .workerHeartbeat(mWorkerId1, Lists.newArrayList(fileId), WorkerHeartbeatContext.defaults()); assertEquals(alluxio.wire.CommandType.Persist, command.getCommandType()); assertEquals(0, command.getCommandOptions().getPersistOptions().getFilesToPersist().size()); }