couchbase 3.8.1 → 3.9.0
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 +2 -2
- 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 +214 -155
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +130 -21
- 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 +10 -3
- 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 +1554 -398
- 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 +325 -25
- 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 +66 -0
- 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 +316 -317
- 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 +275 -14
- data/ext/couchbase/core/io/streams.hxx +53 -0
- 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/bucket_create.cxx +37 -38
- data/ext/couchbase/core/operations/management/bucket_update.cxx +26 -28
- 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 +59 -5
- 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 +362 -241
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +24 -3
- 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 +194 -66
- 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 +15 -4
- 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 +3 -29
- 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 +216 -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 +32 -0
- 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 +33 -14
- 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 +181 -44
- 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 +92 -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
|
@@ -32,7 +32,9 @@
|
|
|
32
32
|
#include <couchbase/search_query.hxx>
|
|
33
33
|
#include <couchbase/search_request.hxx>
|
|
34
34
|
#include <couchbase/transactions.hxx>
|
|
35
|
+
#include <couchbase/wait_until_ready_options.hxx>
|
|
35
36
|
|
|
37
|
+
#include <chrono>
|
|
36
38
|
#include <memory>
|
|
37
39
|
|
|
38
40
|
namespace couchbase
|
|
@@ -67,8 +69,16 @@ public:
|
|
|
67
69
|
* over this options).
|
|
68
70
|
* @param handler the handler
|
|
69
71
|
*
|
|
72
|
+
* @note A connection string with the @c couchbase2:// scheme selects the @ref couchbase2
|
|
73
|
+
* "couchbase2" transport, which routes every operation through a Cloud Native Gateway (CNG). It
|
|
74
|
+
* requires a library built with that support and restricts how the connection string may be
|
|
75
|
+
* written; see
|
|
76
|
+
* @ref couchbase2.
|
|
77
|
+
*
|
|
70
78
|
* @since 1.0.0
|
|
71
79
|
* @committed
|
|
80
|
+
* @cng_since{1.4.0}
|
|
81
|
+
* @cng_uncommitted
|
|
72
82
|
*/
|
|
73
83
|
static void connect(const std::string& connection_string,
|
|
74
84
|
const cluster_options& options,
|
|
@@ -83,8 +93,16 @@ public:
|
|
|
83
93
|
*
|
|
84
94
|
* @return future object that carries cluster object and operation status
|
|
85
95
|
*
|
|
96
|
+
* @note A connection string with the @c couchbase2:// scheme selects the @ref couchbase2
|
|
97
|
+
* "couchbase2" transport, which routes every operation through a Cloud Native Gateway (CNG). It
|
|
98
|
+
* requires a library built with that support and restricts how the connection string may be
|
|
99
|
+
* written; see
|
|
100
|
+
* @ref couchbase2.
|
|
101
|
+
*
|
|
86
102
|
* @since 1.0.0
|
|
87
103
|
* @committed
|
|
104
|
+
* @cng_since{1.4.0}
|
|
105
|
+
* @cng_uncommitted
|
|
88
106
|
*/
|
|
89
107
|
[[nodiscard]] static auto connect(const std::string& connection_string,
|
|
90
108
|
const cluster_options& options)
|
|
@@ -97,6 +115,39 @@ public:
|
|
|
97
115
|
auto operator=(const cluster& other) -> cluster& = default;
|
|
98
116
|
auto operator=(cluster&& other) -> cluster& = default;
|
|
99
117
|
|
|
118
|
+
/**
|
|
119
|
+
* Notify the cluster of a fork-related event, so it can keep its I/O usable
|
|
120
|
+
* across @c fork().
|
|
121
|
+
*
|
|
122
|
+
* Call it three times, in this order: @ref fork_event::prepare in the parent
|
|
123
|
+
* before forking, then @ref fork_event::child in the child and @ref
|
|
124
|
+
* fork_event::parent in the parent.
|
|
125
|
+
*
|
|
126
|
+
* NOTE: @ref fork_event::child reconnects this cluster on a fresh set of
|
|
127
|
+
* sockets, because the inherited ones belong to the parent. Any @ref bucket,
|
|
128
|
+
* @ref scope or @ref collection handle obtained before the fork still refers to
|
|
129
|
+
* the pre-fork connections, so in the child those handles must be re-acquired
|
|
130
|
+
* from the cluster -- using a stale one fails with @ref
|
|
131
|
+
* errc::network::cluster_closed. Handles held in the parent stay valid.
|
|
132
|
+
*
|
|
133
|
+
* This function must not be called while operations are in flight on this
|
|
134
|
+
* cluster from another thread.
|
|
135
|
+
*
|
|
136
|
+
* On platforms without @c fork(), Windows in particular, this function does
|
|
137
|
+
* nothing. It remains callable everywhere so that portable code does not have to
|
|
138
|
+
* guard the calls, but nothing about the cluster changes.
|
|
139
|
+
*
|
|
140
|
+
* @param event the fork-related event that is about to happen, or just happened.
|
|
141
|
+
*
|
|
142
|
+
* @throws std::system_error if the I/O backend cannot be carried across the fork.
|
|
143
|
+
* There is no recovery for this: the cluster's io_context is unusable afterwards
|
|
144
|
+
* and the only thing left to do with the cluster is destroy it. It is reported
|
|
145
|
+
* rather than swallowed because a caller that went on using such a cluster would
|
|
146
|
+
* be operating on a reactor that no longer tracks its sockets.
|
|
147
|
+
*
|
|
148
|
+
* @since 1.0.0
|
|
149
|
+
* @uncommitted
|
|
150
|
+
*/
|
|
100
151
|
void notify_fork(fork_event event);
|
|
101
152
|
|
|
102
153
|
void close(std::function<void()>&& handler);
|
|
@@ -120,11 +171,11 @@ public:
|
|
|
120
171
|
/**
|
|
121
172
|
* Replaces the current authenticator used by this cluster.
|
|
122
173
|
*
|
|
123
|
-
* NOTE:
|
|
124
|
-
|
|
174
|
+
* NOTE: Existing KV connections keep the certificate they were opened with. HTTP requests sent
|
|
175
|
+
* after the call use a new connection, and a request already in flight completes.
|
|
125
176
|
*
|
|
126
177
|
* @param authenticator the authenticator to replace
|
|
127
|
-
|
|
178
|
+
*
|
|
128
179
|
* @exception errc::common::invalid_argument if TLS is not enabled.
|
|
129
180
|
*
|
|
130
181
|
* @return error
|
|
@@ -188,6 +239,60 @@ public:
|
|
|
188
239
|
[[nodiscard]] auto query(std::string statement, const query_options& options) const
|
|
189
240
|
-> std::future<std::pair<error, query_result>>;
|
|
190
241
|
|
|
242
|
+
/**
|
|
243
|
+
* Performs a streaming query against the query (N1QL) services.
|
|
244
|
+
*
|
|
245
|
+
* The handler resolves as soon as the response preamble has been parsed; rows are then pulled
|
|
246
|
+
* lazily from the @ref query_stream_result, so the full result is never buffered in memory.
|
|
247
|
+
*
|
|
248
|
+
* @note Prepared statements (@ref query_options#adhoc set to false) are not streamed: such a
|
|
249
|
+
* request falls back to the buffered @ref query() path and its rows are replayed through the
|
|
250
|
+
* returned handle.
|
|
251
|
+
*
|
|
252
|
+
* The handler runs on the library's I/O thread, so the stream must be drained with the callback
|
|
253
|
+
* @ref query_stream_result#next() overload rather than the blocking ones:
|
|
254
|
+
*
|
|
255
|
+
* @snippet{trimleft} test_integration_examples_streaming.cxx example-query-stream-async
|
|
256
|
+
*
|
|
257
|
+
* @param statement the N1QL query statement.
|
|
258
|
+
* @param options options to customize the query request.
|
|
259
|
+
* @param handler the handler that implements @ref query_stream_handler
|
|
260
|
+
*
|
|
261
|
+
* @since 1.4.0
|
|
262
|
+
* @volatile
|
|
263
|
+
*/
|
|
264
|
+
void query_stream(std::string statement,
|
|
265
|
+
const query_options& options,
|
|
266
|
+
query_stream_handler&& handler) const;
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Performs a streaming query against the query (N1QL) services.
|
|
270
|
+
*
|
|
271
|
+
* Rows are pulled from the returned handle one at a time, so a result of any size costs the same
|
|
272
|
+
* bounded amount of memory:
|
|
273
|
+
*
|
|
274
|
+
* @snippet{trimleft} test_integration_examples_streaming.cxx example-query-stream
|
|
275
|
+
*
|
|
276
|
+
* The document type the rows are decoded into:
|
|
277
|
+
*
|
|
278
|
+
* @snippet{trimleft} test_integration_examples_streaming.cxx streaming-product
|
|
279
|
+
*
|
|
280
|
+
* A failure surfaces either here, before the stream starts, or as the terminal of
|
|
281
|
+
* @ref query_stream_result#next() — possibly after rows have already been consumed, which a
|
|
282
|
+
* buffered @ref query() cannot produce. Both channels have to be handled:
|
|
283
|
+
*
|
|
284
|
+
* @snippet{trimleft} test_integration_examples_streaming.cxx example-query-stream-errors
|
|
285
|
+
*
|
|
286
|
+
* @param statement the N1QL query statement.
|
|
287
|
+
* @param options options to customize the query request.
|
|
288
|
+
* @return future object that carries the streaming result handle
|
|
289
|
+
*
|
|
290
|
+
* @since 1.4.0
|
|
291
|
+
* @volatile
|
|
292
|
+
*/
|
|
293
|
+
[[nodiscard]] auto query_stream(std::string statement, const query_options& options = {}) const
|
|
294
|
+
-> std::future<std::pair<error, query_stream_result>>;
|
|
295
|
+
|
|
191
296
|
/**
|
|
192
297
|
* Performs a request against the full text search services.
|
|
193
298
|
*
|
|
@@ -265,8 +370,48 @@ public:
|
|
|
265
370
|
* @since 1.0.0
|
|
266
371
|
* @committed
|
|
267
372
|
*/
|
|
268
|
-
[[nodiscard]] auto analytics_query(std::string statement,
|
|
269
|
-
|
|
373
|
+
[[nodiscard]] auto analytics_query(std::string statement,
|
|
374
|
+
const analytics_options& options = {}) const
|
|
375
|
+
-> std::future<std::pair<error, analytics_result>>;
|
|
376
|
+
|
|
377
|
+
/**
|
|
378
|
+
* Performs a streaming query against the analytics services.
|
|
379
|
+
*
|
|
380
|
+
* The handler resolves as soon as the response preamble has been parsed; rows are then pulled
|
|
381
|
+
* lazily from the @ref analytics_stream_result, so the full result is never buffered in memory.
|
|
382
|
+
*
|
|
383
|
+
* The handler runs on the library's I/O thread, so the stream must be drained with the callback
|
|
384
|
+
* @ref analytics_stream_result#next() overload rather than the blocking ones. The query
|
|
385
|
+
* equivalent shows the pattern:
|
|
386
|
+
*
|
|
387
|
+
* @snippet{trimleft} test_integration_examples_streaming.cxx example-query-stream-async
|
|
388
|
+
*
|
|
389
|
+
* @param statement the analytics query statement.
|
|
390
|
+
* @param options options to customize the query request.
|
|
391
|
+
* @param handler the handler that implements @ref analytics_stream_handler
|
|
392
|
+
*
|
|
393
|
+
* @since 1.4.0
|
|
394
|
+
* @volatile
|
|
395
|
+
*/
|
|
396
|
+
void analytics_query_stream(std::string statement,
|
|
397
|
+
const analytics_options& options,
|
|
398
|
+
analytics_stream_handler&& handler) const;
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* Performs a streaming query against the analytics services.
|
|
402
|
+
*
|
|
403
|
+
* @snippet{trimleft} test_integration_examples_streaming.cxx example-analytics-stream
|
|
404
|
+
*
|
|
405
|
+
* @param statement the analytics query statement.
|
|
406
|
+
* @param options options to customize the query request.
|
|
407
|
+
* @return future object that carries the streaming result handle
|
|
408
|
+
*
|
|
409
|
+
* @since 1.4.0
|
|
410
|
+
* @volatile
|
|
411
|
+
*/
|
|
412
|
+
[[nodiscard]] auto analytics_query_stream(std::string statement,
|
|
413
|
+
const analytics_options& options = {}) const
|
|
414
|
+
-> std::future<std::pair<error, analytics_stream_result>>;
|
|
270
415
|
|
|
271
416
|
/**
|
|
272
417
|
* Performs application-level ping requests against services in the Couchbase cluster.
|
|
@@ -277,8 +422,13 @@ public:
|
|
|
277
422
|
* @param options custom options to change the default behavior.
|
|
278
423
|
* @param handler the handler that implements @ref ping_handler.
|
|
279
424
|
*
|
|
425
|
+
* @note Not served over the @ref couchbase2 "couchbase2" transport, which has no per-node service
|
|
426
|
+
* endpoints to probe and reports @ref errc::common::feature_not_available instead.
|
|
427
|
+
*
|
|
280
428
|
* @since 1.0.0
|
|
281
429
|
* @committed
|
|
430
|
+
* @cng_since{1.4.0}
|
|
431
|
+
* @cng_uncommitted
|
|
282
432
|
*/
|
|
283
433
|
void ping(const ping_options& options, ping_handler&& handler) const;
|
|
284
434
|
|
|
@@ -291,8 +441,13 @@ public:
|
|
|
291
441
|
* @param options custom options to change the default behavior.
|
|
292
442
|
* @return future object that carries result of the operation.
|
|
293
443
|
*
|
|
444
|
+
* @note Not served over the @ref couchbase2 "couchbase2" transport, which has no per-node service
|
|
445
|
+
* endpoints to probe and reports @ref errc::common::feature_not_available instead.
|
|
446
|
+
*
|
|
294
447
|
* @since 1.0.0
|
|
295
448
|
* @committed
|
|
449
|
+
* @cng_since{1.4.0}
|
|
450
|
+
* @cng_uncommitted
|
|
296
451
|
*/
|
|
297
452
|
[[nodiscard]] auto ping(const ping_options& options = {}) const
|
|
298
453
|
-> std::future<std::pair<error, ping_result>>;
|
|
@@ -310,8 +465,14 @@ public:
|
|
|
310
465
|
* @param options custom options to change the default behavior.
|
|
311
466
|
* @param handler the handler that implements @ref diagnostics_handler.
|
|
312
467
|
*
|
|
468
|
+
* @note Not served over the @ref couchbase2 "couchbase2" transport, which keeps no per-node
|
|
469
|
+
* connection state to report on and returns @ref errc::common::feature_not_available rather than
|
|
470
|
+
* an empty report.
|
|
471
|
+
*
|
|
313
472
|
* @since 1.0.0
|
|
314
473
|
* @committed
|
|
474
|
+
* @cng_since{1.4.0}
|
|
475
|
+
* @cng_uncommitted
|
|
315
476
|
*/
|
|
316
477
|
void diagnostics(const diagnostics_options& options, diagnostics_handler&& handler) const;
|
|
317
478
|
|
|
@@ -328,12 +489,62 @@ public:
|
|
|
328
489
|
* @param options custom options to change the default behavior.
|
|
329
490
|
* @return future object that carries result of the operation.
|
|
330
491
|
*
|
|
492
|
+
* @note Not served over the @ref couchbase2 "couchbase2" transport, which keeps no per-node
|
|
493
|
+
* connection state to report on and returns @ref errc::common::feature_not_available rather than
|
|
494
|
+
* an empty report.
|
|
495
|
+
*
|
|
331
496
|
* @since 1.0.0
|
|
332
497
|
* @committed
|
|
498
|
+
* @cng_since{1.4.0}
|
|
499
|
+
* @cng_uncommitted
|
|
333
500
|
*/
|
|
334
501
|
[[nodiscard]] auto diagnostics(const diagnostics_options& options = {}) const
|
|
335
502
|
-> std::future<std::pair<error, diagnostics_result>>;
|
|
336
503
|
|
|
504
|
+
/**
|
|
505
|
+
* Waits until the desired state of the cluster is reached, actively pinging its services until
|
|
506
|
+
* they respond or the timeout elapses.
|
|
507
|
+
*
|
|
508
|
+
* Over couchbase2, the wait ends once the gRPC channel to the gateway is connected. No service is
|
|
509
|
+
* pinged, the requested services are not considered, and @c cluster_state::online and
|
|
510
|
+
* @c cluster_state::degraded are the same state.
|
|
511
|
+
*
|
|
512
|
+
* Closing the cluster ends a wait in flight with @ref errc::network::cluster_closed, and a wait
|
|
513
|
+
* started after the cluster is closed fails the same way.
|
|
514
|
+
*
|
|
515
|
+
* @param timeout the maximum time to wait for readiness.
|
|
516
|
+
* @param options custom options to change the default behavior.
|
|
517
|
+
* @param handler the handler that implements @ref wait_until_ready_handler.
|
|
518
|
+
*
|
|
519
|
+
* @since 1.4.0
|
|
520
|
+
* @committed
|
|
521
|
+
*/
|
|
522
|
+
void wait_until_ready(std::chrono::milliseconds timeout,
|
|
523
|
+
const wait_until_ready_options& options,
|
|
524
|
+
wait_until_ready_handler&& handler) const;
|
|
525
|
+
|
|
526
|
+
/**
|
|
527
|
+
* Waits until the desired state of the cluster is reached, actively pinging its services until
|
|
528
|
+
* they respond or the timeout elapses.
|
|
529
|
+
*
|
|
530
|
+
* Over couchbase2, the wait ends once the gRPC channel to the gateway is connected. No service is
|
|
531
|
+
* pinged, the requested services are not considered, and @c cluster_state::online and
|
|
532
|
+
* @c cluster_state::degraded are the same state.
|
|
533
|
+
*
|
|
534
|
+
* Closing the cluster ends a wait in flight with @ref errc::network::cluster_closed, and a wait
|
|
535
|
+
* started after the cluster is closed fails the same way.
|
|
536
|
+
*
|
|
537
|
+
* @param timeout the maximum time to wait for readiness.
|
|
538
|
+
* @param options custom options to change the default behavior.
|
|
539
|
+
* @return future object that carries result of the operation.
|
|
540
|
+
*
|
|
541
|
+
* @since 1.4.0
|
|
542
|
+
* @committed
|
|
543
|
+
*/
|
|
544
|
+
[[nodiscard]] auto wait_until_ready(std::chrono::milliseconds timeout,
|
|
545
|
+
const wait_until_ready_options& options = {}) const
|
|
546
|
+
-> std::future<error>;
|
|
547
|
+
|
|
337
548
|
/**
|
|
338
549
|
* Provides access to the N1QL index management services.
|
|
339
550
|
*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright
|
|
3
|
+
* Copyright 2026-Present Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -17,18 +17,22 @@
|
|
|
17
17
|
|
|
18
18
|
#pragma once
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
#include <vector>
|
|
22
|
-
|
|
23
|
-
namespace couchbase::core::columnar
|
|
20
|
+
namespace couchbase
|
|
24
21
|
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Describes the readiness of the cluster (or a bucket) from the SDK's point of view. Used as the
|
|
24
|
+
* target state of @ref cluster::wait_until_ready() and @ref bucket::wait_until_ready().
|
|
25
|
+
*
|
|
26
|
+
* @since 1.4.0
|
|
27
|
+
* @committed
|
|
28
|
+
*/
|
|
29
|
+
enum class cluster_state {
|
|
30
|
+
/** Every reachable endpoint of every requested service is responsive. */
|
|
31
|
+
online,
|
|
32
|
+
/** At least one endpoint of every requested service is responsive. */
|
|
33
|
+
degraded,
|
|
34
|
+
/** Not a meaningful state to wait for; passing it is rejected with @c
|
|
35
|
+
* errc::common::invalid_argument. */
|
|
36
|
+
offline,
|
|
33
37
|
};
|
|
34
|
-
} // namespace couchbase
|
|
38
|
+
} // namespace couchbase
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2020-Present Couchbase, Inc.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
#pragma once
|
|
19
|
+
|
|
20
|
+
#include <couchbase/codec/codec_flags.hxx>
|
|
21
|
+
#include <couchbase/codec/encoded_value.hxx>
|
|
22
|
+
#include <couchbase/codec/transcoder_traits.hxx>
|
|
23
|
+
|
|
24
|
+
namespace couchbase::codec
|
|
25
|
+
{
|
|
26
|
+
class tao_json_serializer;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* A JSON transcoder that encodes with JSON common flags like @ref json_transcoder, but does NOT
|
|
30
|
+
* validate the document's common flags when decoding.
|
|
31
|
+
*
|
|
32
|
+
* It backs the no-transcoder `content_as<Document>()` overloads of the transactions read results
|
|
33
|
+
* (@ref couchbase::transactions::transaction_get_result and the get-multi results): per the
|
|
34
|
+
* ExtBinarySupport spec the SDK "ignores [the flags] when reading", so e.g. a document written with
|
|
35
|
+
* binary common flags but holding valid JSON can still be read. This restores the
|
|
36
|
+
* pre-ExtBinarySupport behaviour where those accessors did not reject non-JSON flags. Ordinary KV
|
|
37
|
+
* reads continue to use the strict @ref json_transcoder.
|
|
38
|
+
*
|
|
39
|
+
* It is an implementation detail of the transactions read path and is not meant to be named
|
|
40
|
+
* explicitly by applications.
|
|
41
|
+
*
|
|
42
|
+
* @since 1.4.0
|
|
43
|
+
* @internal
|
|
44
|
+
*/
|
|
45
|
+
template<typename Serializer>
|
|
46
|
+
class lenient_json_transcoder
|
|
47
|
+
{
|
|
48
|
+
public:
|
|
49
|
+
template<typename Document>
|
|
50
|
+
static auto encode(Document document) -> encoded_value
|
|
51
|
+
{
|
|
52
|
+
return { Serializer::serialize(document), codec_flags::json_common_flags };
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
template<typename Document>
|
|
56
|
+
static auto decode(const encoded_value& encoded) -> Document
|
|
57
|
+
{
|
|
58
|
+
return Serializer::template deserialize<Document>(encoded.data);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
|
|
62
|
+
using default_lenient_json_transcoder = lenient_json_transcoder<tao_json_serializer>;
|
|
63
|
+
|
|
64
|
+
#ifndef COUCHBASE_CXX_CLIENT_DOXYGEN
|
|
65
|
+
template<>
|
|
66
|
+
struct is_transcoder<default_lenient_json_transcoder> : public std::true_type {
|
|
67
|
+
};
|
|
68
|
+
#endif
|
|
69
|
+
} // namespace couchbase::codec
|