char* as_error_string(as_status status) { switch (status) { CASE_ASSIGN(AEROSPIKE_OK); CASE_ASSIGN(AEROSPIKE_QUERY_END); CASE_ASSIGN(AEROSPIKE_ERR_NO_MORE_CONNECTIONS); CASE_ASSIGN(AEROSPIKE_ERR_ASYNC_CONNECTION); CASE_ASSIGN(AEROSPIKE_ERR_CLIENT_ABORT); CASE_ASSIGN(AEROSPIKE_ERR_INVALID_HOST); CASE_ASSIGN(AEROSPIKE_NO_MORE_RECORDS); CASE_ASSIGN(AEROSPIKE_ERR_PARAM); CASE_ASSIGN(AEROSPIKE_ERR_CLIENT); CASE_ASSIGN(AEROSPIKE_ERR_SERVER); CASE_ASSIGN(AEROSPIKE_ERR_RECORD_NOT_FOUND); CASE_ASSIGN(AEROSPIKE_ERR_RECORD_GENERATION); CASE_ASSIGN(AEROSPIKE_ERR_REQUEST_INVALID); CASE_ASSIGN(AEROSPIKE_ERR_RECORD_EXISTS); CASE_ASSIGN(AEROSPIKE_ERR_BIN_EXISTS); CASE_ASSIGN(AEROSPIKE_ERR_CLUSTER_CHANGE); CASE_ASSIGN(AEROSPIKE_ERR_SERVER_FULL); CASE_ASSIGN(AEROSPIKE_ERR_TIMEOUT); CASE_ASSIGN(AEROSPIKE_ERR_NO_XDR); CASE_ASSIGN(AEROSPIKE_ERR_CLUSTER); CASE_ASSIGN(AEROSPIKE_ERR_BIN_INCOMPATIBLE_TYPE); CASE_ASSIGN(AEROSPIKE_ERR_RECORD_TOO_BIG); CASE_ASSIGN(AEROSPIKE_ERR_RECORD_BUSY); CASE_ASSIGN(AEROSPIKE_ERR_SCAN_ABORTED); CASE_ASSIGN(AEROSPIKE_ERR_UNSUPPORTED_FEATURE); CASE_ASSIGN(AEROSPIKE_ERR_BIN_NOT_FOUND); CASE_ASSIGN(AEROSPIKE_ERR_DEVICE_OVERLOAD); CASE_ASSIGN(AEROSPIKE_ERR_RECORD_KEY_MISMATCH); CASE_ASSIGN(AEROSPIKE_ERR_NAMESPACE_NOT_FOUND); CASE_ASSIGN(AEROSPIKE_ERR_BIN_NAME); CASE_ASSIGN(AEROSPIKE_ERR_FAIL_FORBIDDEN); CASE_ASSIGN(AEROSPIKE_SECURITY_NOT_SUPPORTED); CASE_ASSIGN(AEROSPIKE_SECURITY_NOT_ENABLED); CASE_ASSIGN(AEROSPIKE_SECURITY_SCHEME_NOT_SUPPORTED); CASE_ASSIGN(AEROSPIKE_INVALID_COMMAND); CASE_ASSIGN(AEROSPIKE_INVALID_FIELD); CASE_ASSIGN(AEROSPIKE_ILLEGAL_STATE); CASE_ASSIGN(AEROSPIKE_INVALID_USER); CASE_ASSIGN(AEROSPIKE_USER_ALREADY_EXISTS); CASE_ASSIGN(AEROSPIKE_INVALID_PASSWORD); CASE_ASSIGN(AEROSPIKE_EXPIRED_PASSWORD); CASE_ASSIGN(AEROSPIKE_FORBIDDEN_PASSWORD); CASE_ASSIGN(AEROSPIKE_INVALID_CREDENTIAL); CASE_ASSIGN(AEROSPIKE_INVALID_ROLE); CASE_ASSIGN(AEROSPIKE_ROLE_ALREADY_EXISTS); CASE_ASSIGN(AEROSPIKE_INVALID_PRIVILEGE); CASE_ASSIGN(AEROSPIKE_NOT_AUTHENTICATED); CASE_ASSIGN(AEROSPIKE_ROLE_VIOLATION); CASE_ASSIGN(AEROSPIKE_ERR_UDF); CASE_ASSIGN(AEROSPIKE_ERR_LARGE_ITEM_NOT_FOUND); CASE_ASSIGN(AEROSPIKE_ERR_BATCH_DISABLED); CASE_ASSIGN(AEROSPIKE_ERR_BATCH_MAX_REQUESTS_EXCEEDED); CASE_ASSIGN(AEROSPIKE_ERR_BATCH_QUEUES_FULL); CASE_ASSIGN(AEROSPIKE_ERR_INDEX_FOUND); CASE_ASSIGN(AEROSPIKE_ERR_INDEX_NOT_FOUND); CASE_ASSIGN(AEROSPIKE_ERR_INDEX_OOM); CASE_ASSIGN(AEROSPIKE_ERR_INDEX_NOT_READABLE); CASE_ASSIGN(AEROSPIKE_ERR_INDEX); CASE_ASSIGN(AEROSPIKE_ERR_INDEX_NAME_MAXLEN); CASE_ASSIGN(AEROSPIKE_ERR_INDEX_MAXCOUNT); CASE_ASSIGN(AEROSPIKE_ERR_QUERY_ABORTED); CASE_ASSIGN(AEROSPIKE_ERR_QUERY_QUEUE_FULL); CASE_ASSIGN(AEROSPIKE_ERR_QUERY_TIMEOUT); CASE_ASSIGN(AEROSPIKE_ERR_QUERY); default: if (status < 0) { ERR_ASSIGN(AEROSPIKE_ERR_CLIENT); } else { ERR_ASSIGN(AEROSPIKE_ERR_SERVER); } } }
as_status as_error_fromrc(as_error * err, cl_rv rc) { switch (rc) { case CITRUSLEAF_OK: ERR_ASSIGN(AEROSPIKE_OK); break; case CITRUSLEAF_FAIL_TIMEOUT: ERR_ASSIGN(AEROSPIKE_ERR_TIMEOUT); break; case CITRUSLEAF_FAIL_UNKNOWN: ERR_ASSIGN(AEROSPIKE_ERR_SERVER); break; case CITRUSLEAF_FAIL_NOTFOUND: ERR_ASSIGN(AEROSPIKE_ERR_RECORD_NOT_FOUND); break; case CITRUSLEAF_FAIL_GENERATION: ERR_ASSIGN(AEROSPIKE_ERR_RECORD_GENERATION); break; case CITRUSLEAF_FAIL_PARAMETER: ERR_ASSIGN(AEROSPIKE_ERR_REQUEST_INVALID); break; case CITRUSLEAF_FAIL_RECORD_EXISTS: ERR_ASSIGN(AEROSPIKE_ERR_RECORD_EXISTS); break; case CITRUSLEAF_FAIL_BIN_EXISTS: strcpy(err->message, "got bin-exists error - not supported"); ERR_ASSIGN(AEROSPIKE_ERR_SERVER); break; case CITRUSLEAF_FAIL_CLUSTER_KEY_MISMATCH: // For now, both ordinary request and scan can return this. ERR_ASSIGN(AEROSPIKE_ERR_CLUSTER_CHANGE); break; case CITRUSLEAF_FAIL_PARTITION_OUT_OF_SPACE: ERR_ASSIGN(AEROSPIKE_ERR_SERVER_FULL); break; case CITRUSLEAF_FAIL_SERVERSIDE_TIMEOUT: // Conflate with client timeout - apps won't care which was first. ERR_ASSIGN(AEROSPIKE_ERR_TIMEOUT); break; case CITRUSLEAF_FAIL_NOXDS: ERR_ASSIGN(AEROSPIKE_ERR_NO_XDR); break; case CITRUSLEAF_FAIL_UNAVAILABLE: // Yes, "unavailable" means a scan with cluster-change flag set won't // start, because migrations are happening. ERR_ASSIGN(AEROSPIKE_ERR_CLUSTER_CHANGE); break; case CITRUSLEAF_FAIL_INCOMPATIBLE_TYPE: ERR_ASSIGN(AEROSPIKE_ERR_BIN_INCOMPATIBLE_TYPE); break; case CITRUSLEAF_FAIL_RECORD_TOO_BIG: ERR_ASSIGN(AEROSPIKE_ERR_RECORD_TOO_BIG); break; case CITRUSLEAF_FAIL_KEY_BUSY: ERR_ASSIGN(AEROSPIKE_ERR_RECORD_BUSY); break; case CITRUSLEAF_FAIL_BIN_NOT_FOUND: strcpy(err->message, "got bin-not-found error - not supported"); ERR_ASSIGN(AEROSPIKE_ERR_SERVER); break; case CITRUSLEAF_FAIL_DEVICE_OVERLOAD: ERR_ASSIGN(AEROSPIKE_ERR_DEVICE_OVERLOAD); break; case CITRUSLEAF_FAIL_KEY_MISMATCH: ERR_ASSIGN(AEROSPIKE_ERR_RECORD_KEY_MISMATCH); break; // TODO - just guessing from here on down ... fill out correctly. case CITRUSLEAF_FAIL_SCAN_ABORT: ERR_ASSIGN(AEROSPIKE_ERR_SCAN_ABORTED); break; case CITRUSLEAF_FAIL_UNSUPPORTED_FEATURE: ERR_ASSIGN(AEROSPIKE_ERR_UNSUPPORTED_FEATURE); break; case CITRUSLEAF_FAIL_INVALID_DATA: ERR_ASSIGN(AEROSPIKE_ERR_SERVER); break; case CITRUSLEAF_FAIL_UDF_BAD_RESPONSE: ERR_ASSIGN(AEROSPIKE_ERR_UDF); break; case CITRUSLEAF_FAIL_UDF_LUA_EXECUTION: ERR_ASSIGN(AEROSPIKE_ERR_UDF); break; case CITRUSLEAF_FAIL_INDEX_FOUND: ERR_ASSIGN(AEROSPIKE_ERR_INDEX_FOUND); break; case CITRUSLEAF_FAIL_INDEX_NOTFOUND: ERR_ASSIGN(AEROSPIKE_ERR_INDEX_NOT_FOUND); break; case CITRUSLEAF_FAIL_INDEX_OOM: ERR_ASSIGN(AEROSPIKE_ERR_INDEX_OOM); break; case CITRUSLEAF_FAIL_INDEX_NOTREADABLE: ERR_ASSIGN(AEROSPIKE_ERR_INDEX_NOT_READABLE); break; case CITRUSLEAF_FAIL_INDEX_GENERIC: ERR_ASSIGN(AEROSPIKE_ERR_INDEX); break; case CITRUSLEAF_FAIL_INDEX_NAME_MAXLEN: ERR_ASSIGN(AEROSPIKE_ERR_INDEX_NAME_MAXLEN); break; case CITRUSLEAF_FAIL_INDEX_MAXCOUNT: ERR_ASSIGN(AEROSPIKE_ERR_INDEX_MAXCOUNT); break; case CITRUSLEAF_FAIL_QUERY_ABORTED: ERR_ASSIGN(AEROSPIKE_ERR_QUERY_ABORTED); break; case CITRUSLEAF_FAIL_QUERY_QUEUEFULL: ERR_ASSIGN(AEROSPIKE_ERR_QUERY_QUEUE_FULL); break; case CITRUSLEAF_FAIL_QUERY_TIMEOUT: // TODO - is this ok? // Conflate with client timeout - apps won't care which was first. ERR_ASSIGN(AEROSPIKE_ERR_TIMEOUT); break; case CITRUSLEAF_FAIL_QUERY_GENERIC: ERR_ASSIGN(AEROSPIKE_ERR_QUERY); break; default: if (rc < 0) { // TODO - what about CITRUSLEAF_FAIL_ASYNCQ_FULL? ERR_ASSIGN(AEROSPIKE_ERR_CLIENT); } else if (rc == ETIMEDOUT) { ERR_ASSIGN(AEROSPIKE_ERR_TIMEOUT); } else { ERR_ASSIGN(AEROSPIKE_ERR_SERVER); } break; } return err->code; }