SWC-DB  v0.5.12 C++ documentations
SWC-DB© (Super Wide Column Database) - High Performance Scalable Database (https://github.com/kashirin-alex/swc-db)
Error.cc
Go to the documentation of this file.
1 /*
2  * SWC-DB© Copyright since 2019 Alex Kashirin <kashirin.alex@gmail.com>
3  * License details at <https://github.com/kashirin-alex/swc-db/#license>
4  */
5 
6 
7 #include "swcdb/core/Compat.h"
8 #include "swcdb/core/Error.h"
9 #include <future>
10 
11 #if defined(__MINGW64__) || defined(_WIN32)
12  #include <Winsock2.h>
13  #include <ws2tcpip.h>
14 #else
15  #include <netdb.h>
16 #endif
17 
18 
19 
20 namespace SWC {
21 
22 
23 namespace {
24 
25 SWC_SHOULD_NOT_INLINE
26 void set_errors_map_core(std::unordered_map<int, const char *>& tmp_map) {
27  tmp_map.insert({
28 
29  { Error::EXCEPTION_BAD, "Bad Exception" },
30  { Error::EXCEPTION_UNKNOWN, "Unknown Exception" },
31  { Error::UNPOSSIBLE, "But that's unpossible!" },
32  { Error::FAILED_EXPECTATION, "Failed Expectation" },
33 
34  { Error::OK, "ok" },
35 
36  { Error::IO_ERROR, "i/o error" },
37  { Error::BAD_MEMORY_ALLOCATION, "bad memory allocation"},
38  { Error::BAD_FUNCTION, "bad function"},
39  { Error::BAD_POINTER, "bad pointer"},
40  { Error::BAD_CAST, "bad cast"},
41  { Error::BAD_FORMAT, "bad format"},
42  { Error::BAD_REGEXP, "bad regexp"},
43  { Error::BAD_LOGIC, "bad logic"},
44 
45  { Error::CANCELLED, "cancelled"},
46  { Error::NOT_ALLOWED, "not allowed" },
47  { Error::INVALID_ARGUMENT, "invalid argument" },
48  { Error::INCOMPATIBLE_OPTIONS, "incompatible options" },
49 
50  { Error::SERIALIZATION_INPUT_OVERRUN, "SERIALIZATION input overrun" },
51  { Error::CHECKSUM_MISMATCH, "checksum mismatch" }
52 
53  });
54 }
55 
56 SWC_SHOULD_NOT_INLINE
57 void set_errors_map_core_comm(std::unordered_map<int, const char *>& tmp_map) {
58  tmp_map.insert({
59 
60  { Error::COMM_NOT_CONNECTED, "COMM not connected" },
61  { Error::COMM_CONNECT_ERROR, "COMM connect error" },
62  { Error::COMM_SEND_ERROR, "COMM send error" },
63  { Error::COMM_HEADER_CHECKSUM_MISMATCH, "COMM header checksum mismatch" },
64  { Error::COMM_BAD_HEADER, "COMM bad header" },
65 
66  { Error::PROTOCOL_ERROR, "protocol error" },
67  { Error::REQUEST_TRUNCATED_HEADER, "request truncated header" },
68  { Error::REQUEST_TRUNCATED_PAYLOAD, "request truncated payload" },
69  { Error::REQUEST_TIMEOUT, "request timeout" },
70  { Error::NOT_IMPLEMENTED, "not implemented"},
71 
72  { Error::ENCODER_ENCODE, "encoder decode-error" },
73  { Error::ENCODER_DECODE, "encoder encode-error" }
74 
75  });
76 }
77 
78 SWC_SHOULD_NOT_INLINE
79 void set_errors_map_core_config(std::unordered_map<int, const char *>& tmp_map) {
80  tmp_map.insert({
81 
82  { Error::CONFIG_BAD_CFG_FILE, "bad cfg file"},
83  { Error::CONFIG_GET_ERROR, "failed to get config value"},
84  { Error::CONFIG_BAD_VALUE, "bad config value"}
85 
86  });
87 }
88 
89 SWC_SHOULD_NOT_INLINE
90 void set_errors_map_services(std::unordered_map<int, const char *>& tmp_map) {
91  tmp_map.insert({
92 
93  { Error::SERVER_NOT_READY, "server not ready" },
94  { Error::SERVER_SHUTTING_DOWN, "server shutting down" },
95  { Error::SERVER_MEMORY_LOW, "server low on memory" },
96 
97  { Error::MNGR_NOT_ACTIVE, "Manager not active for the duty" },
98  { Error::MNGR_NOT_INITIALIZED, "Manager is initializing" },
99 
100  { Error::RGR_NOT_READY, "Ranger is not ready, lacks id"},
101  { Error::RGR_NOT_LOADED_RANGE, "Ranger range id not loaded"},
102  { Error::RGR_DELETED_RANGE, "Ranger range state deleted"},
103 
104  { Error::FS_BAD_FILE_HANDLE, "FS bad file handle" },
105  { Error::FS_PERMISSION_DENIED, "FS permission denied" },
106  { Error::FS_EOF, "FS end of file" },
107  { Error::FS_PATH_NOT_FOUND, "FS destination path" }
108 
109  });
110 }
111 
112 SWC_SHOULD_NOT_INLINE
113 void set_errors_map_db(std::unordered_map<int, const char *>& tmp_map) {
114  tmp_map.insert({
115 
116  { Error::COLUMN_NOT_READY, "Column is not ready"},
117  { Error::COLUMN_NOT_EXISTS, "Column does not exist"},
118  { Error::COLUMN_REACHED_ID_LIMIT, "Columd ID max-reached"},
119  { Error::COLUMN_MARKED_REMOVED, "Column is being removed"},
120  { Error::COLUMN_UNKNOWN_GET_FLAG, "unknown get column flag!"},
121 
122  { Error::COLUMN_SCHEMA_NAME_EXISTS, "Schema column name already exists!"},
123  { Error::COLUMN_SCHEMA_NAME_NOT_EXISTS, "Schema column name doesn't exist!"},
124  { Error::COLUMN_SCHEMA_BAD_SAVE, "Schema for save not matches saved"},
125  { Error::COLUMN_SCHEMA_NAME_EMPTY, "Schema's column name cannot be empty"},
126  { Error::COLUMN_SCHEMA_NAME_NOT_CORRES, "Schema's column name not correspond"},
127  { Error::COLUMN_SCHEMA_ID_EMPTY, "Schema's column id cannot be empty"},
128  { Error::COLUMN_SCHEMA_ID_EXISTS, "Schema's column id already exists!"},
129  { Error::COLUMN_SCHEMA_NOT_DIFFERENT, "Schemas expected to be different"},
130  { Error::COLUMN_SCHEMA_MISSING, "cid's Schema is missing"},
131  { Error::COLUMN_SCHEMA_IS_SYSTEM, "Action not allowed on system schema"},
132  { Error::COLUMN_CHANGE_INCOMPATIBLE, "Schema seq/type/sysname incompatible"},
133 
134  { Error::RANGE_NOT_FOUND, "No corresponding range"},
135  { Error::RANGE_CELLSTORES, "Cellstores had Errors"},
136  { Error::RANGE_COMMITLOG, "Commitlog had Errors"},
137  { Error::RANGE_BAD_INTERVAL, "Partial Write, bad range interval begin /& end"},
138  { Error::RANGE_BAD_CELLS_INPUT, "Malformed Cells-Input"},
139 
140  { Error::SQL_PARSE_ERROR, "SQL parse error" },
141  { Error::SQL_BAD_LOAD_FILE_FORMAT, "SQL bad load file format" },
142 
143  { Error::CLIENT_DATA_REMAINED, "Data remained on client input" },
144  { Error::CLIENT_MISMATCHED_CID, "cid of response mismatching the cid of request"},
145  { Error::CLIENT_STOPPING, "client stopping"}
146 
147  });
148 }
149 
150 SWC_SHOULD_NOT_INLINE
151 std::unordered_map<int, const char *> get_errors_map() {
152  std::unordered_map<int, const char *> tmp_map;
153  tmp_map.reserve(74);
154  set_errors_map_core(tmp_map);
155  set_errors_map_core_config(tmp_map);
156  set_errors_map_core_comm(tmp_map);
157  set_errors_map_services(tmp_map);
158  set_errors_map_db(tmp_map);
159  return tmp_map;
160 }
161 
162 
163 
164 const std::unordered_map<int, const char *> text_map = get_errors_map();
165 
166 static const char ERROR_NOT_REGISTERED[] = "ERROR NOT REGISTERED";
167 
168 } // local namespace
169 
170 
171 
172 SWC_SHOULD_NOT_INLINE
173 const char* Error::get_text(const int err) noexcept {
174  const char* text = nullptr;
175  if(err <= SWC_ERRNO_SYS_END) {
176  text = strerror(err);
177  } else if(err <= SWC_ERRNO_FUTURE_END) {
178  text = std::future_error(
179  std::future_errc(err - SWC_ERRNO_FUTURE_BEGIN)).what();
180  } else if(err <= SWC_ERRNO_EAI_END) {
181  text = gai_strerror(-(err - SWC_ERRNO_EAI_BEGIN));
182  } else if(err >= SWC_ERRNO_APP_BEGIN && err <= SWC_ERRNO_APP_END) {
183  auto it = text_map.find(err);
184  if(it != text_map.cend())
185  text = it->second;
186  }
187  return text ? text : ERROR_NOT_REGISTERED;
188 }
189 
190 SWC_SHOULD_NOT_INLINE
191 void Error::print(std::ostream& out, int err) {
192  out << "error=" << err << '(' << get_text(err) << ')';
193 }
194 
195 
196 }
SWC::Error::BAD_FUNCTION
@ BAD_FUNCTION
Definition: Error.h:49
SWC::Error::SQL_PARSE_ERROR
@ SQL_PARSE_ERROR
Definition: Error.h:122
SWC::Error::RGR_NOT_LOADED_RANGE
@ RGR_NOT_LOADED_RANGE
Definition: Error.h:91
SWC::Error::COLUMN_SCHEMA_NAME_NOT_EXISTS
@ COLUMN_SCHEMA_NAME_NOT_EXISTS
Definition: Error.h:105
SWC::Error::SQL_BAD_LOAD_FILE_FORMAT
@ SQL_BAD_LOAD_FILE_FORMAT
Definition: Error.h:123
SWC::Error::REQUEST_TIMEOUT
@ REQUEST_TIMEOUT
Definition: Error.h:73
SWC::Error::COLUMN_SCHEMA_ID_EMPTY
@ COLUMN_SCHEMA_ID_EMPTY
Definition: Error.h:109
SWC::Error::SERVER_SHUTTING_DOWN
@ SERVER_SHUTTING_DOWN
Definition: Error.h:84
SWC::Error::RGR_NOT_READY
@ RGR_NOT_READY
Definition: Error.h:90
SWC::Error::COLUMN_SCHEMA_IS_SYSTEM
@ COLUMN_SCHEMA_IS_SYSTEM
Definition: Error.h:113
SWC::Error::COLUMN_SCHEMA_NOT_DIFFERENT
@ COLUMN_SCHEMA_NOT_DIFFERENT
Definition: Error.h:111
SWC::Error::FS_PERMISSION_DENIED
@ FS_PERMISSION_DENIED
Definition: Error.h:95
SWC::Error::get_text
const char * get_text(const int err) noexcept
Definition: Error.cc:173
SWC_ERRNO_EAI_END
#define SWC_ERRNO_EAI_END
Definition: Error.h:32
SWC::Error::FAILED_EXPECTATION
@ FAILED_EXPECTATION
Definition: Error.h:43
SWC::Error::CONFIG_BAD_CFG_FILE
@ CONFIG_BAD_CFG_FILE
Definition: Error.h:79
SWC_ERRNO_EAI_BEGIN
#define SWC_ERRNO_EAI_BEGIN
Definition: Error.h:31
SWC::Error::FS_PATH_NOT_FOUND
@ FS_PATH_NOT_FOUND
Definition: Error.h:97
SWC::Error::UNPOSSIBLE
@ UNPOSSIBLE
Definition: Error.h:42
SWC::Error::RANGE_COMMITLOG
@ RANGE_COMMITLOG
Definition: Error.h:118
SWC::Error::RANGE_CELLSTORES
@ RANGE_CELLSTORES
Definition: Error.h:117
SWC::Error::RGR_DELETED_RANGE
@ RGR_DELETED_RANGE
Definition: Error.h:92
SWC::Error::SERIALIZATION_INPUT_OVERRUN
@ SERIALIZATION_INPUT_OVERRUN
Definition: Error.h:61
SWC::Error::COMM_SEND_ERROR
@ COMM_SEND_ERROR
Definition: Error.h:66
SWC::Error::ENCODER_DECODE
@ ENCODER_DECODE
Definition: Error.h:77
SWC::Error::COLUMN_SCHEMA_NAME_EMPTY
@ COLUMN_SCHEMA_NAME_EMPTY
Definition: Error.h:107
SWC::Error::COLUMN_SCHEMA_BAD_SAVE
@ COLUMN_SCHEMA_BAD_SAVE
Definition: Error.h:106
SWC::Error::BAD_REGEXP
@ BAD_REGEXP
Definition: Error.h:53
SWC::Error::OK
@ OK
Definition: Error.h:45
SWC::Error::FS_EOF
@ FS_EOF
Definition: Error.h:96
SWC::Error::BAD_POINTER
@ BAD_POINTER
Definition: Error.h:50
SWC
The SWC-DB C++ namespace 'SWC'.
Definition: main.cc:12
SWC::Error::MNGR_NOT_INITIALIZED
@ MNGR_NOT_INITIALIZED
Definition: Error.h:88
SWC_ERRNO_APP_END
#define SWC_ERRNO_APP_END
Definition: Error.h:35
SWC::Error::EXCEPTION_UNKNOWN
@ EXCEPTION_UNKNOWN
Definition: Error.h:41
SWC::Error::BAD_LOGIC
@ BAD_LOGIC
Definition: Error.h:54
SWC::Error::BAD_FORMAT
@ BAD_FORMAT
Definition: Error.h:52
SWC::Error::SERVER_MEMORY_LOW
@ SERVER_MEMORY_LOW
Definition: Error.h:85
SWC::Error::RANGE_BAD_CELLS_INPUT
@ RANGE_BAD_CELLS_INPUT
Definition: Error.h:120
SWC::Error::FS_BAD_FILE_HANDLE
@ FS_BAD_FILE_HANDLE
Definition: Error.h:94
Compat.h
Error.h
SWC::Error::COMM_CONNECT_ERROR
@ COMM_CONNECT_ERROR
Definition: Error.h:65
SWC::Error::ENCODER_ENCODE
@ ENCODER_ENCODE
Definition: Error.h:76
SWC::Error::COLUMN_NOT_READY
@ COLUMN_NOT_READY
Definition: Error.h:99
SWC::Error::CLIENT_DATA_REMAINED
@ CLIENT_DATA_REMAINED
Definition: Error.h:125
SWC::Error::CLIENT_STOPPING
@ CLIENT_STOPPING
Definition: Error.h:127
SWC::Error::COLUMN_CHANGE_INCOMPATIBLE
@ COLUMN_CHANGE_INCOMPATIBLE
Definition: Error.h:114
SWC::Error::COLUMN_SCHEMA_NAME_NOT_CORRES
@ COLUMN_SCHEMA_NAME_NOT_CORRES
Definition: Error.h:108
SWC::Error::COMM_NOT_CONNECTED
@ COMM_NOT_CONNECTED
Definition: Error.h:64
SWC::Error::COLUMN_NOT_EXISTS
@ COLUMN_NOT_EXISTS
Definition: Error.h:100
SWC::Error::CONFIG_BAD_VALUE
@ CONFIG_BAD_VALUE
Definition: Error.h:81
SWC_ERRNO_APP_BEGIN
#define SWC_ERRNO_APP_BEGIN
Definition: Error.h:34
SWC_ERRNO_SYS_END
#define SWC_ERRNO_SYS_END
Definition: Error.h:26
SWC::Error::BAD_CAST
@ BAD_CAST
Definition: Error.h:51
SWC::Error::EXCEPTION_BAD
@ EXCEPTION_BAD
Definition: Error.h:40
SWC::Error::COLUMN_SCHEMA_MISSING
@ COLUMN_SCHEMA_MISSING
Definition: Error.h:112
SWC::Error::COMM_BAD_HEADER
@ COMM_BAD_HEADER
Definition: Error.h:68
SWC::Error::CHECKSUM_MISMATCH
@ CHECKSUM_MISMATCH
Definition: Error.h:62
SWC::Error::COLUMN_SCHEMA_NAME_EXISTS
@ COLUMN_SCHEMA_NAME_EXISTS
Definition: Error.h:104
SWC::Error::RANGE_NOT_FOUND
@ RANGE_NOT_FOUND
Definition: Error.h:116
SWC::Error::COLUMN_MARKED_REMOVED
@ COLUMN_MARKED_REMOVED
Definition: Error.h:102
SWC::Error::NOT_IMPLEMENTED
@ NOT_IMPLEMENTED
Definition: Error.h:74
SWC_ERRNO_FUTURE_END
#define SWC_ERRNO_FUTURE_END
Definition: Error.h:29
SWC_ERRNO_FUTURE_BEGIN
#define SWC_ERRNO_FUTURE_BEGIN
Definition: Error.h:28
SWC::Error::COLUMN_UNKNOWN_GET_FLAG
@ COLUMN_UNKNOWN_GET_FLAG
Definition: Error.h:103
SWC::Error::MNGR_NOT_ACTIVE
@ MNGR_NOT_ACTIVE
Definition: Error.h:87
SWC::Error::REQUEST_TRUNCATED_HEADER
@ REQUEST_TRUNCATED_HEADER
Definition: Error.h:71
SWC::Error::NOT_ALLOWED
@ NOT_ALLOWED
Definition: Error.h:57
SWC::Error::RANGE_BAD_INTERVAL
@ RANGE_BAD_INTERVAL
Definition: Error.h:119
SWC::Error::CONFIG_GET_ERROR
@ CONFIG_GET_ERROR
Definition: Error.h:80
SWC::Error::COLUMN_SCHEMA_ID_EXISTS
@ COLUMN_SCHEMA_ID_EXISTS
Definition: Error.h:110
SWC::Error::print
void print(std::ostream &out, int err)
Definition: Error.cc:191
SWC::Error::COMM_HEADER_CHECKSUM_MISMATCH
@ COMM_HEADER_CHECKSUM_MISMATCH
Definition: Error.h:67
SWC::Error::CANCELLED
@ CANCELLED
Definition: Error.h:56
SWC::Error::REQUEST_TRUNCATED_PAYLOAD
@ REQUEST_TRUNCATED_PAYLOAD
Definition: Error.h:72
SWC::Error::INVALID_ARGUMENT
@ INVALID_ARGUMENT
Definition: Error.h:58
SWC::Error::IO_ERROR
@ IO_ERROR
Definition: Error.h:47
SWC::Error::PROTOCOL_ERROR
@ PROTOCOL_ERROR
Definition: Error.h:70
SWC::Error::COLUMN_REACHED_ID_LIMIT
@ COLUMN_REACHED_ID_LIMIT
Definition: Error.h:101
SWC::Error::INCOMPATIBLE_OPTIONS
@ INCOMPATIBLE_OPTIONS
Definition: Error.h:59
SWC::Error::SERVER_NOT_READY
@ SERVER_NOT_READY
Definition: Error.h:83
SWC::Error::BAD_MEMORY_ALLOCATION
@ BAD_MEMORY_ALLOCATION
Definition: Error.h:48
SWC::Error::CLIENT_MISMATCHED_CID
@ CLIENT_MISMATCHED_CID
Definition: Error.h:126