@Test
  @Ignore
  public void getOperationFailDueToNotFoundWithOriginatingTwoOnline() {
    assumeTrue(replicasStateEnabled);

    List<Port> portList = Collections.singletonList(new Port(PORT, PortType.PLAINTEXT));
    List<String> mountPaths = Collections.singletonList("mockMountPath");
    MockDataNodeId localDcNode = new MockDataNodeId(portList, mountPaths, "dc-0");
    MockDataNodeId remoteNode1 = new MockDataNodeId(portList, mountPaths, "dc-1");
    MockDataNodeId remoteNode2 = new MockDataNodeId(portList, mountPaths, "dc-2");
    datanodes = new ArrayList<>(Arrays.asList(localDcNode, remoteNode1, remoteNode2));
    mockPartition = new MockPartitionId();
    populateReplicaList(2, ReplicaState.STANDBY, Collections.singletonList(localDcNode));
    populateReplicaList(1, ReplicaState.OFFLINE, Collections.singletonList(localDcNode));
    populateReplicaList(3, ReplicaState.ERROR, Collections.singletonList(remoteNode1));
    populateReplicaList(3, ReplicaState.OFFLINE, Collections.singletonList(remoteNode2));

    localDcName = datanodes.get(0).getDatacenterName();
    originatingDcName = localDcName;
    mockClusterMap = new MockClusterMap(false, datanodes, 1, Collections.singletonList(mockPartition), localDcName);
    // 1. include down replicas (OFFLINE replicas are eligible for GET)
    OperationTracker ot = getOperationTrackerForGetOrPut(true, 1, 1, RouterOperation.GetBlobOperation, true);
    ReplicaId inflightReplica;
    // two originating returns DISK_DOWN or NOT_FOUND
    sendRequests(ot, 1, false);
    inflightReplica = inflightReplicas.poll();
    ot.onResponse(inflightReplica, TrackedRequestFinalState.NOT_FOUND);
    assertFalse("Operation should not complete", ot.isDone());
    sendRequests(ot, 1, false);
    inflightReplica = inflightReplicas.poll();
    ot.onResponse(inflightReplica, TrackedRequestFinalState.NOT_FOUND);
    assertFalse("Operation should not complete", ot.isDone());
    //ROUTER_OPERATION_TRACKER_TERMINATE_ON_NOT_FOUND_ENABLED is enabled in the test.
    //Although there are 6 replicas, it'll go through the originating replica only.
    sendRequests(ot, 1, false);
    inflightReplica = inflightReplicas.poll();
    ot.onResponse(inflightReplica, TrackedRequestFinalState.NOT_FOUND);
    assertTrue("Operation should complete", ot.isDone());
    assertTrue(ot.hasFailedOnNotFound());

    // 2. exclude down replicas
    repetitionTracker.clear();
    ot = getOperationTrackerForGetOrPut(true, 1, 1, RouterOperation.GetBlobOperation, false);
    // two originating returns DISK_DOWN
    sendRequests(ot, 1, false);
    inflightReplica = inflightReplicas.poll();
    ot.onResponse(inflightReplica, TrackedRequestFinalState.DISK_DOWN);
    assertFalse("Operation should not complete", ot.isDone());
    sendRequests(ot, 1, false);
    inflightReplica = inflightReplicas.poll();
    ot.onResponse(inflightReplica, TrackedRequestFinalState.NOT_FOUND);
    assertTrue("Operation should not complete", ot.isDone());
    assertTrue(ot.hasFailedOnNotFound());
  }
Duplicate the GCN issue:
Among the 9 replicas, some are ERROR(in the GCN case, these are not listed in the Helix external view.
All the eligible replica returns either DiskDown or NotFound.
Originating Colo has 2 replica in the eligible replica, so we return NOT_FOUND.
ambry-router/src/test/java/com/github/ambry/router/OperationTrackerTest.java