use of com.couchbase.client.core.error.ErrorCodeAndMessage 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);
}
use of com.couchbase.client.core.error.ErrorCodeAndMessage in project couchbase-jvm-clients by couchbase.
the class QueryMessageHandler method qualifiesForRetry.
@Override
protected Optional<RetryReason> qualifiesForRetry(final CouchbaseException exception) {
if (exception.context() instanceof QueryErrorContext) {
QueryErrorContext errorContext = (QueryErrorContext) exception.context();
List<ErrorCodeAndMessage> errors = errorContext.errors();
if (!errors.isEmpty()) {
return mapError(errors.get(0));
}
}
return Optional.empty();
}
use of com.couchbase.client.core.error.ErrorCodeAndMessage in project couchbase-jvm-clients by couchbase.
the class AnalyticsChunkResponseParser method errorsToThrowable.
@Stability.Internal
static CouchbaseException errorsToThrowable(final byte[] bytes, RequestContext ctx, HttpResponseStatus httpStatus) {
int httpCode = httpStatus != null ? httpStatus.code() : 0;
final List<ErrorCodeAndMessage> errors = bytes.length == 0 ? Collections.emptyList() : ErrorCodeAndMessage.from(bytes);
AnalyticsErrorContext errorContext = new AnalyticsErrorContext(ctx, errors, httpCode);
if (errors.size() >= 1) {
ErrorCodeAndMessage error = errors.get(0);
// Analytics error code reference:
// https://docs.couchbase.com/server/current/analytics/error-codes.html
int code = error.code();
if (code >= 25000 && code < 26000) {
return new InternalServerFailureException(errorContext);
} else if (code >= 20000 && code < 21000) {
return new AuthenticationFailureException("Could not authenticate analytics query", errorContext, null);
} else if (code == 23000 || code == 23003) {
return new TemporaryFailureException(errorContext);
} else if (code == 23007) {
return new JobQueueFullException(errorContext);
} else if (code == 24000) {
return new ParsingFailureException(errorContext);
} else if (code == 24006) {
return new LinkNotFoundException(errorContext);
} else if (code == 24055) {
return new LinkExistsException(errorContext);
} else if (code == 24040) {
return new DatasetExistsException(errorContext);
} else if (code == 24044 || code == 24045 || code == 24025) {
return new DatasetNotFoundException(errorContext);
} else if (code == 24034) {
return new DataverseNotFoundException(errorContext);
} else if (code == 24039) {
return new DataverseExistsException(errorContext);
} else if (code == 24047) {
return new IndexNotFoundException(errorContext);
} else if (code == 24048) {
return new IndexExistsException(errorContext);
} else if (code > 24000 && code < 25000) {
return new CompilationFailureException(errorContext);
} else {
return new CouchbaseException("Unknown analytics error: " + error, errorContext);
}
}
return new CouchbaseException("Unknown analytics error", errorContext);
}
use of com.couchbase.client.core.error.ErrorCodeAndMessage in project couchbase-jvm-clients by couchbase.
the class AnalyticsErrorContext method injectExportableParams.
@Override
public void injectExportableParams(final Map<String, Object> input) {
super.injectExportableParams(input);
if (requestContext != null) {
requestContext.injectExportableParams(input);
}
if (httpStatus != 0) {
input.put("httpStatus", httpStatus);
}
List<Map<String, Object>> errorList = new ArrayList<>(errors.size());
for (ErrorCodeAndMessage error : errors) {
Map<String, Object> err = new TreeMap<>();
err.put("code", error.code());
err.put("message", error.message());
if (error.context() != null && !error.context().isEmpty()) {
err.put("additional", error.context());
}
errorList.add(err);
}
input.put("errors", errorList);
}
use of com.couchbase.client.core.error.ErrorCodeAndMessage in project couchbase-jvm-clients by couchbase.
the class QueryErrorContext method injectExportableParams.
@Override
public void injectExportableParams(final Map<String, Object> input) {
super.injectExportableParams(input);
if (requestContext != null) {
requestContext.injectExportableParams(input);
}
if (httpStatus != 0) {
input.put("httpStatus", httpStatus);
}
List<Map<String, Object>> errorList = new ArrayList<>(errors.size());
for (ErrorCodeAndMessage error : errors) {
Map<String, Object> err = new TreeMap<>();
err.put("code", error.code());
err.put("message", error.message());
err.put("retry", error.retry());
if (error.reason() != null) {
err.put("reason", error.reason());
}
if (error.context() != null && !error.context().isEmpty()) {
err.put("additional", error.context());
}
errorList.add(err);
}
input.put("errors", errorList);
}
Aggregations