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 ()); }
/// <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); }
/// <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); }