private void DeleteReplica(ReplicaInfo replicaToDelete) { // Delete the files on disk. Failure here is okay. FilePath blockFile = replicaToDelete.GetBlockFile(); if (!blockFile.Delete()) { Log.Warn("Failed to delete block file " + blockFile); } FilePath metaFile = replicaToDelete.GetMetaFile(); if (!metaFile.Delete()) { Log.Warn("Failed to delete meta file " + metaFile); } }
internal static ReplicaInfo SelectReplicaToDelete(ReplicaInfo replica1, ReplicaInfo replica2) { ReplicaInfo replicaToKeep; ReplicaInfo replicaToDelete; // it's the same block so don't ever delete it, even if GS or size // differs. caller should keep the one it just discovered on disk if (replica1.GetBlockFile().Equals(replica2.GetBlockFile())) { return(null); } if (replica1.GetGenerationStamp() != replica2.GetGenerationStamp()) { replicaToKeep = replica1.GetGenerationStamp() > replica2.GetGenerationStamp() ? replica1 : replica2; } else { if (replica1.GetNumBytes() != replica2.GetNumBytes()) { replicaToKeep = replica1.GetNumBytes() > replica2.GetNumBytes() ? replica1 : replica2; } else { if (replica1.GetVolume().IsTransientStorage() && !replica2.GetVolume().IsTransientStorage ()) { replicaToKeep = replica2; } else { replicaToKeep = replica1; } } } replicaToDelete = (replicaToKeep == replica1) ? replica2 : replica1; if (Log.IsDebugEnabled()) { Log.Debug("resolveDuplicateReplicas decide to keep " + replicaToKeep + ". Will try to delete " + replicaToDelete); } return(replicaToDelete); }
/// <exception cref="System.IO.IOException"/> private static void CreateUnlinkTmpFile(ReplicaInfo replicaInfo, bool changeBlockFile , bool isRename) { FilePath src; if (changeBlockFile) { src = replicaInfo.GetBlockFile(); } else { src = replicaInfo.GetMetaFile(); } FilePath dst = DatanodeUtil.GetUnlinkTmpFile(src); if (isRename) { src.RenameTo(dst); } else { FileInputStream @in = new FileInputStream(src); try { FileOutputStream @out = new FileOutputStream(dst); try { IOUtils.CopyBytes(@in, @out, 1); } finally { @out.Close(); } } finally { @in.Close(); } } }