Ejemplo n.º 1
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);
        }
 private static void AssertEquals(ReplicaInfo originalInfo, ReplicaRecoveryInfo recoveryInfo
                                  )
 {
     NUnit.Framework.Assert.AreEqual(originalInfo.GetBlockId(), recoveryInfo.GetBlockId
                                         ());
     NUnit.Framework.Assert.AreEqual(originalInfo.GetGenerationStamp(), recoveryInfo.GetGenerationStamp
                                         ());
     NUnit.Framework.Assert.AreEqual(originalInfo.GetBytesOnDisk(), recoveryInfo.GetNumBytes
                                         ());
     NUnit.Framework.Assert.AreEqual(originalInfo.GetState(), recoveryInfo.GetOriginalReplicaState
                                         ());
 }
Ejemplo n.º 3
0
        /// <summary>
        /// Get the meta information of the replica that matches both block id
        /// and generation stamp
        /// </summary>
        /// <param name="bpid">block pool id</param>
        /// <param name="block">block with its id as the key</param>
        /// <returns>the replica's meta information</returns>
        /// <exception cref="System.ArgumentException">if the input block or block pool is null
        ///     </exception>
        internal virtual ReplicaInfo Get(string bpid, Block block)
        {
            CheckBlockPool(bpid);
            CheckBlock(block);
            ReplicaInfo replicaInfo = Get(bpid, block.GetBlockId());

            if (replicaInfo != null && block.GetGenerationStamp() == replicaInfo.GetGenerationStamp
                    ())
            {
                return(replicaInfo);
            }
            return(null);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// Remove the replica's meta information from the map that matches
 /// the input block's id and generation stamp
 /// </summary>
 /// <param name="bpid">block pool id</param>
 /// <param name="block">block with its id as the key</param>
 /// <returns>the removed replica's meta information</returns>
 /// <exception cref="System.ArgumentException">if the input block is null</exception>
 internal virtual ReplicaInfo Remove(string bpid, Block block)
 {
     CheckBlockPool(bpid);
     CheckBlock(block);
     lock (mutex)
     {
         IDictionary <long, ReplicaInfo> m = map[bpid];
         if (m != null)
         {
             long        key         = Sharpen.Extensions.ValueOf(block.GetBlockId());
             ReplicaInfo replicaInfo = m[key];
             if (replicaInfo != null && block.GetGenerationStamp() == replicaInfo.GetGenerationStamp
                     ())
             {
                 return(Sharpen.Collections.Remove(m, key));
             }
         }
     }
     return(null);
 }