couchbase 3.8.2 → 3.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/CMakeLists.txt +16 -1
- data/ext/cache/cpm/{CPM_0.42.0.cmake → CPM_0.43.1.cmake} +18 -2
- data/ext/cache/extconf_include.rb +6 -6
- data/ext/cache/mozilla-ca-bundle.crt +121 -55
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +136 -23
- data/ext/couchbase/cmake/APKBUILD.in +25 -4
- data/ext/couchbase/cmake/Bundler.cmake +143 -34
- data/ext/couchbase/cmake/CPM.cmake +126 -12
- data/ext/couchbase/cmake/Cache.cmake +7 -1
- data/ext/couchbase/cmake/CompilerOptions.cmake +1 -1
- data/ext/couchbase/cmake/CompilerWarnings.cmake +17 -6
- data/ext/couchbase/cmake/GrpcProtobuf.cmake +481 -0
- data/ext/couchbase/cmake/OpenSSL.cmake +82 -7
- data/ext/couchbase/cmake/Packaging.cmake +519 -65
- data/ext/couchbase/cmake/Protostellar.cmake +250 -0
- data/ext/couchbase/cmake/Sanitizers.cmake +61 -50
- data/ext/couchbase/cmake/StaticAnalyzers.cmake +16 -5
- data/ext/couchbase/cmake/TestFramework.cmake +283 -0
- data/ext/couchbase/cmake/TestFrameworkAddTests.cmake +51 -0
- data/ext/couchbase/cmake/Testing.cmake +27 -9
- data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +141 -8
- data/ext/couchbase/cmake/VersionInfo.cmake +50 -0
- data/ext/couchbase/cmake/build_config.hxx.in +2 -1
- data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +101 -23
- data/ext/couchbase/cmake/couchbase_cxx_client_static-config.cmake.in +7 -0
- data/ext/couchbase/cmake/couchbase_cxx_client_static.pc.in +2 -0
- data/ext/couchbase/cmake/gRPC_Generate.cmake +58 -0
- data/ext/couchbase/cmake/protobuf_Generate.cmake +69 -0
- data/ext/couchbase/cmake/require-git-checkout.cmake +25 -0
- data/ext/couchbase/cmake/tarball_glob.txt +49 -0
- data/ext/couchbase/core/agent_group.cxx +0 -8
- data/ext/couchbase/core/agent_group.hxx +0 -4
- data/ext/couchbase/core/analytics_stream.cxx +314 -0
- data/ext/couchbase/core/analytics_stream.hxx +129 -0
- data/ext/couchbase/core/analytics_stream_component.cxx +245 -0
- data/ext/couchbase/core/analytics_stream_component.hxx +67 -0
- data/ext/couchbase/core/app_telemetry_meter.cxx +25 -3
- data/ext/couchbase/core/app_telemetry_meter.hxx +77 -0
- data/ext/couchbase/core/app_telemetry_reporter.cxx +7 -6
- data/ext/couchbase/core/bucket.cxx +381 -87
- data/ext/couchbase/core/bucket.hxx +105 -25
- data/ext/couchbase/core/bucket_unit_test_api.hxx +57 -0
- data/ext/couchbase/core/capella.hxx +91 -0
- data/ext/couchbase/core/cluster.cxx +1551 -397
- data/ext/couchbase/core/cluster.hxx +39 -8
- data/ext/couchbase/core/cluster_agent.cxx +0 -8
- data/ext/couchbase/core/cluster_agent.hxx +0 -4
- data/ext/couchbase/core/cluster_options.hxx +26 -3
- data/ext/couchbase/core/collections_component.cxx +39 -15
- data/ext/couchbase/core/config_profiles.cxx +1 -1
- data/ext/couchbase/core/crud_component.cxx +2 -2
- data/ext/couchbase/core/crud_options.hxx +34 -0
- data/ext/couchbase/core/crypto/cbcrypto.cc +18 -13
- data/ext/couchbase/core/document_id_redaction.hxx +81 -0
- data/ext/couchbase/core/error_context/base_error_context.hxx +7 -6
- data/ext/couchbase/core/error_context/key_value.cxx +25 -2
- data/ext/couchbase/core/error_context/key_value.hxx +60 -33
- data/ext/couchbase/core/error_context/key_value_error_context.hxx +16 -15
- data/ext/couchbase/core/error_context/search.hxx +5 -0
- data/ext/couchbase/core/error_context/search_json.hxx +3 -0
- data/ext/couchbase/core/error_context/subdocument_error_context.hxx +19 -18
- data/ext/couchbase/core/error_context/view.hxx +5 -0
- data/ext/couchbase/core/free_form_http_request.cxx +237 -4
- data/ext/couchbase/core/free_form_http_request.hxx +41 -8
- data/ext/couchbase/core/http_component.cxx +300 -284
- data/ext/couchbase/core/http_component.hxx +0 -4
- data/ext/couchbase/core/impl/analytics.cxx +38 -5
- data/ext/couchbase/core/impl/analytics.hxx +34 -0
- data/ext/couchbase/core/impl/bootstrap_error.hxx +0 -3
- data/ext/couchbase/core/impl/collection.cxx +215 -202
- data/ext/couchbase/core/impl/collection_manager.cxx +1 -1
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +45 -18
- data/ext/couchbase/core/impl/error.cxx +22 -2
- data/ext/couchbase/core/impl/internal_analytics_stream_result.hxx +111 -0
- data/ext/couchbase/core/impl/internal_query_stream_result.hxx +110 -0
- data/ext/couchbase/core/impl/invoke_with_node_id.hxx +15 -7
- data/ext/couchbase/core/impl/key_value_error_category.cxx +6 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +10 -10
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +4 -4
- data/ext/couchbase/core/impl/node_id.cxx +49 -13
- data/ext/couchbase/core/impl/observability_recorder.cxx +12 -2
- data/ext/couchbase/core/impl/observe_poll.cxx +63 -23
- data/ext/couchbase/core/impl/public_analytics_stream_result.cxx +372 -0
- data/ext/couchbase/core/impl/public_bucket.cxx +48 -2
- data/ext/couchbase/core/impl/public_cluster.cxx +229 -42
- data/ext/couchbase/core/impl/public_query_stream_result.cxx +380 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_replicas_from_preferred_server_group_result.cxx +42 -0
- data/ext/couchbase/core/impl/public_transaction_get_multi_result.cxx +42 -0
- data/ext/couchbase/core/impl/query.cxx +76 -7
- data/ext/couchbase/core/impl/query.hxx +36 -0
- data/ext/couchbase/core/impl/query_index_manager.cxx +54 -1
- data/ext/couchbase/core/impl/replica_utils.cxx +101 -0
- data/ext/couchbase/core/impl/replica_utils.hxx +64 -0
- data/ext/couchbase/core/impl/resolve_node_id.hxx +125 -0
- data/ext/couchbase/core/impl/scope.cxx +70 -0
- data/ext/couchbase/core/impl/search.cxx +31 -1
- data/ext/couchbase/core/impl/transactions.cxx +130 -0
- data/ext/couchbase/core/impl/wait_until_ready.cxx +439 -0
- data/ext/couchbase/core/impl/wait_until_ready.hxx +110 -0
- data/ext/couchbase/core/impl/with_bucket_config_or_timeout.hxx +180 -0
- data/ext/couchbase/core/impl/with_cancellation.hxx +11 -3
- data/ext/couchbase/core/io/configuration_belongs_to_session.hxx +1 -2
- data/ext/couchbase/core/io/dns_client.cxx +122 -45
- data/ext/couchbase/core/io/dns_codec.hxx +21 -21
- data/ext/couchbase/core/io/dns_config.cxx +21 -6
- data/ext/couchbase/core/io/http_command.hxx +149 -121
- data/ext/couchbase/core/io/http_error.hxx +107 -0
- data/ext/couchbase/core/io/http_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_session.cxx +606 -154
- data/ext/couchbase/core/io/http_session.hxx +147 -30
- data/ext/couchbase/core/io/http_session_manager.hxx +329 -382
- data/ext/couchbase/core/io/http_streaming_parser.cxx +4 -0
- data/ext/couchbase/core/io/http_streaming_response.cxx +328 -43
- data/ext/couchbase/core/io/http_streaming_response.hxx +37 -3
- data/ext/couchbase/core/io/mcbp_buffer_pool.hxx +122 -0
- data/ext/couchbase/core/io/mcbp_command.hxx +150 -51
- data/ext/couchbase/core/io/mcbp_command_id.hxx +45 -0
- data/ext/couchbase/core/io/mcbp_message.cxx +9 -1
- data/ext/couchbase/core/io/mcbp_message.hxx +19 -0
- data/ext/couchbase/core/io/mcbp_output_queue.hxx +150 -0
- data/ext/couchbase/core/io/mcbp_parser.cxx +24 -7
- data/ext/couchbase/core/io/mcbp_session.cxx +309 -301
- data/ext/couchbase/core/io/mcbp_session.hxx +27 -18
- data/ext/couchbase/core/io/opaque_ring_table.hxx +145 -0
- data/ext/couchbase/core/io/retry_orchestrator.hxx +6 -5
- data/ext/couchbase/core/io/stream_deadline.hxx +50 -0
- data/ext/couchbase/core/io/streams.cxx +151 -21
- data/ext/couchbase/core/io/streams.hxx +48 -1
- data/ext/couchbase/core/logger/logger.cxx +36 -0
- data/ext/couchbase/core/logger/logger.hxx +46 -6
- data/ext/couchbase/core/logger/redaction.hxx +503 -0
- data/ext/couchbase/core/management/eventing_status.hxx +10 -0
- data/ext/couchbase/core/management/eventing_status_json.hxx +4 -0
- data/ext/couchbase/core/mcbp/big_endian.cxx +1 -1
- data/ext/couchbase/core/mcbp/codec.cxx +27 -18
- data/ext/couchbase/core/mcbp/operation_queue.cxx +2 -2
- data/ext/couchbase/core/mcbp/packet.hxx +2 -2
- data/ext/couchbase/core/mcbp/queue_request.cxx +23 -6
- data/ext/couchbase/core/mcbp/queue_request.hxx +21 -0
- data/ext/couchbase/core/meta/features.hxx +13 -0
- data/ext/couchbase/core/meta/version.cxx +6 -3
- data/ext/couchbase/core/metrics/logging_meter.cxx +5 -10
- data/ext/couchbase/core/metrics/meter_wrapper.cxx +63 -33
- data/ext/couchbase/core/metrics/meter_wrapper.hxx +55 -3
- data/ext/couchbase/core/operations/analytics_response_parsing.cxx +177 -0
- data/ext/couchbase/core/operations/analytics_response_parsing.hxx +55 -0
- data/ext/couchbase/core/operations/document_analytics.cxx +48 -130
- data/ext/couchbase/core/operations/document_analytics.hxx +14 -2
- data/ext/couchbase/core/operations/document_get_all_replicas.hxx +15 -7
- data/ext/couchbase/core/operations/document_get_any_replica.hxx +19 -8
- data/ext/couchbase/core/operations/document_get_projected.cxx +1 -1
- data/ext/couchbase/core/{impl/get_replica.cxx → operations/document_get_replica.cxx} +21 -3
- data/ext/couchbase/core/{impl/get_replica.hxx → operations/document_get_replica.hxx} +31 -4
- data/ext/couchbase/core/operations/document_lookup_in.cxx +10 -10
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +228 -198
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +215 -217
- data/ext/couchbase/core/operations/document_query.cxx +108 -221
- data/ext/couchbase/core/operations/document_query.hxx +18 -4
- data/ext/couchbase/core/operations/document_search.cxx +52 -8
- data/ext/couchbase/core/operations/document_search.hxx +3 -0
- data/ext/couchbase/core/operations/document_view.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_dataset_create.cxx +15 -8
- data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +4 -0
- data/ext/couchbase/core/operations/management/analytics_dataset_drop.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_dataset_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_dataverse_create.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_dataverse_drop.cxx +10 -5
- data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.cxx +2 -1
- data/ext/couchbase/core/operations/management/analytics_index_create.cxx +33 -8
- data/ext/couchbase/core/operations/management/analytics_index_drop.cxx +12 -7
- data/ext/couchbase/core/operations/management/analytics_index_get_all.cxx +3 -2
- data/ext/couchbase/core/operations/management/analytics_link_connect.cxx +11 -6
- data/ext/couchbase/core/operations/management/analytics_link_create.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_disconnect.cxx +10 -4
- data/ext/couchbase/core/operations/management/analytics_link_drop.cxx +6 -4
- data/ext/couchbase/core/operations/management/analytics_link_get_all.cxx +4 -3
- data/ext/couchbase/core/operations/management/analytics_link_replace.cxx +3 -3
- data/ext/couchbase/core/operations/management/analytics_link_utils.hxx +1 -1
- data/ext/couchbase/core/operations/management/change_password.cxx +2 -0
- data/ext/couchbase/core/operations/management/collection_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/error_utils.cxx +60 -6
- data/ext/couchbase/core/operations/management/error_utils.hxx +29 -1
- data/ext/couchbase/core/operations/management/eventing_deploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_drop_function.cxx +8 -3
- data/ext/couchbase/core/operations/management/eventing_get_all_functions.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_get_function.cxx +5 -3
- data/ext/couchbase/core/operations/management/eventing_get_status.cxx +4 -2
- data/ext/couchbase/core/operations/management/eventing_pause_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_resume_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_undeploy_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/eventing_upsert_function.cxx +9 -3
- data/ext/couchbase/core/operations/management/group_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/group_upsert.cxx +11 -8
- data/ext/couchbase/core/operations/management/query_index_build.cxx +5 -2
- data/ext/couchbase/core/operations/management/query_index_create.cxx +9 -3
- data/ext/couchbase/core/operations/management/query_index_drop.cxx +11 -4
- data/ext/couchbase/core/operations/management/query_index_get_all.cxx +1 -1
- data/ext/couchbase/core/operations/management/query_index_get_all_deferred.cxx +1 -1
- data/ext/couchbase/core/operations/management/scope_drop.cxx +5 -1
- data/ext/couchbase/core/operations/management/scope_get_all.cxx +6 -1
- data/ext/couchbase/core/operations/management/search_get_stats.cxx +10 -0
- data/ext/couchbase/core/operations/management/search_index_analyze_document.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_control_ingest.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_control_query.cxx +4 -3
- data/ext/couchbase/core/operations/management/search_index_drop.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get.cxx +2 -2
- data/ext/couchbase/core/operations/management/search_index_get_documents_count.cxx +3 -2
- data/ext/couchbase/core/operations/management/search_index_get_stats.cxx +3 -1
- data/ext/couchbase/core/operations/management/search_index_upsert.cxx +2 -2
- data/ext/couchbase/core/operations/management/user_drop.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_get.cxx +3 -1
- data/ext/couchbase/core/operations/management/user_upsert.cxx +12 -9
- data/ext/couchbase/core/operations/management/view_index_drop.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_get.cxx +1 -1
- data/ext/couchbase/core/operations/management/view_index_upsert.cxx +1 -1
- data/ext/couchbase/core/operations/operation_traits.hxx +18 -0
- data/ext/couchbase/core/operations/query_response_parsing.cxx +211 -0
- data/ext/couchbase/core/operations/query_response_parsing.hxx +60 -0
- data/ext/couchbase/core/operations_fwd.hxx +3 -3
- data/ext/couchbase/core/origin.cxx +54 -26
- data/ext/couchbase/core/origin.hxx +12 -0
- data/ext/couchbase/core/orphan_reporter.cxx +2 -1
- data/ext/couchbase/core/platform/random.cc +7 -7
- data/ext/couchbase/core/protocol/client_request.cxx +2 -2
- data/ext/couchbase/core/protocol/client_request.hxx +38 -21
- data/ext/couchbase/core/protocol/client_response.cxx +11 -3
- data/ext/couchbase/core/protocol/client_response.hxx +27 -6
- data/ext/couchbase/core/protocol/cmd_append.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_decrement.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_get.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_and_lock.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_and_touch.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_cluster_config.cxx +6 -4
- data/ext/couchbase/core/protocol/cmd_get_collection_id.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_get_error_map.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_get_meta.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_get_replica.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_hello.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_increment.cxx +6 -6
- data/ext/couchbase/core/protocol/cmd_insert.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_lookup_in.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +4 -3
- data/ext/couchbase/core/protocol/cmd_mutate_in.cxx +10 -9
- data/ext/couchbase/core/protocol/cmd_mutate_in.hxx +10 -10
- data/ext/couchbase/core/protocol/cmd_observe_seqno.cxx +7 -7
- data/ext/couchbase/core/protocol/cmd_prepend.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_remove.cxx +2 -2
- data/ext/couchbase/core/protocol/cmd_replace.cxx +4 -4
- data/ext/couchbase/core/protocol/cmd_touch.cxx +1 -1
- data/ext/couchbase/core/protocol/cmd_upsert.cxx +4 -4
- data/ext/couchbase/core/protocol/datatype.hxx +118 -1
- data/ext/couchbase/core/protocol/frame_info_utils.cxx +1 -1
- data/ext/couchbase/core/protocol/magic.hxx +4 -0
- data/ext/couchbase/core/protocol/magic_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/server_request.hxx +3 -1
- data/ext/couchbase/core/protocol/status.cxx +1 -1
- data/ext/couchbase/core/protostellar/analytics_converter.hxx +171 -0
- data/ext/couchbase/core/protostellar/bucket_admin_converter.hxx +301 -0
- data/ext/couchbase/core/protostellar/collection_admin_converter.hxx +92 -0
- data/ext/couchbase/core/protostellar/component.cxx +2445 -0
- data/ext/couchbase/core/protostellar/component.hxx +391 -0
- data/ext/couchbase/core/{columnar/bootstrap_notification_subscriber.hxx → protostellar/compression_settings.hxx} +11 -10
- data/ext/couchbase/core/protostellar/credentials.cxx +233 -0
- data/ext/couchbase/core/protostellar/credentials.hxx +88 -0
- data/ext/couchbase/core/protostellar/dispatcher.cxx +57 -0
- data/ext/couchbase/core/protostellar/dispatcher.hxx +482 -0
- data/ext/couchbase/core/protostellar/error_utils.cxx +293 -0
- data/ext/couchbase/core/protostellar/error_utils.hxx +97 -0
- data/ext/couchbase/core/protostellar/json_payload.hxx +49 -0
- data/ext/couchbase/core/protostellar/kv_converter.cxx +70 -0
- data/ext/couchbase/core/protostellar/kv_converter.hxx +600 -0
- data/ext/couchbase/core/protostellar/query_converter.hxx +265 -0
- data/ext/couchbase/core/protostellar/query_index_admin_converter.hxx +291 -0
- data/ext/couchbase/core/protostellar/query_proto.hxx +73 -0
- data/ext/couchbase/core/protostellar/search_converter.hxx +244 -0
- data/ext/couchbase/core/protostellar/search_index_admin_converter.hxx +156 -0
- data/ext/couchbase/core/protostellar/view_converter.hxx +158 -0
- data/ext/couchbase/core/query_stream.cxx +447 -0
- data/ext/couchbase/core/query_stream.hxx +141 -0
- data/ext/couchbase/core/query_stream_component.cxx +243 -0
- data/ext/couchbase/core/query_stream_component.hxx +68 -0
- data/ext/couchbase/core/range_scan_load_balancer.cxx +15 -8
- data/ext/couchbase/core/range_scan_orchestrator.cxx +15 -3
- data/ext/couchbase/core/response_handler.hxx +41 -4
- data/ext/couchbase/core/row_streamer.cxx +332 -46
- data/ext/couchbase/core/row_streamer.hxx +31 -1
- data/ext/couchbase/core/row_streamer_options.hxx +55 -0
- data/ext/couchbase/core/sasl/client.h +3 -0
- data/ext/couchbase/core/search_scoring.hxx +66 -0
- data/ext/couchbase/core/stream_error_details.hxx +69 -0
- data/ext/couchbase/core/timeout_defaults.hxx +0 -1
- data/ext/couchbase/core/topology/capabilities.hxx +6 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +3 -0
- data/ext/couchbase/core/topology/configuration.cxx +21 -6
- data/ext/couchbase/core/topology/configuration.hxx +29 -8
- data/ext/couchbase/core/topology/configuration_json.hxx +3 -0
- data/ext/couchbase/core/topology/error_map_json.hxx +3 -1
- data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +70 -4
- data/ext/couchbase/core/tracing/threshold_logging_tracer.hxx +10 -0
- data/ext/couchbase/core/transactions/active_transaction_record.cxx +0 -34
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +108 -63
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +19 -2
- data/ext/couchbase/core/transactions/error_list.hxx +2 -2
- data/ext/couchbase/core/transactions/get_multi_fetch.hxx +160 -0
- data/ext/couchbase/core/transactions/get_multi_orchestrator.cxx +326 -125
- data/ext/couchbase/core/transactions/get_multi_transaction_id.hxx +62 -0
- data/ext/couchbase/core/transactions/internal/atr_entry.hxx +22 -2
- data/ext/couchbase/core/transactions/internal/transaction_context.hxx +2 -2
- data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +23 -1
- data/ext/couchbase/core/transactions/internal/utils.hxx +50 -14
- data/ext/couchbase/core/transactions/staged_mutation.cxx +23 -18
- data/ext/couchbase/core/transactions/staged_mutation.hxx +15 -4
- data/ext/couchbase/core/transactions/transaction_context.cxx +55 -40
- data/ext/couchbase/core/transactions/transaction_get_result.hxx +16 -0
- data/ext/couchbase/core/transactions/transactions.cxx +3 -55
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +165 -72
- data/ext/couchbase/core/transactions/transactions_config.cxx +0 -11
- data/ext/couchbase/core/transactions/utils.cxx +10 -0
- data/ext/couchbase/core/transactions/waitable_op_list.hxx +2 -2
- data/ext/couchbase/core/transactions.hxx +9 -9
- data/ext/couchbase/core/utils/byteswap.hxx +166 -9
- data/ext/couchbase/core/utils/connection_string.cxx +50 -85
- data/ext/couchbase/core/utils/connection_string.hxx +15 -0
- data/ext/couchbase/core/{columnar/backoff_calculator.hxx → utils/deadline.hxx} +13 -13
- data/ext/couchbase/core/utils/duration_parser.cxx +1 -1
- data/ext/couchbase/core/utils/json_streaming_lexer.cxx +48 -5
- data/ext/couchbase/core/utils/json_streaming_lexer.hxx +4 -1
- data/ext/couchbase/core/utils/movable_function.hxx +301 -52
- data/ext/couchbase/core/utils/name_codec.hxx +154 -11
- data/ext/couchbase/core/{columnar/retry_info.hxx → utils/process_id.hxx} +18 -13
- data/ext/couchbase/core/utils/url_codec.cxx +12 -51
- data/ext/couchbase/core/websocket_codec.cxx +13 -37
- data/ext/couchbase/couchbase/analytics_options.hxx +21 -10
- data/ext/couchbase/couchbase/analytics_row.hxx +105 -0
- data/ext/couchbase/couchbase/analytics_stream_result.hxx +266 -0
- data/ext/couchbase/couchbase/boolean_query.hxx +3 -3
- data/ext/couchbase/couchbase/bucket.hxx +57 -0
- data/ext/couchbase/couchbase/cluster.hxx +183 -5
- data/ext/couchbase/{core/columnar/security_options.hxx → couchbase/cluster_state.hxx} +18 -14
- data/ext/couchbase/couchbase/codec/lenient_json_transcoder.hxx +69 -0
- data/ext/couchbase/couchbase/collection.hxx +234 -14
- data/ext/couchbase/couchbase/common_durability_options.hxx +18 -3
- data/ext/couchbase/couchbase/conjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/create_dataset_analytics_options.hxx +6 -1
- data/ext/couchbase/couchbase/date_range_query.hxx +2 -2
- data/ext/couchbase/couchbase/decrement_options.hxx +1 -1
- data/ext/couchbase/couchbase/disjunction_query.hxx +1 -1
- data/ext/couchbase/couchbase/error.hxx +32 -0
- data/ext/couchbase/couchbase/error_codes.hxx +33 -1
- data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_distance_query.hxx +1 -1
- data/ext/couchbase/couchbase/geo_polygon_query.hxx +1 -1
- data/ext/couchbase/couchbase/get_replica_options.hxx +68 -0
- data/ext/couchbase/couchbase/get_replica_result.hxx +5 -3
- data/ext/couchbase/couchbase/get_replica_strategy.hxx +161 -0
- data/ext/couchbase/couchbase/get_result.hxx +1 -0
- data/ext/couchbase/couchbase/increment_options.hxx +1 -1
- data/ext/couchbase/couchbase/insert_options.hxx +1 -1
- data/ext/couchbase/couchbase/match_phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/match_query.hxx +1 -1
- data/ext/couchbase/couchbase/mutate_in_options.hxx +3 -3
- data/ext/couchbase/couchbase/network_options.hxx +1 -1
- data/ext/couchbase/couchbase/node_id.hxx +42 -14
- data/ext/couchbase/couchbase/node_id_for_options.hxx +7 -1
- data/ext/couchbase/couchbase/node_ids_options.hxx +8 -2
- data/ext/couchbase/couchbase/numeric_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/phrase_query.hxx +1 -1
- data/ext/couchbase/couchbase/prefix_query.hxx +1 -1
- data/ext/couchbase/couchbase/query_options.hxx +23 -12
- data/ext/couchbase/couchbase/query_row.hxx +111 -0
- data/ext/couchbase/couchbase/query_stream_result.hxx +302 -0
- data/ext/couchbase/couchbase/query_string_query.hxx +3 -3
- data/ext/couchbase/couchbase/regexp_query.hxx +1 -1
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/result.hxx +14 -3
- data/ext/couchbase/couchbase/scan_result_item.hxx +1 -0
- data/ext/couchbase/couchbase/scope.hxx +85 -2
- data/ext/couchbase/couchbase/search_options.hxx +58 -8
- data/ext/couchbase/couchbase/search_scoring.hxx +94 -0
- data/ext/couchbase/couchbase/search_scoring_none.hxx +51 -0
- data/ext/couchbase/couchbase/search_scoring_reciprocal_rank_fusion.hxx +88 -0
- data/ext/couchbase/couchbase/search_scoring_relative_score_fusion.hxx +70 -0
- data/ext/couchbase/couchbase/term_range_query.hxx +1 -1
- data/ext/couchbase/couchbase/tracing/request_span.hxx +46 -0
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +23 -21
- data/ext/couchbase/couchbase/transactions/transaction_get_multi_result.hxx +24 -19
- data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +17 -3
- data/ext/couchbase/couchbase/transactions/transactions_config.hxx +4 -2
- data/ext/couchbase/couchbase/transactions.hxx +27 -18
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/vector_query.hxx +1 -1
- data/ext/couchbase/couchbase/wait_until_ready_options.hxx +111 -0
- data/ext/couchbase/couchbase/wildcard_query.hxx +1 -1
- data/ext/extconf.rb +15 -10
- data/ext/rcb_analytics.cxx +82 -102
- data/ext/rcb_backend.cxx +42 -36
- data/ext/rcb_backend.hxx +2 -0
- data/ext/rcb_buckets.cxx +47 -59
- data/ext/rcb_collections.cxx +42 -52
- data/ext/rcb_crud.cxx +345 -224
- data/ext/rcb_diagnostics.cxx +117 -27
- data/ext/rcb_exceptions.cxx +152 -99
- data/ext/rcb_exceptions.hxx +25 -0
- data/ext/rcb_extras.cxx +18 -19
- data/ext/rcb_hdr_histogram.cxx +19 -4
- data/ext/rcb_logger.cxx +202 -27
- data/ext/rcb_logger.hxx +12 -0
- data/ext/rcb_multi.cxx +40 -40
- data/ext/rcb_observability.cxx +7 -5
- data/ext/rcb_query.cxx +99 -142
- data/ext/rcb_range_scan.cxx +41 -35
- data/ext/rcb_search.cxx +98 -99
- data/ext/rcb_users.cxx +36 -56
- data/ext/rcb_utils.cxx +100 -37
- data/ext/rcb_utils.hxx +287 -33
- data/ext/rcb_version.cxx +1 -1
- data/ext/rcb_views.cxx +55 -51
- data/lib/active_support/cache/couchbase_store.rb +77 -12
- data/lib/couchbase/bucket.rb +20 -0
- data/lib/couchbase/cluster.rb +17 -0
- data/lib/couchbase/collection.rb +36 -1
- data/lib/couchbase/errors.rb +18 -0
- data/lib/couchbase/fork_hooks.rb +16 -7
- data/lib/couchbase/get_replica_strategy.rb +89 -0
- data/lib/couchbase/logger.rb +1 -1
- data/lib/couchbase/management/analytics_index_manager.rb +15 -15
- data/lib/couchbase/management/bucket_manager.rb +6 -6
- data/lib/couchbase/management/collection_manager.rb +6 -6
- data/lib/couchbase/management/query_index_manager.rb +7 -7
- data/lib/couchbase/management/search_index_manager.rb +13 -13
- data/lib/couchbase/management/user_manager.rb +10 -10
- data/lib/couchbase/management/view_index_manager.rb +5 -5
- data/lib/couchbase/options.rb +174 -42
- data/lib/couchbase/protostellar/bucket.rb +4 -0
- data/lib/couchbase/protostellar/cluster.rb +4 -0
- data/lib/couchbase/protostellar/collection.rb +4 -0
- data/lib/couchbase/protostellar/error_handling.rb +2 -1
- data/lib/couchbase/protostellar/request.rb +1 -0
- data/lib/couchbase/protostellar/request_generator/kv.rb +16 -2
- data/lib/couchbase/protostellar/request_generator/search.rb +17 -1
- data/lib/couchbase/protostellar/retry/orchestrator.rb +3 -2
- data/lib/couchbase/protostellar/retry/strategies/fail_fast.rb +33 -0
- data/lib/couchbase/protostellar/retry/strategies.rb +1 -0
- data/lib/couchbase/search_options.rb +95 -6
- data/lib/couchbase/version.rb +1 -1
- metadata +91 -33
- data/ext/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +0 -40
- data/ext/couchbase/core/columnar/agent.hxx +0 -71
- data/ext/couchbase/core/columnar/agent_config.hxx +0 -59
- data/ext/couchbase/core/columnar/background_bootstrap_listener.hxx +0 -42
- data/ext/couchbase/core/columnar/backoff_calculator.cxx +0 -62
- data/ext/couchbase/core/columnar/columnar_agent.cxx +0 -147
- data/ext/couchbase/core/columnar/columnar_agent_config.cxx +0 -48
- data/ext/couchbase/core/columnar/columnar_error.cxx +0 -51
- data/ext/couchbase/core/columnar/database_management_options.hxx +0 -56
- data/ext/couchbase/core/columnar/error.hxx +0 -51
- data/ext/couchbase/core/columnar/error_codes.cxx +0 -107
- data/ext/couchbase/core/columnar/error_codes.hxx +0 -75
- data/ext/couchbase/core/columnar/management_component.cxx +0 -300
- data/ext/couchbase/core/columnar/management_component.hxx +0 -56
- data/ext/couchbase/core/columnar/query_component.cxx +0 -523
- data/ext/couchbase/core/columnar/query_component.hxx +0 -57
- data/ext/couchbase/core/columnar/query_options.hxx +0 -59
- data/ext/couchbase/core/columnar/query_result.cxx +0 -130
- data/ext/couchbase/core/columnar/query_result.hxx +0 -78
- data/ext/couchbase/core/io/config_tracker.cxx +0 -687
- data/ext/couchbase/core/io/config_tracker.hxx +0 -123
data/ext/rcb_exceptions.cxx
CHANGED
|
@@ -68,6 +68,7 @@ VALUE eDocumentLocked;
|
|
|
68
68
|
VALUE eDocumentNotFound;
|
|
69
69
|
VALUE eDocumentNotLocked;
|
|
70
70
|
VALUE eDocumentNotJson;
|
|
71
|
+
VALUE eDocumentNotFoundOnReplica;
|
|
71
72
|
VALUE eDurabilityAmbiguous;
|
|
72
73
|
VALUE eDurabilityImpossible;
|
|
73
74
|
VALUE eDurabilityLevelNotAvailable;
|
|
@@ -96,6 +97,8 @@ VALUE ePathTooBig;
|
|
|
96
97
|
VALUE ePathTooDeep;
|
|
97
98
|
VALUE ePlanningFailure;
|
|
98
99
|
VALUE ePreparedStatementFailure;
|
|
100
|
+
VALUE eReplicaIndexCurrentlyUnavailable;
|
|
101
|
+
VALUE eReplicaIndexOutOfBounds;
|
|
99
102
|
VALUE eRequestCanceled;
|
|
100
103
|
VALUE eScopeExists;
|
|
101
104
|
VALUE eScopeNotFound;
|
|
@@ -143,6 +146,27 @@ VALUE eBucketClosed;
|
|
|
143
146
|
|
|
144
147
|
} // namespace
|
|
145
148
|
|
|
149
|
+
auto
|
|
150
|
+
cb_exc_new(VALUE exc_type, const std::string& message) -> VALUE
|
|
151
|
+
{
|
|
152
|
+
VALUE exc = Qnil;
|
|
153
|
+
const char* text = message.c_str();
|
|
154
|
+
cb_protect([exc_type, text, &exc] {
|
|
155
|
+
exc = rb_exc_new_cstr(exc_type, text);
|
|
156
|
+
});
|
|
157
|
+
return exc;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
auto
|
|
161
|
+
cb_exc_new(VALUE exc_type, VALUE message) -> VALUE
|
|
162
|
+
{
|
|
163
|
+
VALUE exc = Qnil;
|
|
164
|
+
cb_protect([exc_type, message, &exc] {
|
|
165
|
+
exc = rb_exc_new_str(exc_type, message);
|
|
166
|
+
});
|
|
167
|
+
return exc;
|
|
168
|
+
}
|
|
169
|
+
|
|
146
170
|
ruby_exception::ruby_exception(VALUE exc)
|
|
147
171
|
: std::runtime_error("ruby_exception")
|
|
148
172
|
, exc_{ exc }
|
|
@@ -151,13 +175,13 @@ ruby_exception::ruby_exception(VALUE exc)
|
|
|
151
175
|
|
|
152
176
|
ruby_exception::ruby_exception(VALUE exc_type, VALUE exc_message)
|
|
153
177
|
: std::runtime_error("ruby_exception")
|
|
154
|
-
, exc_{
|
|
178
|
+
, exc_{ cb_exc_new(exc_type, exc_message) }
|
|
155
179
|
{
|
|
156
180
|
}
|
|
157
181
|
|
|
158
182
|
ruby_exception::ruby_exception(VALUE exc_type, const std::string& exc_message)
|
|
159
183
|
: std::runtime_error("ruby_exception")
|
|
160
|
-
, exc_{
|
|
184
|
+
, exc_{ cb_exc_new(exc_type, exc_message) }
|
|
161
185
|
{
|
|
162
186
|
}
|
|
163
187
|
|
|
@@ -167,6 +191,17 @@ ruby_exception::exception_object() const
|
|
|
167
191
|
return exc_;
|
|
168
192
|
}
|
|
169
193
|
|
|
194
|
+
ruby_jump::ruby_jump(int state)
|
|
195
|
+
: state_{ state }
|
|
196
|
+
{
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
auto
|
|
200
|
+
ruby_jump::state() const -> int
|
|
201
|
+
{
|
|
202
|
+
return state_;
|
|
203
|
+
}
|
|
204
|
+
|
|
170
205
|
void
|
|
171
206
|
init_exceptions(VALUE mCouchbase)
|
|
172
207
|
{
|
|
@@ -197,6 +232,8 @@ init_exceptions(VALUE mCouchbase)
|
|
|
197
232
|
eDocumentIrretrievable = rb_define_class_under(mError, "DocumentIrretrievable", eCouchbaseError);
|
|
198
233
|
eDocumentLocked = rb_define_class_under(mError, "DocumentLocked", eCouchbaseError);
|
|
199
234
|
eDocumentNotFound = rb_define_class_under(mError, "DocumentNotFound", eCouchbaseError);
|
|
235
|
+
eDocumentNotFoundOnReplica =
|
|
236
|
+
rb_define_class_under(mError, "DocumentNotFoundOnReplica", eDocumentNotFound);
|
|
200
237
|
eDocumentNotLocked = rb_define_class_under(mError, "DocumentNotLocked", eCouchbaseError);
|
|
201
238
|
eDocumentNotJson = rb_define_class_under(mError, "DocumentNotJson", eCouchbaseError);
|
|
202
239
|
eDurabilityAmbiguous = rb_define_class_under(mError, "DurabilityAmbiguous", eCouchbaseError);
|
|
@@ -231,6 +268,10 @@ init_exceptions(VALUE mCouchbase)
|
|
|
231
268
|
ePlanningFailure = rb_define_class_under(mError, "PlanningFailure", eCouchbaseError);
|
|
232
269
|
ePreparedStatementFailure =
|
|
233
270
|
rb_define_class_under(mError, "PreparedStatementFailure", eCouchbaseError);
|
|
271
|
+
eReplicaIndexCurrentlyUnavailable =
|
|
272
|
+
rb_define_class_under(mError, "ReplicaIndexCurrentlyUnavailable", eCouchbaseError);
|
|
273
|
+
eReplicaIndexOutOfBounds =
|
|
274
|
+
rb_define_class_under(mError, "ReplicaIndexOutOfBounds", eCouchbaseError);
|
|
234
275
|
eRequestCanceled = rb_define_class_under(mError, "RequestCanceled", eCouchbaseError);
|
|
235
276
|
eScopeExists = rb_define_class_under(mError, "ScopeExists", eCouchbaseError);
|
|
236
277
|
eScopeNotFound = rb_define_class_under(mError, "ScopeNotFound", eCouchbaseError);
|
|
@@ -301,304 +342,313 @@ cb_map_error_code(std::error_code ec, const std::string& message, bool include_e
|
|
|
301
342
|
if (ec.category() == core::impl::common_category()) {
|
|
302
343
|
switch (static_cast<errc::common>(ec.value())) {
|
|
303
344
|
case errc::common::unambiguous_timeout:
|
|
304
|
-
return
|
|
345
|
+
return cb_exc_new(eUnambiguousTimeout, what);
|
|
305
346
|
|
|
306
347
|
case errc::common::ambiguous_timeout:
|
|
307
|
-
return
|
|
348
|
+
return cb_exc_new(eAmbiguousTimeout, what);
|
|
308
349
|
|
|
309
350
|
case errc::common::request_canceled:
|
|
310
|
-
return
|
|
351
|
+
return cb_exc_new(eRequestCanceled, what);
|
|
311
352
|
|
|
312
353
|
case errc::common::invalid_argument:
|
|
313
|
-
return
|
|
354
|
+
return cb_exc_new(eInvalidArgument, what);
|
|
314
355
|
|
|
315
356
|
case errc::common::service_not_available:
|
|
316
|
-
return
|
|
357
|
+
return cb_exc_new(eServiceNotAvailable, what);
|
|
317
358
|
|
|
318
359
|
case errc::common::internal_server_failure:
|
|
319
|
-
return
|
|
360
|
+
return cb_exc_new(eInternalServerFailure, what);
|
|
320
361
|
|
|
321
362
|
case errc::common::authentication_failure:
|
|
322
|
-
return
|
|
363
|
+
return cb_exc_new(eAuthenticationFailure, what);
|
|
323
364
|
|
|
324
365
|
case errc::common::temporary_failure:
|
|
325
|
-
return
|
|
366
|
+
return cb_exc_new(eTemporaryFailure, what);
|
|
326
367
|
|
|
327
368
|
case errc::common::parsing_failure:
|
|
328
|
-
return
|
|
369
|
+
return cb_exc_new(eParsingFailure, what);
|
|
329
370
|
|
|
330
371
|
case errc::common::cas_mismatch:
|
|
331
|
-
return
|
|
372
|
+
return cb_exc_new(eCasMismatch, what);
|
|
332
373
|
|
|
333
374
|
case errc::common::bucket_not_found:
|
|
334
|
-
return
|
|
375
|
+
return cb_exc_new(eBucketNotFound, what);
|
|
335
376
|
|
|
336
377
|
case errc::common::scope_not_found:
|
|
337
|
-
return
|
|
378
|
+
return cb_exc_new(eScopeNotFound, what);
|
|
338
379
|
|
|
339
380
|
case errc::common::collection_not_found:
|
|
340
|
-
return
|
|
381
|
+
return cb_exc_new(eCollectionNotFound, what);
|
|
341
382
|
|
|
342
383
|
case errc::common::unsupported_operation:
|
|
343
|
-
return
|
|
384
|
+
return cb_exc_new(eUnsupportedOperation, what);
|
|
344
385
|
|
|
345
386
|
case errc::common::feature_not_available:
|
|
346
|
-
return
|
|
387
|
+
return cb_exc_new(eFeatureNotAvailable, what);
|
|
347
388
|
|
|
348
389
|
case errc::common::encoding_failure:
|
|
349
|
-
return
|
|
390
|
+
return cb_exc_new(eEncodingFailure, what);
|
|
350
391
|
|
|
351
392
|
case errc::common::decoding_failure:
|
|
352
|
-
return
|
|
393
|
+
return cb_exc_new(eDecodingFailure, what);
|
|
353
394
|
|
|
354
395
|
case errc::common::index_not_found:
|
|
355
|
-
return
|
|
396
|
+
return cb_exc_new(eIndexNotFound, what);
|
|
356
397
|
|
|
357
398
|
case errc::common::index_exists:
|
|
358
|
-
return
|
|
399
|
+
return cb_exc_new(eIndexExists, what);
|
|
359
400
|
|
|
360
401
|
case errc::common::rate_limited:
|
|
361
|
-
return
|
|
402
|
+
return cb_exc_new(eRateLimited, what);
|
|
362
403
|
|
|
363
404
|
case errc::common::quota_limited:
|
|
364
|
-
return
|
|
405
|
+
return cb_exc_new(eQuotaLimited, what);
|
|
365
406
|
}
|
|
366
407
|
} else if (ec.category() == core::impl::key_value_category()) {
|
|
367
408
|
switch (static_cast<errc::key_value>(ec.value())) {
|
|
368
409
|
case errc::key_value::document_not_found:
|
|
369
|
-
return
|
|
410
|
+
return cb_exc_new(eDocumentNotFound, what);
|
|
370
411
|
|
|
371
412
|
case errc::key_value::document_irretrievable:
|
|
372
|
-
return
|
|
413
|
+
return cb_exc_new(eDocumentIrretrievable, what);
|
|
414
|
+
|
|
415
|
+
case errc::key_value::document_not_found_on_replica:
|
|
416
|
+
return cb_exc_new(eDocumentNotFoundOnReplica, what);
|
|
417
|
+
|
|
418
|
+
case errc::key_value::replica_index_out_of_bounds:
|
|
419
|
+
return cb_exc_new(eReplicaIndexOutOfBounds, what);
|
|
420
|
+
|
|
421
|
+
case errc::key_value::replica_index_currently_unavailable:
|
|
422
|
+
return cb_exc_new(eReplicaIndexCurrentlyUnavailable, what);
|
|
373
423
|
|
|
374
424
|
case errc::key_value::document_locked:
|
|
375
|
-
return
|
|
425
|
+
return cb_exc_new(eDocumentLocked, what);
|
|
376
426
|
|
|
377
427
|
case errc::key_value::document_not_locked:
|
|
378
|
-
return
|
|
428
|
+
return cb_exc_new(eDocumentNotLocked, what);
|
|
379
429
|
|
|
380
430
|
case errc::key_value::value_too_large:
|
|
381
|
-
return
|
|
431
|
+
return cb_exc_new(eValueTooLarge, what);
|
|
382
432
|
|
|
383
433
|
case errc::key_value::document_exists:
|
|
384
|
-
return
|
|
434
|
+
return cb_exc_new(eDocumentExists, what);
|
|
385
435
|
|
|
386
436
|
case errc::key_value::durability_level_not_available:
|
|
387
|
-
return
|
|
437
|
+
return cb_exc_new(eDurabilityLevelNotAvailable, what);
|
|
388
438
|
|
|
389
439
|
case errc::key_value::durability_impossible:
|
|
390
|
-
return
|
|
440
|
+
return cb_exc_new(eDurabilityImpossible, what);
|
|
391
441
|
|
|
392
442
|
case errc::key_value::durability_ambiguous:
|
|
393
|
-
return
|
|
443
|
+
return cb_exc_new(eDurabilityAmbiguous, what);
|
|
394
444
|
|
|
395
445
|
case errc::key_value::durable_write_in_progress:
|
|
396
|
-
return
|
|
446
|
+
return cb_exc_new(eDurableWriteInProgress, what);
|
|
397
447
|
|
|
398
448
|
case errc::key_value::durable_write_re_commit_in_progress:
|
|
399
|
-
return
|
|
449
|
+
return cb_exc_new(eDurableWriteReCommitInProgress, what);
|
|
400
450
|
|
|
401
451
|
case errc::key_value::mutation_token_outdated:
|
|
402
|
-
return
|
|
452
|
+
return cb_exc_new(eMutationTokenOutdated, what);
|
|
403
453
|
|
|
404
454
|
case errc::key_value::path_not_found:
|
|
405
|
-
return
|
|
455
|
+
return cb_exc_new(ePathNotFound, what);
|
|
406
456
|
|
|
407
457
|
case errc::key_value::path_mismatch:
|
|
408
|
-
return
|
|
458
|
+
return cb_exc_new(ePathMismatch, what);
|
|
409
459
|
|
|
410
460
|
case errc::key_value::path_invalid:
|
|
411
|
-
return
|
|
461
|
+
return cb_exc_new(ePathInvalid, what);
|
|
412
462
|
|
|
413
463
|
case errc::key_value::path_too_big:
|
|
414
|
-
return
|
|
464
|
+
return cb_exc_new(ePathTooBig, what);
|
|
415
465
|
|
|
416
466
|
case errc::key_value::path_too_deep:
|
|
417
|
-
return
|
|
467
|
+
return cb_exc_new(ePathTooDeep, what);
|
|
418
468
|
|
|
419
469
|
case errc::key_value::value_too_deep:
|
|
420
|
-
return
|
|
470
|
+
return cb_exc_new(eValueTooDeep, what);
|
|
421
471
|
|
|
422
472
|
case errc::key_value::value_invalid:
|
|
423
|
-
return
|
|
473
|
+
return cb_exc_new(eValueInvalid, what);
|
|
424
474
|
|
|
425
475
|
case errc::key_value::document_not_json:
|
|
426
|
-
return
|
|
476
|
+
return cb_exc_new(eDocumentNotJson, what);
|
|
427
477
|
|
|
428
478
|
case errc::key_value::number_too_big:
|
|
429
|
-
return
|
|
479
|
+
return cb_exc_new(eNumberTooBig, what);
|
|
430
480
|
|
|
431
481
|
case errc::key_value::delta_invalid:
|
|
432
|
-
return
|
|
482
|
+
return cb_exc_new(eDeltaInvalid, what);
|
|
433
483
|
|
|
434
484
|
case errc::key_value::path_exists:
|
|
435
|
-
return
|
|
485
|
+
return cb_exc_new(ePathExists, what);
|
|
436
486
|
|
|
437
487
|
case errc::key_value::xattr_unknown_macro:
|
|
438
|
-
return
|
|
488
|
+
return cb_exc_new(eXattrUnknownMacro, what);
|
|
439
489
|
|
|
440
490
|
case errc::key_value::xattr_invalid_key_combo:
|
|
441
|
-
return
|
|
491
|
+
return cb_exc_new(eXattrInvalidKeyCombo, what);
|
|
442
492
|
|
|
443
493
|
case errc::key_value::xattr_unknown_virtual_attribute:
|
|
444
|
-
return
|
|
494
|
+
return cb_exc_new(eXattrUnknownVirtualAttribute, what);
|
|
445
495
|
|
|
446
496
|
case errc::key_value::xattr_cannot_modify_virtual_attribute:
|
|
447
|
-
return
|
|
497
|
+
return cb_exc_new(eXattrCannotModifyVirtualAttribute, what);
|
|
448
498
|
|
|
449
499
|
case errc::key_value::xattr_no_access:
|
|
450
|
-
return
|
|
500
|
+
return cb_exc_new(eXattrNoAccess, what);
|
|
451
501
|
|
|
452
502
|
case errc::key_value::cannot_revive_living_document:
|
|
453
|
-
return
|
|
503
|
+
return cb_exc_new(eCannotReviveLivingDocument, what);
|
|
454
504
|
|
|
455
505
|
case errc::key_value::range_scan_completed:
|
|
456
506
|
// Should not be exposed to the Ruby SDK, map it to a BackendError
|
|
457
|
-
return
|
|
507
|
+
return cb_exc_new(eBackendError, what);
|
|
458
508
|
}
|
|
459
509
|
} else if (ec.category() == core::impl::query_category()) {
|
|
460
510
|
switch (static_cast<errc::query>(ec.value())) {
|
|
461
511
|
case errc::query::planning_failure:
|
|
462
|
-
return
|
|
512
|
+
return cb_exc_new(ePlanningFailure, what);
|
|
463
513
|
|
|
464
514
|
case errc::query::index_failure:
|
|
465
|
-
return
|
|
515
|
+
return cb_exc_new(eIndexFailure, what);
|
|
466
516
|
|
|
467
517
|
case errc::query::prepared_statement_failure:
|
|
468
|
-
return
|
|
518
|
+
return cb_exc_new(ePreparedStatementFailure, what);
|
|
469
519
|
|
|
470
520
|
case errc::query::dml_failure:
|
|
471
|
-
return
|
|
521
|
+
return cb_exc_new(eDmlFailure, what);
|
|
472
522
|
}
|
|
473
523
|
} else if (ec.category() == core::impl::search_category()) {
|
|
474
524
|
switch (static_cast<errc::search>(ec.value())) {
|
|
475
525
|
case errc::search::index_not_ready:
|
|
476
|
-
return
|
|
526
|
+
return cb_exc_new(eIndexNotReady, what);
|
|
477
527
|
case errc::search::consistency_mismatch:
|
|
478
|
-
return
|
|
528
|
+
return cb_exc_new(eConsistencyMismatch, what);
|
|
479
529
|
}
|
|
480
530
|
} else if (ec.category() == core::impl::view_category()) {
|
|
481
531
|
switch (static_cast<errc::view>(ec.value())) {
|
|
482
532
|
case errc::view::view_not_found:
|
|
483
|
-
return
|
|
533
|
+
return cb_exc_new(eViewNotFound, what);
|
|
484
534
|
|
|
485
535
|
case errc::view::design_document_not_found:
|
|
486
|
-
return
|
|
536
|
+
return cb_exc_new(eDesignDocumentNotFound, what);
|
|
487
537
|
}
|
|
488
538
|
} else if (ec.category() == core::impl::analytics_category()) {
|
|
489
539
|
switch (static_cast<errc::analytics>(ec.value())) {
|
|
490
540
|
case errc::analytics::compilation_failure:
|
|
491
|
-
return
|
|
541
|
+
return cb_exc_new(eCompilationFailure, what);
|
|
492
542
|
|
|
493
543
|
case errc::analytics::job_queue_full:
|
|
494
|
-
return
|
|
544
|
+
return cb_exc_new(eJobQueueFull, what);
|
|
495
545
|
|
|
496
546
|
case errc::analytics::dataset_not_found:
|
|
497
|
-
return
|
|
547
|
+
return cb_exc_new(eDatasetNotFound, what);
|
|
498
548
|
|
|
499
549
|
case errc::analytics::dataverse_not_found:
|
|
500
|
-
return
|
|
550
|
+
return cb_exc_new(eDataverseNotFound, what);
|
|
501
551
|
|
|
502
552
|
case errc::analytics::dataset_exists:
|
|
503
|
-
return
|
|
553
|
+
return cb_exc_new(eDatasetExists, what);
|
|
504
554
|
|
|
505
555
|
case errc::analytics::dataverse_exists:
|
|
506
|
-
return
|
|
556
|
+
return cb_exc_new(eDataverseExists, what);
|
|
507
557
|
|
|
508
558
|
case errc::analytics::link_not_found:
|
|
509
|
-
return
|
|
559
|
+
return cb_exc_new(eLinkNotFound, what);
|
|
510
560
|
|
|
511
561
|
case errc::analytics::link_exists:
|
|
512
|
-
return
|
|
562
|
+
return cb_exc_new(eLinkExists, what);
|
|
513
563
|
}
|
|
514
564
|
} else if (ec.category() == core::impl::management_category()) {
|
|
515
565
|
switch (static_cast<errc::management>(ec.value())) {
|
|
516
566
|
case errc::management::collection_exists:
|
|
517
|
-
return
|
|
567
|
+
return cb_exc_new(eCollectionExists, what);
|
|
518
568
|
|
|
519
569
|
case errc::management::scope_exists:
|
|
520
|
-
return
|
|
570
|
+
return cb_exc_new(eScopeExists, what);
|
|
521
571
|
|
|
522
572
|
case errc::management::user_not_found:
|
|
523
|
-
return
|
|
573
|
+
return cb_exc_new(eUserNotFound, what);
|
|
524
574
|
|
|
525
575
|
case errc::management::group_not_found:
|
|
526
|
-
return
|
|
576
|
+
return cb_exc_new(eGroupNotFound, what);
|
|
527
577
|
|
|
528
578
|
case errc::management::user_exists:
|
|
529
|
-
return
|
|
579
|
+
return cb_exc_new(eUserExists, what);
|
|
530
580
|
|
|
531
581
|
case errc::management::bucket_exists:
|
|
532
|
-
return
|
|
582
|
+
return cb_exc_new(eBucketExists, what);
|
|
533
583
|
|
|
534
584
|
case errc::management::bucket_not_flushable:
|
|
535
|
-
return
|
|
585
|
+
return cb_exc_new(eBucketNotFlushable, what);
|
|
536
586
|
|
|
537
587
|
case errc::management::eventing_function_not_found:
|
|
538
|
-
return
|
|
588
|
+
return cb_exc_new(eEventingFunctionNotFound, what);
|
|
539
589
|
|
|
540
590
|
case errc::management::eventing_function_not_deployed:
|
|
541
|
-
return
|
|
591
|
+
return cb_exc_new(eEventingFunctionNotDeployed, what);
|
|
542
592
|
|
|
543
593
|
case errc::management::eventing_function_compilation_failure:
|
|
544
|
-
return
|
|
594
|
+
return cb_exc_new(eEventingFunctionCompilationFailure, what);
|
|
545
595
|
|
|
546
596
|
case errc::management::eventing_function_identical_keyspace:
|
|
547
|
-
return
|
|
597
|
+
return cb_exc_new(eEventingFunctionIdentialKeyspace, what);
|
|
548
598
|
|
|
549
599
|
case errc::management::eventing_function_not_bootstrapped:
|
|
550
|
-
return
|
|
600
|
+
return cb_exc_new(eEventingFunctionNotBootstrapped, what);
|
|
551
601
|
|
|
552
602
|
case errc::management::eventing_function_deployed:
|
|
553
|
-
return
|
|
603
|
+
return cb_exc_new(eEventingFunctionDeployed, what);
|
|
554
604
|
|
|
555
605
|
case errc::management::eventing_function_paused:
|
|
556
|
-
return
|
|
606
|
+
return cb_exc_new(eEventingFunctionPaused, what);
|
|
557
607
|
}
|
|
558
608
|
} else if (ec.category() == core::impl::network_category()) {
|
|
559
609
|
switch (static_cast<errc::network>(ec.value())) {
|
|
560
610
|
case errc::network::resolve_failure:
|
|
561
|
-
return
|
|
611
|
+
return cb_exc_new(eResolveFailure, what);
|
|
562
612
|
|
|
563
613
|
case errc::network::no_endpoints_left:
|
|
564
|
-
return
|
|
614
|
+
return cb_exc_new(eNoEndpointsLeft, what);
|
|
565
615
|
|
|
566
616
|
case errc::network::handshake_failure:
|
|
567
|
-
return
|
|
617
|
+
return cb_exc_new(eHandshakeFailure, what);
|
|
568
618
|
|
|
569
619
|
case errc::network::protocol_error:
|
|
570
|
-
return
|
|
620
|
+
return cb_exc_new(eProtocolError, what);
|
|
571
621
|
|
|
572
622
|
case errc::network::configuration_not_available:
|
|
573
|
-
return
|
|
623
|
+
return cb_exc_new(eConfigurationNotAvailable, what);
|
|
574
624
|
|
|
575
625
|
case errc::network::cluster_closed:
|
|
576
|
-
return
|
|
626
|
+
return cb_exc_new(eClusterClosed, what);
|
|
577
627
|
|
|
578
628
|
case errc::network::end_of_stream:
|
|
579
|
-
return
|
|
629
|
+
return cb_exc_new(eEndOfStream, what);
|
|
580
630
|
|
|
581
631
|
case errc::network::need_more_data:
|
|
582
|
-
return
|
|
632
|
+
return cb_exc_new(eNeedMoreData, what);
|
|
583
633
|
|
|
584
634
|
case errc::network::operation_queue_closed:
|
|
585
|
-
return
|
|
635
|
+
return cb_exc_new(eOperationQueueClosed, what);
|
|
586
636
|
|
|
587
637
|
case errc::network::operation_queue_full:
|
|
588
|
-
return
|
|
638
|
+
return cb_exc_new(eOperationQueueFull, what);
|
|
589
639
|
|
|
590
640
|
case errc::network::request_already_queued:
|
|
591
|
-
return
|
|
641
|
+
return cb_exc_new(eRequestAlreadyQueued, what);
|
|
592
642
|
|
|
593
643
|
case errc::network::request_cancelled:
|
|
594
|
-
return
|
|
644
|
+
return cb_exc_new(eNetworkRequestCanceled, what);
|
|
595
645
|
|
|
596
646
|
case errc::network::bucket_closed:
|
|
597
|
-
return
|
|
647
|
+
return cb_exc_new(eBucketClosed, what);
|
|
598
648
|
}
|
|
599
649
|
}
|
|
600
650
|
|
|
601
|
-
return
|
|
651
|
+
return cb_exc_new(eBackendError, what);
|
|
602
652
|
}
|
|
603
653
|
|
|
604
654
|
[[noreturn]] void
|
|
@@ -912,8 +962,11 @@ cb_map_error(const core::error_context::search& ctx, const std::string& message)
|
|
|
912
962
|
cb_map_error(const error& err, const std::string& message)
|
|
913
963
|
{
|
|
914
964
|
VALUE exc = cb_map_error_code(err.ec(), fmt::format("{}: {}", message, err.message()), true);
|
|
915
|
-
|
|
916
|
-
|
|
965
|
+
VALUE context = cb_str_new(err.ctx().to_json());
|
|
966
|
+
cb_protect([exc, context] {
|
|
967
|
+
static const auto id_context_eq = rb_intern("context=");
|
|
968
|
+
rb_funcall(exc, id_context_eq, 1, context);
|
|
969
|
+
});
|
|
917
970
|
if (auto cause = err.cause(); cause) {
|
|
918
971
|
rb_iv_set(exc, "@cause", cb_map_error(cause.value(), "Caused by"));
|
|
919
972
|
}
|
data/ext/rcb_exceptions.hxx
CHANGED
|
@@ -48,6 +48,8 @@ class ruby_exception : public std::runtime_error
|
|
|
48
48
|
{
|
|
49
49
|
public:
|
|
50
50
|
explicit ruby_exception(VALUE exc);
|
|
51
|
+
// These build the exception through cb_exc_new, so they may be thrown only from a method body
|
|
52
|
+
// registered through cb_method.
|
|
51
53
|
ruby_exception(VALUE exc_type, VALUE exc_message);
|
|
52
54
|
ruby_exception(VALUE exc_type, const std::string& exc_message);
|
|
53
55
|
|
|
@@ -57,6 +59,21 @@ private:
|
|
|
57
59
|
VALUE exc_;
|
|
58
60
|
};
|
|
59
61
|
|
|
62
|
+
// A Ruby non-local exit (raise, throw, Thread#kill) stopped by rb_protect, carried through C++
|
|
63
|
+
// frames so that they unwind until cb_method resumes it with rb_jump_tag. What the exit carries
|
|
64
|
+
// stays in ec->errinfo, which GC marks. No Ruby code may run between the failed rb_protect and
|
|
65
|
+
// cb_method: code that rescues replaces errinfo, and rb_jump_tag would resume that instead.
|
|
66
|
+
class ruby_jump : public std::exception
|
|
67
|
+
{
|
|
68
|
+
public:
|
|
69
|
+
explicit ruby_jump(int state);
|
|
70
|
+
|
|
71
|
+
[[nodiscard]] auto state() const -> int;
|
|
72
|
+
|
|
73
|
+
private:
|
|
74
|
+
int state_;
|
|
75
|
+
};
|
|
76
|
+
|
|
60
77
|
auto
|
|
61
78
|
exc_feature_not_available() -> VALUE;
|
|
62
79
|
|
|
@@ -69,6 +86,14 @@ exc_cluster_closed() -> VALUE;
|
|
|
69
86
|
auto
|
|
70
87
|
exc_invalid_argument() -> VALUE;
|
|
71
88
|
|
|
89
|
+
// Builds an exception of exc_type under cb_protect: the exception classes define initialize in
|
|
90
|
+
// Ruby. Call it only from a method body registered through cb_method.
|
|
91
|
+
[[nodiscard]] auto
|
|
92
|
+
cb_exc_new(VALUE exc_type, const std::string& message) -> VALUE;
|
|
93
|
+
|
|
94
|
+
[[nodiscard]] auto
|
|
95
|
+
cb_exc_new(VALUE exc_type, VALUE message) -> VALUE;
|
|
96
|
+
|
|
72
97
|
[[nodiscard]] auto
|
|
73
98
|
cb_map_error_code(std::error_code ec,
|
|
74
99
|
const std::string& message,
|
data/ext/rcb_extras.cxx
CHANGED
|
@@ -52,7 +52,7 @@ cb_Backend_collections_manifest_get(VALUE self, VALUE bucket_name, VALUE timeout
|
|
|
52
52
|
{
|
|
53
53
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
cb_check_type(bucket_name, T_STRING);
|
|
56
56
|
|
|
57
57
|
try {
|
|
58
58
|
core::operations::management::collections_manifest_get_request req{ core::document_id{
|
|
@@ -91,10 +91,8 @@ cb_Backend_collections_manifest_get(VALUE self, VALUE bucket_name, VALUE timeout
|
|
|
91
91
|
|
|
92
92
|
return res;
|
|
93
93
|
} catch (const std::system_error& se) {
|
|
94
|
-
|
|
94
|
+
throw ruby_exception(cb_map_error_code(
|
|
95
95
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
96
|
-
} catch (const ruby_exception& e) {
|
|
97
|
-
rb_exc_raise(e.exception_object());
|
|
98
96
|
}
|
|
99
97
|
return Qnil;
|
|
100
98
|
}
|
|
@@ -103,8 +101,8 @@ VALUE
|
|
|
103
101
|
cb_Backend_dns_srv(VALUE self, VALUE hostname, VALUE service)
|
|
104
102
|
{
|
|
105
103
|
(void)self;
|
|
106
|
-
|
|
107
|
-
|
|
104
|
+
cb_check_type(hostname, T_STRING);
|
|
105
|
+
cb_check_type(service, T_SYMBOL);
|
|
108
106
|
|
|
109
107
|
bool tls = false;
|
|
110
108
|
|
|
@@ -113,8 +111,8 @@ cb_Backend_dns_srv(VALUE self, VALUE hostname, VALUE service)
|
|
|
113
111
|
} else if (type == rb_intern("couchbases")) {
|
|
114
112
|
tls = true;
|
|
115
113
|
} else {
|
|
116
|
-
|
|
117
|
-
|
|
114
|
+
throw ruby_exception(rb_eArgError,
|
|
115
|
+
cb_sprintf("Unsupported service type: %+" PRIsVALUE, service));
|
|
118
116
|
}
|
|
119
117
|
|
|
120
118
|
try {
|
|
@@ -152,10 +150,8 @@ cb_Backend_dns_srv(VALUE self, VALUE hostname, VALUE service)
|
|
|
152
150
|
}
|
|
153
151
|
return res;
|
|
154
152
|
} catch (const std::system_error& se) {
|
|
155
|
-
|
|
153
|
+
throw ruby_exception(cb_map_error_code(
|
|
156
154
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
157
|
-
} catch (const ruby_exception& e) {
|
|
158
|
-
rb_exc_raise(e.exception_object());
|
|
159
155
|
}
|
|
160
156
|
return Qnil;
|
|
161
157
|
}
|
|
@@ -370,10 +366,8 @@ cb_Backend_cluster_enable_developer_preview(VALUE self)
|
|
|
370
366
|
"upgrade. DO NOT USE IN PRODUCTION.");
|
|
371
367
|
return Qtrue;
|
|
372
368
|
} catch (const std::system_error& se) {
|
|
373
|
-
|
|
369
|
+
throw ruby_exception(cb_map_error_code(
|
|
374
370
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
375
|
-
} catch (const ruby_exception& e) {
|
|
376
|
-
rb_exc_raise(e.exception_object());
|
|
377
371
|
}
|
|
378
372
|
return Qnil;
|
|
379
373
|
}
|
|
@@ -384,11 +378,16 @@ void
|
|
|
384
378
|
init_extras(VALUE cBackend)
|
|
385
379
|
{
|
|
386
380
|
/* utility function that are not intended for public usage */
|
|
387
|
-
rb_define_method(cBackend,
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
381
|
+
rb_define_method(cBackend,
|
|
382
|
+
"collections_manifest_get",
|
|
383
|
+
cb_method<cb_Backend_collections_manifest_get>::invoke,
|
|
384
|
+
2);
|
|
385
|
+
rb_define_method(cBackend,
|
|
386
|
+
"cluster_enable_developer_preview!",
|
|
387
|
+
cb_method<cb_Backend_cluster_enable_developer_preview>::invoke,
|
|
388
|
+
0);
|
|
389
|
+
|
|
390
|
+
rb_define_singleton_method(cBackend, "dns_srv", cb_method<cb_Backend_dns_srv>::invoke, 2);
|
|
392
391
|
rb_define_singleton_method(
|
|
393
392
|
cBackend, "parse_connection_string", cb_Backend_parse_connection_string, 1);
|
|
394
393
|
rb_define_singleton_method(cBackend, "snappy_compress", cb_Backend_snappy_compress, 1);
|