Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        /// <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();
                }
            }
        }