text: /*
   * error_definitions.h
   *
   * This source file is part of the FoundationDB open source project
   *
   * Copyright 2013-2018 Apple Inc. and the FoundationDB project authors
   *
   * 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.
   */
  
  #ifdef ERROR
  
  // SOMEDAY: Split this into flow, fdbclient, fdbserver error headers?
  
  // Error codes defined here are primarily for programmatic use, not debugging: a separate
  // error should be defined if and only if there is a sensible situation in which code could
  // catch and react specifically to that error.  So for example there is only one
  // internal_error code even though there are a huge number of internal errors; extra
  // information is logged in the trace file.
  
  // 1xxx Normal failure (plausibly these should not even be "errors", but they are failures of
  //   the way operations are currently defined)
  // clang-format off
  ERROR( success, 0, "Success" )
  ERROR( end_of_stream, 1, "End of stream" )
  ERROR( operation_failed, 1000, "Operation failed")
  ERROR( wrong_shard_server, 1001, "Shard is not available from this server")
  ERROR( operation_obsolete, 1002, "Operation result no longer necessary")
  ERROR( cold_cache_server, 1003, "Cache server is not warm for this range")
  ERROR( timed_out, 1004, "Operation timed out" )
  ERROR( coordinated_state_conflict, 1005, "Conflict occurred while changing coordination information" )
  ERROR( all_alternatives_failed, 1006, "All alternatives failed" )
  ERROR( transaction_too_old, 1007, "Transaction is too old to perform reads or be committed" )
  ERROR( no_more_servers, 1008, "Not enough physical servers available" )
  ERROR( future_version, 1009, "Request for future version" )
  ERROR( movekeys_conflict, 1010, "Conflicting attempts to change data distribution" )
  ERROR( tlog_stopped, 1011, "TLog stopped" )
  ERROR( server_request_queue_full, 1012, "Server request queue is full" )
  ERROR( not_committed, 1020, "Transaction not committed due to conflict with another transaction" )
  ERROR( commit_unknown_result, 1021, "Transaction may or may not have committed" )
  ERROR( transaction_cancelled, 1025, "Operation aborted because the transaction was cancelled" )
  ERROR( connection_failed, 1026, "Network connection failed" )
  ERROR( coordinators_changed, 1027, "Coordination servers have changed" )
  ERROR( new_coordinators_timed_out, 1028, "New coordination servers did not respond in a timely way" )
  ERROR( watch_cancelled, 1029, "Watch cancelled because storage server watch limit exceeded" )
  ERROR( request_maybe_delivered, 1030, "Request may or may not have been delivered" )
  ERROR( transaction_timed_out, 1031, "Operation aborted because the transaction timed out" )
  ERROR( too_many_watches, 1032, "Too many watches currently set" )
  ERROR( locality_information_unavailable, 1033, "Locality information not available" )
  ERROR( watches_disabled, 1034, "Watches cannot be set if read your writes is disabled" )
  ERROR( default_error_or, 1035, "Default error for an ErrorOr object" )
  ERROR( accessed_unreadable, 1036, "Read or wrote an unreadable key" )
  ERROR( process_behind, 1037, "Storage process does not have recent mutations" )
  ERROR( database_locked, 1038, "Database is locked" )
  ERROR( cluster_version_changed, 1039, "The protocol version of the cluster has changed" )
  ERROR( external_client_already_loaded, 1040, "External client has already been loaded" )
  ERROR( lookup_failed, 1041, "DNS lookup failed" )
  ERROR( proxy_memory_limit_exceeded, 1042, "CommitProxy commit memory limit exceeded" )
  ERROR( shutdown_in_progress, 1043, "Operation no longer supported due to shutdown" )
  ERROR( serialization_failed, 1044, "Failed to deserialize an object" )
  ERROR( connection_unreferenced, 1048, "No peer references for connection" )
  ERROR( connection_idle, 1049, "Connection closed after idle timeout" )
  ERROR( disk_adapter_reset, 1050, "The disk queue adpater reset" )
  ERROR( batch_transaction_throttled, 1051, "Batch GRV request rate limit exceeded")
  ERROR( dd_cancelled, 1052, "Data distribution components cancelled")
  ERROR( dd_not_found, 1053, "Data distributor not found")
  ERROR( wrong_connection_file, 1054, "Connection file mismatch")
  ERROR( version_already_compacted, 1055, "The requested changes have been compacted away")
  ERROR( local_config_changed, 1056, "Local configuration file has changed. Restart and apply these changes" )
  ERROR( failed_to_reach_quorum, 1057, "Failed to reach quorum from configuration database nodes. Retry sending these requests" )
  
  ERROR( broken_promise, 1100, "Broken promise" )
  ERROR( operation_cancelled, 1101, "Asynchronous operation cancelled" )
  ERROR( future_released, 1102, "Future has been released" )
  ERROR( connection_leaked, 1103, "Connection object leaked" )
  
  ERROR( recruitment_failed, 1200, "Recruitment of a server failed" )   // Be careful, catching this will delete the data of a storage server or tlog permanently
  ERROR( move_to_removed_server, 1201, "Attempt to move keys to a storage server that was removed" )
  ERROR( worker_removed, 1202, "Normal worker shut down" )   // Be careful, catching this will delete the data of a storage server or tlog permanently
  ERROR( master_recovery_failed, 1203, "Master recovery failed")
  ERROR( master_max_versions_in_flight, 1204, "Master hit maximum number of versions in flight" )
  ERROR( master_tlog_failed, 1205, "Master terminating because a TLog failed" )   // similar to tlog_stopped, but the tlog has actually died
  ERROR( worker_recovery_failed, 1206, "Recovery of a worker process failed" )
  ERROR( please_reboot, 1207, "Reboot of server process requested" )
  ERROR( please_reboot_delete, 1208, "Reboot of server process requested, with deletion of state" )
  ERROR( commit_proxy_failed, 1209, "Master terminating because a Commit CommitProxy failed" )
  ERROR( master_resolver_failed, 1210, "Master terminating because a Resolver failed" )
  ERROR( server_overloaded, 1211, "Server is under too much load and cannot respond" )
  ERROR( master_backup_worker_failed, 1212, "Master terminating because a backup worker failed")
  ERROR( tag_throttled, 1213, "Transaction tag is being throttled" )
  ERROR( grv_proxy_failed, 1214, "Master terminating because a GRV CommitProxy failed" )
  ERROR( dd_tracker_cancelled, 1215, "The data distribution tracker has been cancelled" )
  ERROR( failed_to_progress, 1216, "Process has failed to make sufficient progress" )
  
  // 15xx Platform errors
  ERROR( platform_error, 1500, "Platform error" )
  ERROR( large_alloc_failed, 1501, "Large block allocation failed" )
  ERROR( performance_counter_error, 1502, "QueryPerformanceCounter error" )
  
  ERROR( io_error, 1510, "Disk i/o operation failed" )
  ERROR( file_not_found, 1511, "File not found" )
  ERROR( bind_failed, 1512, "Unable to bind to network" )
  ERROR( file_not_readable, 1513, "File could not be read" )
  ERROR( file_not_writable, 1514, "File could not be written" )
  ERROR( no_cluster_file_found, 1515, "No cluster file found in current directory or default location" )
  ERROR( file_too_large, 1516, "File too large to be read" )
  ERROR( non_sequential_op, 1517, "Non sequential file operation not allowed" )
  ERROR( http_bad_response, 1518, "HTTP response was badly formed" )
  ERROR( http_not_accepted, 1519, "HTTP request not accepted" )
  ERROR( checksum_failed, 1520, "A data checksum failed" )
  ERROR( io_timeout, 1521, "A disk IO operation failed to complete in a timely manner" )
  ERROR( file_corrupt, 1522, "A structurally corrupt data file was detected" )
  ERROR( http_request_failed, 1523, "HTTP response code not received or indicated failure" )
  ERROR( http_auth_failed, 1524, "HTTP request failed due to bad credentials" )
  ERROR( http_bad_request_id, 1525, "HTTP response contained an unexpected X-Request-ID header" )
  
  // 2xxx Attempt (presumably by a _client_) to do something illegal.  If an error is known to
  // be internally caused, it should be 41xx
  ERROR( client_invalid_operation, 2000, "Invalid API call" )
  ERROR( commit_read_incomplete, 2002, "Commit with incomplete read" )
  ERROR( test_specification_invalid, 2003, "Invalid test specification" )
  ERROR( key_outside_legal_range, 2004, "Key outside legal range" )
  ERROR( inverted_range, 2005, "Range begin key larger than end key" )
  ERROR( invalid_option_value, 2006, "Option set with an invalid value" )
  ERROR( invalid_option, 2007, "Option not valid in this context" )
  ERROR( network_not_setup, 2008, "Action not possible before the network is configured" )
  ERROR( network_already_setup, 2009, "Network can be configured only once" )
  ERROR( read_version_already_set, 2010, "Transaction already has a read version set" )
  ERROR( version_invalid, 2011, "Version not valid" )
  ERROR( range_limits_invalid, 2012, "Range limits not valid" )
  ERROR( invalid_database_name, 2013, "Database name must be 'DB'" )
  ERROR( attribute_not_found, 2014, "Attribute not found" )
  ERROR( future_not_set, 2015, "Future not ready" )
  ERROR( future_not_error, 2016, "Future not an error" )
  ERROR( used_during_commit, 2017, "Operation issued while a commit was outstanding" )
  ERROR( invalid_mutation_type, 2018, "Unrecognized atomic mutation type" )
  ERROR( attribute_too_large, 2019, "Attribute too large for type int" )
  ERROR( transaction_invalid_version, 2020, "Transaction does not have a valid commit version" )
  ERROR( no_commit_version, 2021, "Transaction is read-only and therefore does not have a commit version" )
  ERROR( environment_variable_network_option_failed, 2022, "Environment variable network option could not be set" )
  ERROR( transaction_read_only, 2023, "Attempted to commit a transaction specified as read-only" )
  ERROR( invalid_cache_eviction_policy, 2024, "Invalid cache eviction policy, only random and lru are supported" )
  ERROR( network_cannot_be_restarted, 2025, "Network can only be started once" )
  ERROR( blocked_from_network_thread, 2026, "Detected a deadlock in a callback called from the network thread" )
  ERROR( invalid_config_db_range_read, 2027, "Invalid configuration database range read" )
  ERROR( invalid_config_db_key, 2028, "Invalid configuration database key provided" )
  ERROR( invalid_config_path, 2029, "Invalid configuration path" )
  
  ERROR( incompatible_protocol_version, 2100, "Incompatible protocol version" )
  ERROR( transaction_too_large, 2101, "Transaction exceeds byte limit" )
  ERROR( key_too_large, 2102, "Key length exceeds limit" )
  ERROR( value_too_large, 2103, "Value length exceeds limit" )
  ERROR( connection_string_invalid, 2104, "Connection string invalid" )
  ERROR( address_in_use, 2105, "Local address in use" )
  ERROR( invalid_local_address, 2106, "Invalid local address" )
  ERROR( tls_error, 2107, "TLS error" )
  ERROR( unsupported_operation, 2108, "Operation is not supported" )
  ERROR( too_many_tags, 2109, "Too many tags set on transaction" )
  ERROR( tag_too_long, 2110, "Tag set on transaction is too long" )
  ERROR( too_many_tag_throttles, 2111, "Too many tag throttles have been created" )
  ERROR( special_keys_cross_module_read, 2112, "Special key space range read crosses modules. Refer to the `special_key_space_relaxed' transaction option for more details." )
  ERROR( special_keys_no_module_found, 2113, "Special key space range read does not intersect a module. Refer to the `special_key_space_relaxed' transaction option for more details." )
  ERROR( special_keys_write_disabled, 2114, "Special Key space is not allowed to write by default. Refer to the `special_key_space_enable_writes` transaction option for more details." )
  ERROR( special_keys_no_write_module_found, 2115, "Special key space key or keyrange in set or clear does not intersect a module" )
  ERROR( special_keys_cross_module_clear, 2116, "Special key space clear crosses modules" )
  ERROR( special_keys_api_failure, 2117, "Api call through special keys failed. For more information, call get on special key 0xff0xff/error_message to get a json string of the error message." )
  
  // 2200 - errors from bindings and official APIs
  ERROR( api_version_unset, 2200, "API version is not set" )
  ERROR( api_version_already_set, 2201, "API version may be set only once" )
  ERROR( api_version_invalid, 2202, "API version not valid" )
  ERROR( api_version_not_supported, 2203, "API version not supported" )
  ERROR( exact_mode_without_limits, 2210, "EXACT streaming mode requires limits, but none were given" )
  
  ERROR( invalid_tuple_data_type, 2250, "Unrecognized data type in packed tuple")
  ERROR( invalid_tuple_index, 2251, "Tuple does not have element at specified index")
  ERROR( key_not_in_subspace, 2252, "Cannot unpack key that is not in subspace" )
  ERROR( manual_prefixes_not_enabled, 2253, "Cannot specify a prefix unless manual prefixes are enabled" )
  ERROR( prefix_in_partition, 2254, "Cannot specify a prefix in a partition" )
  ERROR( cannot_open_root_directory, 2255, "Root directory cannot be opened" )
  ERROR( directory_already_exists, 2256, "Directory already exists" )
  ERROR( directory_does_not_exist, 2257, "Directory does not exist" )
  ERROR( parent_directory_does_not_exist, 2258, "Directory's parent does not exist" )
  ERROR( mismatched_layer, 2259, "Directory has already been created with a different layer string" )
  ERROR( invalid_directory_layer_metadata, 2260, "Invalid directory layer metadata" )
  ERROR( cannot_move_directory_between_partitions, 2261, "Directory cannot be moved between partitions" )
  ERROR( cannot_use_partition_as_subspace, 2262, "Directory partition cannot be used as subspace" )
  ERROR( incompatible_directory_version, 2263, "Directory layer was created with an incompatible version" )
  ERROR( directory_prefix_not_empty, 2264, "Database has keys stored at the prefix chosen by the automatic prefix allocator" )
  ERROR( directory_prefix_in_use, 2265, "Directory layer already has a conflicting prefix" )
  ERROR( invalid_destination_directory, 2266, "Target directory is invalid" )
  ERROR( cannot_modify_root_directory, 2267, "Root directory cannot be modified" )
  ERROR( invalid_uuid_size, 2268, "UUID is not sixteen bytes");
  
  // 2300 - backup and restore errors
  ERROR( backup_error, 2300, "Backup error")
  ERROR( restore_error, 2301, "Restore error")
  ERROR( backup_duplicate, 2311, "Backup duplicate request")
  ERROR( backup_unneeded, 2312, "Backup unneeded request")
  ERROR( backup_bad_block_size, 2313, "Backup file block size too small")
  ERROR( backup_invalid_url, 2314, "Backup Container URL invalid")
  ERROR( backup_invalid_info, 2315, "Backup Container info invalid")
  ERROR( backup_cannot_expire, 2316, "Cannot expire requested data from backup without violating minimum restorability")
  ERROR( backup_auth_missing, 2317, "Cannot find authentication details (such as a password or secret key) for the specified Backup Container URL")
  ERROR( backup_auth_unreadable, 2318, "Cannot read or parse one or more sources of authentication information for Backup Container URLs")
  ERROR( backup_does_not_exist, 2319, "Backup does not exist")
  ERROR( backup_not_filterable_with_key_ranges, 2320, "Backup before 6.3 cannot be filtered with key ranges")
  ERROR( backup_not_overlapped_with_keys_filter, 2321, "Backup key ranges doesn't overlap with key ranges filter")
  ERROR( restore_invalid_version, 2361, "Invalid restore version")
  ERROR( restore_corrupted_data, 2362, "Corrupted backup data")
  ERROR( restore_missing_data, 2363, "Missing backup data")
  ERROR( restore_duplicate_tag, 2364, "Restore duplicate request")
  ERROR( restore_unknown_tag, 2365, "Restore tag does not exist")
  ERROR( restore_unknown_file_type, 2366, "Unknown backup/restore file type")
  ERROR( restore_unsupported_file_version, 2367, "Unsupported backup file version")
  ERROR( restore_bad_read, 2368, "Unexpected number of bytes read")
  ERROR( restore_corrupted_data_padding, 2369, "Backup file has unexpected padding bytes")
  ERROR( restore_destination_not_empty, 2370, "Attempted to restore into a non-empty destination database")
  ERROR( restore_duplicate_uid, 2371, "Attempted to restore using a UID that had been used for an aborted restore")
  ERROR( task_invalid_version, 2381, "Invalid task version")
  ERROR( task_interrupted, 2382, "Task execution stopped due to timeout, abort, or completion by another worker")
  ERROR( invalid_encryption_key_file, 2383, "The provided encryption key file has invalid contents" )
  
  ERROR( key_not_found, 2400, "Expected key is missing")
  ERROR( json_malformed, 2401, "JSON string was malformed")
  ERROR( json_eof_expected, 2402, "JSON string did not terminate where expected")
  
  // 2500 - disk snapshot based backup errors
  ERROR( snap_disable_tlog_pop_failed,  2500, "Disk Snapshot error")
  ERROR( snap_storage_failed,  2501, "Failed to snapshot storage nodes")
  ERROR( snap_tlog_failed,  2502, "Failed to snapshot TLog nodes")
  ERROR( snap_coord_failed,  2503, "Failed to snapshot coordinator nodes")
  ERROR( snap_enable_tlog_pop_failed,  2504, "Disk Snapshot error")
  ERROR( snap_path_not_whitelisted, 2505, "Snapshot create binary path not whitelisted")
  ERROR( snap_not_fully_recovered_unsupported, 2506, "Unsupported when the cluster is not fully recovered")
  ERROR( snap_log_anti_quorum_unsupported, 2507, "Unsupported when log anti quorum is configured")
  ERROR( snap_with_recovery_unsupported, 2508, "Cluster recovery during snapshot operation not supported")
  ERROR( snap_invalid_uid_string, 2509, "The given uid string is not a 32-length hex string")
  
  // 4xxx Internal errors (those that should be generated only by bugs) are decimal 4xxx
  ERROR( unknown_error, 4000, "An unknown error occurred" )  // C++ exception not of type Error
  ERROR( internal_error, 4100, "An internal error occurred" )
  // clang-format on
  
  #undef ERROR
  #endif
  