Search in sources :

Example 1 with QuotaLimitedException

use of com.couchbase.client.core.error.QuotaLimitedException in project couchbase-jvm-clients by couchbase.

the class QueryChunkResponseParser method errorsToThrowable.

static CouchbaseException errorsToThrowable(final byte[] bytes, HttpResponse header, RequestContext ctx) {
    int httpStatus = header != null ? header.status().code() : 0;
    final List<ErrorCodeAndMessage> errors = bytes.length == 0 ? Collections.emptyList() : ErrorCodeAndMessage.fromJsonArray(bytes);
    QueryErrorContext errorContext = new QueryErrorContext(ctx, errors, httpStatus);
    if (errors.size() >= 1) {
        ErrorCodeAndMessage codeAndMessage = errors.get(0);
        int code = codeAndMessage.code();
        String message = codeAndMessage.message();
        int reasonCode = codeAndMessage.reason() != null ? (int) codeAndMessage.reason().getOrDefault("code", 0) : 0;
        if (code == 3000) {
            return new ParsingFailureException(errorContext);
        } else if (PREPARED_ERROR_CODES.contains(code)) {
            return new PreparedStatementFailureException(errorContext, RETRYABLE_PREPARED_ERROR_CODES.contains(code));
        } else if (code == 4300 && message.matches("^.*index .*already exist.*")) {
            return new IndexExistsException(errorContext);
        } else if (code >= 4000 && code < 5000) {
            return new PlanningFailureException(errorContext);
        } else if (code == 12004 || code == 12016 || (code == 5000 && message.matches("^.*index .+ not found.*"))) {
            return new IndexNotFoundException(errorContext);
        } else if (code == 5000 && message.matches("^.*Index .*already exist.*")) {
            return new IndexExistsException(errorContext);
        } else if (code == 5000 && message.contains("limit for number of indexes that can be created per scope has been reached")) {
            return new QuotaLimitedException(errorContext);
        } else if (code >= 5000 && code < 6000) {
            return new InternalServerFailureException(errorContext);
        } else if (code == 12009) {
            if (message.contains("CAS mismatch") || reasonCode == 12033) {
                return new CasMismatchException(errorContext);
            } else if (reasonCode == 17014) {
                return new DocumentNotFoundException(errorContext);
            } else if (reasonCode == 17012) {
                return new DocumentExistsException(errorContext);
            } else {
                return new DmlFailureException(errorContext);
            }
        } else if ((code >= 10000 && code < 11000) || code == 13014) {
            return new AuthenticationFailureException("Could not authenticate query", errorContext, null);
        } else if ((code >= 12000 && code < 13000) || (code >= 14000 && code < 15000)) {
            return new IndexFailureException(errorContext);
        } else if (code == 1065) {
            if (message.contains("query_context")) {
                return FeatureNotAvailableException.scopeLevelQuery(ServiceType.QUERY);
            }
            if (message.contains("preserve_expiry")) {
                return FeatureNotAvailableException.queryPreserveExpiry();
            }
        } else if (code == 1080) {
            // engine will proactively send us a timeout and we need to convert it.
            return new UnambiguousTimeoutException("Query timed out while streaming/receiving rows", new CancellationErrorContext(errorContext));
        } else if (code == 1191 || code == 1192 || code == 1193 || code == 1194) {
            return new RateLimitedException(errorContext);
        } else if (code == 3230) {
            String feature = null;
            if (message.contains("Advisor") || message.contains("Advise")) {
                feature = "Query Index Advisor";
            } else if (message.contains("Window")) {
                feature = "Query Window Functions";
            }
            return FeatureNotAvailableException.communityEdition(feature);
        }
    }
    return new CouchbaseException("Unknown query error", errorContext);
}
Also used : IndexExistsException(com.couchbase.client.core.error.IndexExistsException) DocumentNotFoundException(com.couchbase.client.core.error.DocumentNotFoundException) DocumentExistsException(com.couchbase.client.core.error.DocumentExistsException) CasMismatchException(com.couchbase.client.core.error.CasMismatchException) PlanningFailureException(com.couchbase.client.core.error.PlanningFailureException) UnambiguousTimeoutException(com.couchbase.client.core.error.UnambiguousTimeoutException) AuthenticationFailureException(com.couchbase.client.core.error.AuthenticationFailureException) CouchbaseException(com.couchbase.client.core.error.CouchbaseException) QueryErrorContext(com.couchbase.client.core.error.context.QueryErrorContext) QuotaLimitedException(com.couchbase.client.core.error.QuotaLimitedException) ErrorCodeAndMessage(com.couchbase.client.core.error.ErrorCodeAndMessage) ParsingFailureException(com.couchbase.client.core.error.ParsingFailureException) PreparedStatementFailureException(com.couchbase.client.core.error.PreparedStatementFailureException) IndexNotFoundException(com.couchbase.client.core.error.IndexNotFoundException) DmlFailureException(com.couchbase.client.core.error.DmlFailureException) IndexFailureException(com.couchbase.client.core.error.IndexFailureException) CancellationErrorContext(com.couchbase.client.core.error.context.CancellationErrorContext) RateLimitedException(com.couchbase.client.core.error.RateLimitedException) InternalServerFailureException(com.couchbase.client.core.error.InternalServerFailureException)

Example 2 with QuotaLimitedException

use of com.couchbase.client.core.error.QuotaLimitedException in project couchbase-jvm-clients by couchbase.

the class SearchChunkResponseParser method errorsToThrowable.

private CouchbaseException errorsToThrowable(final byte[] bytes) {
    int statusCode = responseHeader().status().code();
    String errorDecoded = bytes == null || bytes.length == 0 ? "" : new String(bytes, CharsetUtil.UTF_8);
    SearchErrorContext errorContext = new SearchErrorContext(HttpProtocol.decodeStatus(responseHeader().status()), requestContext(), statusCode, errorDecoded);
    if (statusCode == 400 && errorDecoded.contains("index not found")) {
        return new IndexNotFoundException(errorContext);
    } else if (statusCode == 500) {
        return new InternalServerFailureException(errorContext);
    } else if (statusCode == 401 || statusCode == 403) {
        return new AuthenticationFailureException("Could not authenticate search query", errorContext, null);
    } else if (statusCode == 400 && errorDecoded.contains("num_fts_indexes")) {
        return new QuotaLimitedException(errorContext);
    } else if (statusCode == 429) {
        if (errorDecoded.contains("num_concurrent_requests") || errorDecoded.contains("num_queries_per_min") || errorDecoded.contains("ingress_mib_per_min") || errorDecoded.contains("egress_mib_per_min")) {
            return new RateLimitedException(errorContext);
        }
    }
    return new CouchbaseException("Unknown search error: " + errorDecoded, errorContext);
}
Also used : CouchbaseException(com.couchbase.client.core.error.CouchbaseException) QuotaLimitedException(com.couchbase.client.core.error.QuotaLimitedException) SearchErrorContext(com.couchbase.client.core.error.context.SearchErrorContext) IndexNotFoundException(com.couchbase.client.core.error.IndexNotFoundException) AuthenticationFailureException(com.couchbase.client.core.error.AuthenticationFailureException) RateLimitedException(com.couchbase.client.core.error.RateLimitedException) InternalServerFailureException(com.couchbase.client.core.error.InternalServerFailureException)

Example 3 with QuotaLimitedException

use of com.couchbase.client.core.error.QuotaLimitedException in project couchbase-jvm-clients by couchbase.

the class RateLimitingIntegrationTest method searchQuotaLimitScopesMaxIndexes.

@Test
@IgnoreWhen(missesCapabilities = Capabilities.SEARCH)
void searchQuotaLimitScopesMaxIndexes() throws Exception {
    String scopeName = "ratelimitSearch";
    String collectionName = "searchCollection";
    ScopeRateLimits limits = new ScopeRateLimits();
    limits.fts = new SearchScopeRateLimit(1);
    createLimitedScope(scopeName, config().bucketname(), limits);
    CollectionManager collectionManager = adminCluster.bucket(config().bucketname()).collections();
    Map<String, Object> params = mapOf("mapping", mapOf("types", mapOf(scopeName + "." + collectionName, mapOf("enabled", true, "dynamic", true)), "default_mapping", mapOf("enabled", false), "default_type", "_default", "default_analyzer", "standard", "default_field", "_all"), "doc_config", mapOf("mode", "scope.collection.type_field", "type_field", "type"));
    try {
        CollectionSpec collectionSpec = CollectionSpec.create(collectionName, scopeName);
        collectionManager.createCollection(collectionSpec);
        waitUntilCondition(() -> collectionExists(collectionManager, collectionSpec));
        waitForService(adminCluster.bucket(config().bucketname()), ServiceType.SEARCH);
        adminCluster.searchIndexes().upsertIndex(new SearchIndex("ratelimits1", config().bucketname()).params(params));
        QuotaLimitedException ex = assertThrows(QuotaLimitedException.class, () -> adminCluster.searchIndexes().upsertIndex(new SearchIndex("ratelimits2", config().bucketname()).params(params)));
    } finally {
        collectionManager.dropScope(scopeName);
    }
}
Also used : QuotaLimitedException(com.couchbase.client.core.error.QuotaLimitedException) CollectionManager(com.couchbase.client.java.manager.collection.CollectionManager) CollectionSpec(com.couchbase.client.java.manager.collection.CollectionSpec) SearchIndex(com.couchbase.client.java.manager.search.SearchIndex) JsonObject(com.couchbase.client.java.json.JsonObject) IgnoreWhen(com.couchbase.client.test.IgnoreWhen) JavaIntegrationTest(com.couchbase.client.java.util.JavaIntegrationTest) Test(org.junit.jupiter.api.Test)

Aggregations

QuotaLimitedException (com.couchbase.client.core.error.QuotaLimitedException)3 AuthenticationFailureException (com.couchbase.client.core.error.AuthenticationFailureException)2 CouchbaseException (com.couchbase.client.core.error.CouchbaseException)2 IndexNotFoundException (com.couchbase.client.core.error.IndexNotFoundException)2 InternalServerFailureException (com.couchbase.client.core.error.InternalServerFailureException)2 RateLimitedException (com.couchbase.client.core.error.RateLimitedException)2 CasMismatchException (com.couchbase.client.core.error.CasMismatchException)1 DmlFailureException (com.couchbase.client.core.error.DmlFailureException)1 DocumentExistsException (com.couchbase.client.core.error.DocumentExistsException)1 DocumentNotFoundException (com.couchbase.client.core.error.DocumentNotFoundException)1 ErrorCodeAndMessage (com.couchbase.client.core.error.ErrorCodeAndMessage)1 IndexExistsException (com.couchbase.client.core.error.IndexExistsException)1 IndexFailureException (com.couchbase.client.core.error.IndexFailureException)1 ParsingFailureException (com.couchbase.client.core.error.ParsingFailureException)1 PlanningFailureException (com.couchbase.client.core.error.PlanningFailureException)1 PreparedStatementFailureException (com.couchbase.client.core.error.PreparedStatementFailureException)1 UnambiguousTimeoutException (com.couchbase.client.core.error.UnambiguousTimeoutException)1 CancellationErrorContext (com.couchbase.client.core.error.context.CancellationErrorContext)1 QueryErrorContext (com.couchbase.client.core.error.context.QueryErrorContext)1 SearchErrorContext (com.couchbase.client.core.error.context.SearchErrorContext)1