| % Licensed under the Apache License, Version 2.0 (the "License"); you may not |
| % use this file except in compliance with the License. You may obtain a copy of |
| % the License at |
| % |
| % http://www.apache.org/licenses/LICENSE-2.0 |
| % |
| % Unless required by applicable law or agreed to in writing, software |
| % distributed under the License is distributed on an "AS IS" BASIS, WITHOUT |
| % WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the |
| % License for the specific language governing permissions and limitations under |
| % the License. |
| |
| |
| -define(ERLFDB_ERROR(Reason), erlang:error({?MODULE, Reason})). |
| |
| |
| -define(ERLFDB_PACK(Tuple), erlfdb_tuple:pack(Tuple)). |
| -define(ERLFDB_PACK(Prefix, Tuple), erlfdb_tuple:pack(Tuple, Prefix)). |
| |
| -define(ERLFDB_RANGE(Prefix), |
| erlfdb_subspace:range(erlfdb_subspace:create({}, Prefix))). |
| -define(ERLFDB_RANGE(Prefix, Term), |
| erlfdb_subspace:range(erlfdb_subspace:create({Term}, Prefix))). |
| |
| -define(ERLFDB_EXTEND(Prefix, Term), erlfdb_tuple:pack({Term}, Prefix)). |
| |
| -define(ERLFDB_EXTRACT(Prefix, Packed), (fun() -> |
| __PrefixLen = size(Prefix), |
| <<Prefix:__PrefixLen/binary, __Tail/binary>> = Packed, |
| erlfdb_tuple:unpack(__Tail) |
| end)()). |
| |
| |
| % Most of the retriable FDB errors. The list of errors can be generated with |
| % something like [erlfdb:get_error_string(C) || C <- lists:seq(1, 5000), |
| % erlfdb:error_predicate(retryable, C)]. |
| % |
| -define(ERLFDB_TIMED_OUT, 1004). |
| -define(ERLFDB_TRANSACTION_TOO_OLD, 1007). |
| -define(ERLFDB_FUTURE_VERSION, 1009). |
| -define(ERLFDB_NOT_COMMITTED, 1020). |
| -define(ERLFDB_COMMIT_UNKNOWN_RESULT, 1021). |
| -define(ERLFDB_TRANSACTION_CANCELLED, 1025). |
| -define(ERLFDB_TRANSACTION_TIMED_OUT, 1031). |
| -define(ERLFDB_PROCESS_BEHIND, 1037). |
| -define(ERLFDB_DATABASE_LOCKED, 1038). |
| -define(ERLFDB_CLUSTER_VERSION_CHANGED, 1039). |
| -define(ERLFDB_PROXY_MEMORY_LIMIT_EXCEEDED, 1042). |
| -define(ERLFDB_BATCH_TRANSACTION_THROTTLED, 1051). |
| -define(ERLFDB_TAG_THROTTLED, 1213). |
| -define(ERLFDB_TRANSACTION_TOO_LARGE, 2101). |
| |
| % The list is the exact result from calling `error_predicate/2` and does not |
| % include ?TRANSACTION_TIMED_OUT. In some cases it may make sense to also |
| % consider that error as retryable. |
| % |
| -define(ERLFDB_IS_RETRYABLE(Code), ( |
| (Code == ?ERLFDB_TRANSACTION_TOO_OLD) orelse |
| (Code == ?ERLFDB_FUTURE_VERSION) orelse |
| (Code == ?ERLFDB_NOT_COMMITTED) orelse |
| (Code == ?ERLFDB_COMMIT_UNKNOWN_RESULT) orelse |
| (Code == ?ERLFDB_PROCESS_BEHIND) orelse |
| (Code == ?ERLFDB_DATABASE_LOCKED) orelse |
| (Code == ?ERLFDB_CLUSTER_VERSION_CHANGED) orelse |
| (Code == ?ERLFDB_PROXY_MEMORY_LIMIT_EXCEEDED) orelse |
| (Code == ?ERLFDB_BATCH_TRANSACTION_THROTTLED) orelse |
| (Code == ?ERLFDB_TAG_THROTTLED) |
| )). |