// Select a quorum of P and S that are not Down or Dropped
        internal static List <StatefulServiceReplica> GetReplicasForPartialLoss(Guid operationId, List <StatefulServiceReplica> replicaList)
        {
            List <StatefulServiceReplica> tempReplicas = new List <StatefulServiceReplica>();

            foreach (StatefulServiceReplica replica in replicaList)
            {
                if (FaultAnalysisServiceUtility.IsPrimaryOrSecondary(replica) && FaultAnalysisServiceUtility.IsReplicaUp(replica))
                {
                    TestabilityTrace.TraceSource.WriteInfo(TraceType, "DEBUG {0} temp adding {1},{2},{3}", operationId, replica.Id, replica.ReplicaRole, replica.ReplicaStatus);
                    tempReplicas.Add(replica);
                }
            }

            int replicasToRestartWithoutPrimary = tempReplicas.Count / 2;
            StatefulServiceReplica primary      = tempReplicas.Where(r => r.ReplicaRole == ReplicaRole.Primary).FirstOrDefault();

            if (primary == null)
            {
                return(null);
            }

            List <StatefulServiceReplica> targetReplicas = new List <StatefulServiceReplica>(replicasToRestartWithoutPrimary + 1);

            TestabilityTrace.TraceSource.WriteInfo(TraceType, "DEBUG {0} target adding primary {1},{2},{3}", operationId, primary.Id, primary.ReplicaRole, primary.ReplicaStatus);
            targetReplicas.Add(primary);
            tempReplicas.Remove(primary);

            for (int i = 0; i < replicasToRestartWithoutPrimary; i++)
            {
                TestabilityTrace.TraceSource.WriteInfo(TraceType, "DEBUG {0} target adding {1},{2},{3}", operationId, tempReplicas[i].Id, tempReplicas[i].ReplicaRole, tempReplicas[i].ReplicaStatus);
                targetReplicas.Add(tempReplicas[i]);
            }

            return(targetReplicas);
        }