gpcontrib/gpcloud/include/s3exception.h (186 lines of code) (raw):

#ifndef __S3_EXCEPTION_H__ #define __S3_EXCEPTION_H__ #include "s3common_headers.h" class S3Exception { public: string file; uint64_t line; string func; S3Exception() : line(0) { } virtual ~S3Exception() { } virtual string getCode() { return ""; } virtual string getMessage() { return ""; } virtual string getFullMessage() { std::stringstream errorMessage; errorMessage << this->getMessage() << ", Function: " << this->func << ", File: " << this->file << "(" << this->line << "). "; return errorMessage.str(); } virtual string getType() { return "S3Exception"; } }; // HTTP request failed // InternalError, RequestTimeout or ServiceUnavailable class S3ConnectionError : public S3Exception { public: S3ConnectionError(const string& msg) : message(msg) { } virtual ~S3ConnectionError() { } virtual string getMessage() { return "Server connection failed: " + message; } virtual string getType() { return "S3ConnectionError"; } string message; }; class S3ResolveError : public S3Exception { public: S3ResolveError(const string& msg) : message(msg) { } virtual ~S3ResolveError() { } virtual string getMessage() { return "Server connection failed: " + message; } virtual string getType() { return "S3ResolveError"; } string message; }; class S3FailedAfterRetry : public S3Exception { public: S3FailedAfterRetry(const string& url, uint64_t times, string msg) : requestUrl(url), retryTimes(times), message(msg) { } virtual ~S3FailedAfterRetry() { } virtual string getMessage() { return "Request failed after " + std::to_string((unsigned long long)retryTimes) + " attempts. Message: " + message; } virtual string getType() { return "S3FailedAfterRetry"; } string requestUrl; uint64_t retryTimes; string message; }; // HTTP request successes, but the data is not received completely. class S3PartialResponseError : public S3Exception { public: S3PartialResponseError(uint64_t expected, uint64_t received) : expectedLength(expected), receivedLength(received) { } virtual ~S3PartialResponseError() { } virtual string getMessage() { return "Response is not fully received. Expected: " + std::to_string((unsigned long long)expectedLength) + ", actual received: " + std::to_string((unsigned long long)receivedLength); } virtual string getType() { return "S3PartialResponseError"; } uint64_t expectedLength; uint64_t receivedLength; }; // User presses Ctrl + C or the transaction is aborted. class S3QueryAbort : public S3Exception { public: S3QueryAbort() : message("Query is aborted") { } S3QueryAbort(const string& msg) : message(msg) { } virtual ~S3QueryAbort() { } virtual string getMessage() { return message; } virtual string getType() { return "S3QueryAbort"; } string message; }; // AWS S3 responds errors // AccessDenied, NoSuchBucket or other kinds of InvalidRequest class S3LogicError : public S3Exception { public: S3LogicError(string code, string msg) : message(std::move(msg)), awscode(code) { } virtual ~S3LogicError() { } virtual string getCode() { return awscode; } virtual string getMessage() { return "AWS returns error " + awscode + " : " + message; } virtual string getType() { return "S3LogicError"; } string message; string awscode; }; class S3RuntimeError : public S3Exception { public: S3RuntimeError(const string& msg) : message(msg) { } virtual ~S3RuntimeError() { } virtual string getMessage() { return "Unexpected error: " + message; } virtual string getType() { return "S3RuntimeError"; } string message; }; class S3ConfigError : public S3Exception { public: S3ConfigError(const string& msg, const string& field) : message(msg) { } virtual ~S3ConfigError() { } virtual string getMessage() { return message; } virtual string getType() { return "S3ConfigError"; } string message; }; class S3MemoryOverLimit : public S3Exception { public: S3MemoryOverLimit(uint64_t limit, uint64_t allocSize) : limit(limit), allocSize(allocSize) { } virtual ~S3MemoryOverLimit() { } virtual string getMessage() { return "Memory allocation is over limit, requested: " + std::to_string((unsigned long long)allocSize) + ", limit: " + std::to_string((unsigned long long)limit); } virtual string getType() { return "S3MemoryOverLimit"; } uint64_t limit; uint64_t allocSize; }; class S3AllocationError : public S3Exception { public: S3AllocationError(uint64_t allocSize) : allocSize(allocSize) { } virtual ~S3AllocationError() { } virtual string getMessage() { return "S3Alloc failed"; } virtual string getType() { return "S3AllocationError"; } uint64_t allocSize; }; #endif