public void leave(ProgressStatus progressStatus) throws StorageException { try { Key[] keys = overlayNode.leave(); Set<String> resourcesNames = resourceManager.getAllKeys(); log.info("Leaving..."); log.debug("Number of files to transfer: [" + resourcesNames.size() + "]"); if (!keys[0].equals(overlayNode.getKey())) { for (String name : resourcesNames) { Resource resource = resourceManager.find(name); put(resource, keys[0], false, progressStatus); resource.close(); } } resourceManager.deleteAll(); communicationManager.removeObserver(overlayNode.getKey().getValue()); } catch (OverlayException | IOException e) { log.error("Error while leaving dhash node: '" + overlayNode.getKey().toString() + "'"); } }
/** * Relocates the resources of the node. * * @param key The node where the files will be relocated. */ public void relocateAllResources(Key key, ProgressStatus progressStatus) throws StorageException { Set<String> resourcesNames = resourceManager.getAllKeys(); log.info("Relocating Files..."); log.debug("Number of files: [" + resourcesNames.size() + "]"); int filesRelocated = 0; for (String name : resourcesNames) { Resource resource = resourceManager.find(name); Key fileKey = getFileKey(name); if (!fileKey.isBetween(key, overlayNode.getKey())) { boolean relocate = put(resource, key, false, progressStatus); filesRelocated++; } } log.info("Files relocated: [" + filesRelocated + "]"); }