// Create ReplicaEntity from Query.Replica and add it to this node.
        public ReplicaEntity AddReplica(Replica replica)
        {
            ReplicaEntity replicaEntity = new ReplicaEntity(replica, this);

            this.ReplicaList.Add(replicaEntity);
            return(replicaEntity);
        }
        private bool SelectReadySecondary(ReplicaEntity replica)
        {
            var statefulReplica = replica.Replica as StatefulServiceReplica;

            ReleaseAssert.AssertIf(statefulReplica == null, "Replica type should be stateful");
            return(statefulReplica.ReplicaRole == ReplicaRole.ActiveSecondary && replica.IsAvailableToFault);
        }
        public CodePackageEntity GetCodePackagEntityForReplica(ReplicaEntity replicaEntity)
        {
            CodePackageEntity codePackageEntity = null;
            var codePackagesOnNode = this.CodePackages.Where(cp => cp.NodeName == replicaEntity.Replica.NodeName);

            foreach (var codePackage in codePackagesOnNode)
            {
                var partitionEntity = codePackage.DeployedPartitions.FirstOrDefault(p => (p.Guid == replicaEntity.ParentPartitionEntity.Guid));
                if (partitionEntity != null)
                {
                    codePackageEntity = codePackage;
                }
            }

            return(codePackageEntity);
        }
        private void MarkPartitionAsUnsafe(PartitionEntity partitionEntity)
        {
            foreach (var r in partitionEntity.ReplicaList)
            {
                ReplicaEntity replica = r;

                var currentReplicaCodePackage = partitionEntity.ParentServiceEntity.ParentApplicationEntity.GetCodePackagEntityForReplica(replica);

                if (currentReplicaCodePackage != null)
                {
                    currentReplicaCodePackage.MarkCodePackageAsUnsafeToFault();
                }

                var clusterNode = partitionEntity.ParentServiceEntity.ParentApplicationEntity.ClusterSnapshot.Nodes.FindMatchingNodeEntity(replica.Replica.NodeName);

                if (clusterNode != null)
                {
                    clusterNode.MarkNodeAsUnsafeToFault();
                }

                replica.MarkReplicaAsUnsafeToFault();
            }
        }