Java源码示例:com.couchbase.client.core.ReplicaNotConfiguredException

示例1
/**
 * Test the fail fast mechanism when one asks for more replicas than are configured on the bucket, so it will
 * never be possible to successfully observe the state requested.
 *
 * This test can only be run if less than 3 replicas are defined on the bucket.
 */
@Test
public void shouldFailReplicaIfLessReplicaConfigureOnBucket() {
    Assume.assumeTrue(numberOfReplicas < 3);

    try {
        Observe.call(
            cluster(),
            bucket(),
            "someDoc",
            1234,
            false,
            Observe.PersistTo.NONE,
            Observe.ReplicateTo.THREE,
            BestEffortRetryStrategy.INSTANCE
        ).timeout(5, TimeUnit.SECONDS).toBlocking().single();
        fail("Expected a ReplicaNotConfiguredException");
    } catch (ReplicaNotConfiguredException ex) {
        assertEquals(1234, ex.mutationCas());
    }
}
 
示例2
/**
 * Test the fail fast mechanism when one asks for more replicas than are configured on the bucket, so it will
 * never be possible to successfully observe the state requested.
 *
 * This test can only be run if less than 3 replicas are defined on the bucket.
 */
@Test
public void shouldFailPersistIfLessReplicaConfigureOnBucket() {
    Assume.assumeTrue(numberOfReplicas < 3);

    try {
        Observe.call(
            cluster(),
            bucket(),
            "someDoc",
            1234,
            false,
            Observe.PersistTo.FOUR,
            Observe.ReplicateTo.NONE,
            BestEffortRetryStrategy.INSTANCE
        ).timeout(5, TimeUnit.SECONDS).toBlocking().single();
        fail("Expected a ReplicaNotConfiguredException");
    } catch (ReplicaNotConfiguredException ex) {
        assertEquals(1234, ex.mutationCas());
    }
}
 
示例3
@Test(expected = ReplicaNotConfiguredException.class)
public void shouldFailFastWhenReplicateToGreaterThanBucketReplicas() {
    ClusterFacade cluster = mock(ClusterFacade.class);

    // Setup a mocked config which returns no replica configured
    CouchbaseBucketConfig bucketConfig = mock(CouchbaseBucketConfig.class);
    when(bucketConfig.numberOfReplicas()).thenReturn(0);
    ClusterConfig clusterConfig = mock(ClusterConfig.class);
    when(clusterConfig.bucketConfig("bucket")).thenReturn(bucketConfig);
    GetClusterConfigResponse clusterConfigResponse = new GetClusterConfigResponse(
        clusterConfig, ResponseStatus.SUCCESS
    );
    when(cluster.send(any(GetClusterConfigRequest.class))).thenReturn(
            Observable.just((CouchbaseResponse) clusterConfigResponse)
    );

    Observable<Boolean> result = Observe.call(
            cluster, "bucket", "id", 1234, false, Observe.PersistTo.NONE, Observe.ReplicateTo.ONE,
            BestEffortRetryStrategy.INSTANCE
    );
    result.toBlocking().single();
}
 
示例4
@Test(expected = ReplicaNotConfiguredException.class)
public void shouldFailFastWhenPersistToGreaterThanBucketReplicas() {
    ClusterFacade cluster = mock(ClusterFacade.class);

    // Setup a mocked config which returns no replica configured
    CouchbaseBucketConfig bucketConfig = mock(CouchbaseBucketConfig.class);
    when(bucketConfig.numberOfReplicas()).thenReturn(2);
    ClusterConfig clusterConfig = mock(ClusterConfig.class);
    when(clusterConfig.bucketConfig("bucket")).thenReturn(bucketConfig);
    GetClusterConfigResponse clusterConfigResponse = new GetClusterConfigResponse(
            clusterConfig, ResponseStatus.SUCCESS
    );
    when(cluster.send(any(GetClusterConfigRequest.class))).thenReturn(
            Observable.just((CouchbaseResponse) clusterConfigResponse)
    );

    Observable<Boolean> result = Observe.call(
            cluster, "bucket", "id", 1234, false, Observe.PersistTo.FOUR, Observe.ReplicateTo.NONE,
            BestEffortRetryStrategy.INSTANCE
    );
    result.toBlocking().single();
}
 
示例5
/**
 * Fail observables because the partitions do not match up.
 *
 * If the replica is not even available in the configuration (identified by a -2 node index),
 * it is clear that this replica is not configured. If a -1 is returned it is configured, but
 * currently not available (not enough nodes in the cluster, for example if a node is seen down,
 * after a failover, or during rebalance. Replica partitions in general take longer to heal than
 * active partitions, since they are sacrificed for application availability.
 *
 * @param nodeId the current node id of the partition
 * @param request the request to error
 * @param name the name of the bucket
 */
private static void errorObservables(int nodeId, BinaryRequest request, String name, CoreEnvironment env,
    RingBuffer<ResponseEvent> responseBuffer) {
    if (nodeId == DefaultCouchbaseBucketConfig.PARTITION_NOT_EXISTENT) {
        if (request instanceof ReplicaGetRequest) {
            request.observable().onError(new ReplicaNotConfiguredException("Replica number "
                    + ((ReplicaGetRequest) request).replica() + " not configured for bucket " + name, null));
            return;
        } else if (request instanceof ObserveRequest) {
            request.observable().onError(new ReplicaNotConfiguredException("Replica number "
                    + ((ObserveRequest) request).replica() + " not configured for bucket " + name, ((ObserveRequest) request).cas()));
            return;
        } else if (request instanceof ObserveSeqnoRequest) {
            request.observable().onError(new ReplicaNotConfiguredException("Replica number "
                    + ((ObserveSeqnoRequest) request).replica() + " not configured for bucket " + name, ((ObserveSeqnoRequest) request).cas()));
            return;
        }

        RetryHelper.retryOrCancel(env, request, responseBuffer);
        return;
    }

    if (nodeId == -1) {
        if (request instanceof ObserveRequest) {
            request.observable().onError(new ReplicaNotAvailableException("Replica number "
                    + ((ObserveRequest) request).replica() + " not available for bucket " + name,
                ((ObserveRequest) request).cas()));
            return;
        } else if (request instanceof ReplicaGetRequest) {
            request.observable().onError(new ReplicaNotAvailableException("Replica number "
                    + ((ReplicaGetRequest) request).replica() + " not available for bucket " + name, null));
            return;
        } else if (request instanceof ObserveSeqnoRequest) {
            request.observable().onError(new ReplicaNotAvailableException("Replica number "
                    + ((ObserveSeqnoRequest) request).replica() + " not available for bucket " + name, ((ObserveSeqnoRequest) request).cas()));
            return;
        }

        RetryHelper.retryOrCancel(env, request, responseBuffer);
        return;
    }

    throw new IllegalStateException("Unknown NodeId: " + nodeId + ", request: " + request);
}