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_users.cxx
CHANGED
|
@@ -89,10 +89,8 @@ cb_Backend_role_get_all(VALUE self, VALUE timeout, VALUE observability_handler)
|
|
|
89
89
|
}
|
|
90
90
|
return res;
|
|
91
91
|
} catch (const std::system_error& se) {
|
|
92
|
-
|
|
92
|
+
throw ruby_exception(cb_map_error_code(
|
|
93
93
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
94
|
-
} catch (const ruby_exception& e) {
|
|
95
|
-
rb_exc_raise(e.exception_object());
|
|
96
94
|
}
|
|
97
95
|
return Qnil;
|
|
98
96
|
}
|
|
@@ -179,7 +177,7 @@ cb_Backend_user_get_all(VALUE self, VALUE domain, VALUE timeout, VALUE observabi
|
|
|
179
177
|
{
|
|
180
178
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
181
179
|
|
|
182
|
-
|
|
180
|
+
cb_check_type(domain, T_SYMBOL);
|
|
183
181
|
|
|
184
182
|
try {
|
|
185
183
|
core::operations::management::user_get_all_request req{};
|
|
@@ -190,7 +188,7 @@ cb_Backend_user_get_all(VALUE self, VALUE domain, VALUE timeout, VALUE observabi
|
|
|
190
188
|
req.domain = core::management::rbac::auth_domain::external;
|
|
191
189
|
} else {
|
|
192
190
|
throw ruby_exception(exc_invalid_argument(),
|
|
193
|
-
|
|
191
|
+
cb_sprintf("unsupported authentication domain: %+" PRIsVALUE, domain));
|
|
194
192
|
}
|
|
195
193
|
auto parent_span = cb_create_parent_span(req, self);
|
|
196
194
|
std::promise<core::operations::management::user_get_all_response> promise;
|
|
@@ -212,10 +210,8 @@ cb_Backend_user_get_all(VALUE self, VALUE domain, VALUE timeout, VALUE observabi
|
|
|
212
210
|
}
|
|
213
211
|
return res;
|
|
214
212
|
} catch (const std::system_error& se) {
|
|
215
|
-
|
|
213
|
+
throw ruby_exception(cb_map_error_code(
|
|
216
214
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
217
|
-
} catch (const ruby_exception& e) {
|
|
218
|
-
rb_exc_raise(e.exception_object());
|
|
219
215
|
}
|
|
220
216
|
return Qnil;
|
|
221
217
|
}
|
|
@@ -229,8 +225,8 @@ cb_Backend_user_get(VALUE self,
|
|
|
229
225
|
{
|
|
230
226
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
231
227
|
|
|
232
|
-
|
|
233
|
-
|
|
228
|
+
cb_check_type(domain, T_SYMBOL);
|
|
229
|
+
cb_check_type(username, T_STRING);
|
|
234
230
|
|
|
235
231
|
try {
|
|
236
232
|
core::operations::management::user_get_request req{};
|
|
@@ -241,7 +237,7 @@ cb_Backend_user_get(VALUE self,
|
|
|
241
237
|
req.domain = core::management::rbac::auth_domain::external;
|
|
242
238
|
} else {
|
|
243
239
|
throw ruby_exception(exc_invalid_argument(),
|
|
244
|
-
|
|
240
|
+
cb_sprintf("unsupported authentication domain: %+" PRIsVALUE, domain));
|
|
245
241
|
}
|
|
246
242
|
req.username = cb_string_new(username);
|
|
247
243
|
auto parent_span = cb_create_parent_span(req, self);
|
|
@@ -260,10 +256,8 @@ cb_Backend_user_get(VALUE self,
|
|
|
260
256
|
cb_extract_user(resp.user, res);
|
|
261
257
|
return res;
|
|
262
258
|
} catch (const std::system_error& se) {
|
|
263
|
-
|
|
259
|
+
throw ruby_exception(cb_map_error_code(
|
|
264
260
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
265
|
-
} catch (const ruby_exception& e) {
|
|
266
|
-
rb_exc_raise(e.exception_object());
|
|
267
261
|
}
|
|
268
262
|
return Qnil;
|
|
269
263
|
}
|
|
@@ -277,8 +271,8 @@ cb_Backend_user_drop(VALUE self,
|
|
|
277
271
|
{
|
|
278
272
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
279
273
|
|
|
280
|
-
|
|
281
|
-
|
|
274
|
+
cb_check_type(domain, T_SYMBOL);
|
|
275
|
+
cb_check_type(username, T_STRING);
|
|
282
276
|
|
|
283
277
|
try {
|
|
284
278
|
core::operations::management::user_drop_request req{};
|
|
@@ -289,7 +283,7 @@ cb_Backend_user_drop(VALUE self,
|
|
|
289
283
|
req.domain = core::management::rbac::auth_domain::external;
|
|
290
284
|
} else {
|
|
291
285
|
throw ruby_exception(exc_invalid_argument(),
|
|
292
|
-
|
|
286
|
+
cb_sprintf("unsupported authentication domain: %+" PRIsVALUE, domain));
|
|
293
287
|
}
|
|
294
288
|
req.username = cb_string_new(username);
|
|
295
289
|
auto parent_span = cb_create_parent_span(req, self);
|
|
@@ -306,10 +300,8 @@ cb_Backend_user_drop(VALUE self,
|
|
|
306
300
|
|
|
307
301
|
return Qtrue;
|
|
308
302
|
} catch (const std::system_error& se) {
|
|
309
|
-
|
|
303
|
+
throw ruby_exception(cb_map_error_code(
|
|
310
304
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
311
|
-
} catch (const ruby_exception& e) {
|
|
312
|
-
rb_exc_raise(e.exception_object());
|
|
313
305
|
}
|
|
314
306
|
return Qnil;
|
|
315
307
|
}
|
|
@@ -323,8 +315,8 @@ cb_Backend_user_upsert(VALUE self,
|
|
|
323
315
|
{
|
|
324
316
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
325
317
|
|
|
326
|
-
|
|
327
|
-
|
|
318
|
+
cb_check_type(domain, T_SYMBOL);
|
|
319
|
+
cb_check_type(user, T_HASH);
|
|
328
320
|
|
|
329
321
|
try {
|
|
330
322
|
core::operations::management::user_upsert_request req{};
|
|
@@ -335,7 +327,7 @@ cb_Backend_user_upsert(VALUE self,
|
|
|
335
327
|
req.domain = core::management::rbac::auth_domain::external;
|
|
336
328
|
} else {
|
|
337
329
|
throw ruby_exception(exc_invalid_argument(),
|
|
338
|
-
|
|
330
|
+
cb_sprintf("unsupported authentication domain: %+" PRIsVALUE, domain));
|
|
339
331
|
}
|
|
340
332
|
VALUE name = rb_hash_aref(user, rb_id2sym(rb_intern("username")));
|
|
341
333
|
if (NIL_P(name) || TYPE(name) != T_STRING) {
|
|
@@ -406,10 +398,8 @@ cb_Backend_user_upsert(VALUE self,
|
|
|
406
398
|
|
|
407
399
|
return Qtrue;
|
|
408
400
|
} catch (const std::system_error& se) {
|
|
409
|
-
|
|
401
|
+
throw ruby_exception(cb_map_error_code(
|
|
410
402
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
411
|
-
} catch (const ruby_exception& e) {
|
|
412
|
-
rb_exc_raise(e.exception_object());
|
|
413
403
|
}
|
|
414
404
|
return Qnil;
|
|
415
405
|
}
|
|
@@ -422,7 +412,7 @@ cb_Backend_change_password(VALUE self,
|
|
|
422
412
|
{
|
|
423
413
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
424
414
|
|
|
425
|
-
|
|
415
|
+
cb_check_type(new_password, T_STRING);
|
|
426
416
|
|
|
427
417
|
try {
|
|
428
418
|
core::operations::management::change_password_request req{};
|
|
@@ -442,10 +432,8 @@ cb_Backend_change_password(VALUE self,
|
|
|
442
432
|
|
|
443
433
|
return Qtrue;
|
|
444
434
|
} catch (const std::system_error& se) {
|
|
445
|
-
|
|
435
|
+
throw ruby_exception(cb_map_error_code(
|
|
446
436
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
447
|
-
} catch (const ruby_exception& e) {
|
|
448
|
-
rb_exc_raise(e.exception_object());
|
|
449
437
|
}
|
|
450
438
|
return Qnil;
|
|
451
439
|
}
|
|
@@ -508,10 +496,8 @@ cb_Backend_group_get_all(VALUE self, VALUE timeout, VALUE observability_handler)
|
|
|
508
496
|
}
|
|
509
497
|
return res;
|
|
510
498
|
} catch (const std::system_error& se) {
|
|
511
|
-
|
|
499
|
+
throw ruby_exception(cb_map_error_code(
|
|
512
500
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
513
|
-
} catch (const ruby_exception& e) {
|
|
514
|
-
rb_exc_raise(e.exception_object());
|
|
515
501
|
}
|
|
516
502
|
return Qnil;
|
|
517
503
|
}
|
|
@@ -521,7 +507,7 @@ cb_Backend_group_get(VALUE self, VALUE name, VALUE timeout, VALUE observability_
|
|
|
521
507
|
{
|
|
522
508
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
523
509
|
|
|
524
|
-
|
|
510
|
+
cb_check_type(name, T_STRING);
|
|
525
511
|
|
|
526
512
|
try {
|
|
527
513
|
core::operations::management::group_get_request req{};
|
|
@@ -543,10 +529,8 @@ cb_Backend_group_get(VALUE self, VALUE name, VALUE timeout, VALUE observability_
|
|
|
543
529
|
cb_extract_group(resp.group, res);
|
|
544
530
|
return res;
|
|
545
531
|
} catch (const std::system_error& se) {
|
|
546
|
-
|
|
532
|
+
throw ruby_exception(cb_map_error_code(
|
|
547
533
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
548
|
-
} catch (const ruby_exception& e) {
|
|
549
|
-
rb_exc_raise(e.exception_object());
|
|
550
534
|
}
|
|
551
535
|
return Qnil;
|
|
552
536
|
}
|
|
@@ -556,7 +540,7 @@ cb_Backend_group_drop(VALUE self, VALUE name, VALUE timeout, VALUE observability
|
|
|
556
540
|
{
|
|
557
541
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
558
542
|
|
|
559
|
-
|
|
543
|
+
cb_check_type(name, T_STRING);
|
|
560
544
|
|
|
561
545
|
try {
|
|
562
546
|
core::operations::management::group_drop_request req{};
|
|
@@ -576,10 +560,8 @@ cb_Backend_group_drop(VALUE self, VALUE name, VALUE timeout, VALUE observability
|
|
|
576
560
|
}
|
|
577
561
|
return Qtrue;
|
|
578
562
|
} catch (const std::system_error& se) {
|
|
579
|
-
|
|
563
|
+
throw ruby_exception(cb_map_error_code(
|
|
580
564
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
581
|
-
} catch (const ruby_exception& e) {
|
|
582
|
-
rb_exc_raise(e.exception_object());
|
|
583
565
|
}
|
|
584
566
|
return Qnil;
|
|
585
567
|
}
|
|
@@ -589,7 +571,7 @@ cb_Backend_group_upsert(VALUE self, VALUE group, VALUE timeout, VALUE observabil
|
|
|
589
571
|
{
|
|
590
572
|
auto cluster = cb_backend_to_core_api_cluster(self);
|
|
591
573
|
|
|
592
|
-
|
|
574
|
+
cb_check_type(group, T_HASH);
|
|
593
575
|
|
|
594
576
|
try {
|
|
595
577
|
core::operations::management::group_upsert_request req{};
|
|
@@ -652,10 +634,8 @@ cb_Backend_group_upsert(VALUE self, VALUE group, VALUE timeout, VALUE observabil
|
|
|
652
634
|
}
|
|
653
635
|
return Qtrue;
|
|
654
636
|
} catch (const std::system_error& se) {
|
|
655
|
-
|
|
637
|
+
throw ruby_exception(cb_map_error_code(
|
|
656
638
|
se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
|
|
657
|
-
} catch (const ruby_exception& e) {
|
|
658
|
-
rb_exc_raise(e.exception_object());
|
|
659
639
|
}
|
|
660
640
|
return Qnil;
|
|
661
641
|
}
|
|
@@ -664,16 +644,16 @@ cb_Backend_group_upsert(VALUE self, VALUE group, VALUE timeout, VALUE observabil
|
|
|
664
644
|
void
|
|
665
645
|
init_users(VALUE cBackend)
|
|
666
646
|
{
|
|
667
|
-
rb_define_method(cBackend, "role_get_all", cb_Backend_role_get_all, 2);
|
|
668
|
-
rb_define_method(cBackend, "user_get_all", cb_Backend_user_get_all, 3);
|
|
669
|
-
rb_define_method(cBackend, "user_get", cb_Backend_user_get, 4);
|
|
670
|
-
rb_define_method(cBackend, "user_drop", cb_Backend_user_drop, 4);
|
|
671
|
-
rb_define_method(cBackend, "user_upsert", cb_Backend_user_upsert, 4);
|
|
672
|
-
rb_define_method(cBackend, "group_get_all", cb_Backend_group_get_all, 2);
|
|
673
|
-
rb_define_method(cBackend, "group_get", cb_Backend_group_get, 3);
|
|
674
|
-
rb_define_method(cBackend, "group_drop", cb_Backend_group_drop, 3);
|
|
675
|
-
rb_define_method(cBackend, "group_upsert", cb_Backend_group_upsert, 3);
|
|
676
|
-
|
|
677
|
-
rb_define_method(cBackend, "change_password", cb_Backend_change_password, 3);
|
|
647
|
+
rb_define_method(cBackend, "role_get_all", cb_method<cb_Backend_role_get_all>::invoke, 2);
|
|
648
|
+
rb_define_method(cBackend, "user_get_all", cb_method<cb_Backend_user_get_all>::invoke, 3);
|
|
649
|
+
rb_define_method(cBackend, "user_get", cb_method<cb_Backend_user_get>::invoke, 4);
|
|
650
|
+
rb_define_method(cBackend, "user_drop", cb_method<cb_Backend_user_drop>::invoke, 4);
|
|
651
|
+
rb_define_method(cBackend, "user_upsert", cb_method<cb_Backend_user_upsert>::invoke, 4);
|
|
652
|
+
rb_define_method(cBackend, "group_get_all", cb_method<cb_Backend_group_get_all>::invoke, 2);
|
|
653
|
+
rb_define_method(cBackend, "group_get", cb_method<cb_Backend_group_get>::invoke, 3);
|
|
654
|
+
rb_define_method(cBackend, "group_drop", cb_method<cb_Backend_group_drop>::invoke, 3);
|
|
655
|
+
rb_define_method(cBackend, "group_upsert", cb_method<cb_Backend_group_upsert>::invoke, 3);
|
|
656
|
+
|
|
657
|
+
rb_define_method(cBackend, "change_password", cb_method<cb_Backend_change_password>::invoke, 3);
|
|
678
658
|
}
|
|
679
659
|
} // namespace couchbase::ruby
|
data/ext/rcb_utils.cxx
CHANGED
|
@@ -15,13 +15,17 @@
|
|
|
15
15
|
* limitations under the License.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
#include <couchbase/best_effort_retry_strategy.hxx>
|
|
18
19
|
#include <couchbase/expiry.hxx>
|
|
20
|
+
#include <couchbase/fail_fast_retry_strategy.hxx>
|
|
19
21
|
|
|
20
22
|
#include <core/utils/binary.hxx>
|
|
21
23
|
|
|
22
24
|
#include "rcb_exceptions.hxx"
|
|
23
25
|
#include "rcb_utils.hxx"
|
|
24
26
|
|
|
27
|
+
#include <chrono>
|
|
28
|
+
#include <cinttypes>
|
|
25
29
|
#include <cstdint>
|
|
26
30
|
#include <ruby.h>
|
|
27
31
|
|
|
@@ -99,7 +103,7 @@ extract_legacy_durability_replicate_to(VALUE options)
|
|
|
99
103
|
{
|
|
100
104
|
static VALUE property_name{ rb_id2sym(rb_intern("replicate_to")) };
|
|
101
105
|
if (VALUE val = rb_hash_aref(options, property_name); !NIL_P(val)) {
|
|
102
|
-
ID mode =
|
|
106
|
+
ID mode = cb_sym2id(val);
|
|
103
107
|
if (mode == rb_intern("none")) {
|
|
104
108
|
return {};
|
|
105
109
|
}
|
|
@@ -113,7 +117,7 @@ extract_legacy_durability_replicate_to(VALUE options)
|
|
|
113
117
|
return couchbase::replicate_to::three;
|
|
114
118
|
}
|
|
115
119
|
throw ruby_exception(exc_invalid_argument(),
|
|
116
|
-
|
|
120
|
+
cb_sprintf("unknown replicate_to: %+" PRIsVALUE, val));
|
|
117
121
|
}
|
|
118
122
|
return couchbase::replicate_to::none;
|
|
119
123
|
}
|
|
@@ -123,7 +127,7 @@ extract_legacy_durability_persist_to(VALUE options)
|
|
|
123
127
|
{
|
|
124
128
|
static VALUE property_name{ rb_id2sym(rb_intern("persist_to")) };
|
|
125
129
|
if (VALUE val = rb_hash_aref(options, property_name); !NIL_P(val)) {
|
|
126
|
-
ID mode =
|
|
130
|
+
ID mode = cb_sym2id(val);
|
|
127
131
|
if (mode == rb_intern("none")) {
|
|
128
132
|
return {};
|
|
129
133
|
}
|
|
@@ -143,7 +147,7 @@ extract_legacy_durability_persist_to(VALUE options)
|
|
|
143
147
|
return couchbase::persist_to::four;
|
|
144
148
|
}
|
|
145
149
|
throw ruby_exception(exc_invalid_argument(),
|
|
146
|
-
|
|
150
|
+
cb_sprintf("unknown persist_to value: %+" PRIsVALUE, val));
|
|
147
151
|
}
|
|
148
152
|
return couchbase::persist_to::none;
|
|
149
153
|
}
|
|
@@ -165,7 +169,7 @@ cb_check_type(VALUE object, int type)
|
|
|
165
169
|
if (auto object_type = TYPE(object);
|
|
166
170
|
object_type != type || (object_type == T_DATA && RTYPEDDATA_P(object))) {
|
|
167
171
|
throw ruby_exception(rb_eTypeError,
|
|
168
|
-
|
|
172
|
+
cb_sprintf("wrong argument type %" PRIsVALUE " (expected %s)",
|
|
169
173
|
cb_displaying_class_of(object),
|
|
170
174
|
cb_builtin_type_name(type)));
|
|
171
175
|
}
|
|
@@ -225,7 +229,7 @@ void
|
|
|
225
229
|
cb_extract_flags(std::uint32_t& field, VALUE flags)
|
|
226
230
|
{
|
|
227
231
|
cb_check_type(flags, T_FIXNUM);
|
|
228
|
-
field =
|
|
232
|
+
field = cb_num2uint(flags);
|
|
229
233
|
}
|
|
230
234
|
|
|
231
235
|
void
|
|
@@ -240,6 +244,31 @@ cb_extract_timeout(std::optional<std::chrono::milliseconds>& field, VALUE option
|
|
|
240
244
|
cb_extract_duration(field, options, "timeout");
|
|
241
245
|
}
|
|
242
246
|
|
|
247
|
+
auto
|
|
248
|
+
cb_extract_retry_strategy(VALUE options) -> std::shared_ptr<couchbase::retry_strategy>
|
|
249
|
+
{
|
|
250
|
+
if (NIL_P(options) || TYPE(options) != T_HASH) {
|
|
251
|
+
return nullptr;
|
|
252
|
+
}
|
|
253
|
+
static VALUE property_name{ rb_id2sym(rb_intern("retry_strategy")) };
|
|
254
|
+
VALUE val = rb_hash_aref(options, property_name);
|
|
255
|
+
if (NIL_P(val)) {
|
|
256
|
+
return nullptr;
|
|
257
|
+
}
|
|
258
|
+
if (TYPE(val) == T_SYMBOL) {
|
|
259
|
+
ID name = rb_sym2id(val);
|
|
260
|
+
if (name == rb_intern("best_effort")) {
|
|
261
|
+
return couchbase::make_best_effort_retry_strategy();
|
|
262
|
+
}
|
|
263
|
+
if (name == rb_intern("fail_fast")) {
|
|
264
|
+
return couchbase::make_fail_fast_retry_strategy();
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
throw ruby_exception(
|
|
268
|
+
exc_invalid_argument(),
|
|
269
|
+
cb_sprintf("retry_strategy must be :best_effort or :fail_fast, but given %+" PRIsVALUE, val));
|
|
270
|
+
}
|
|
271
|
+
|
|
243
272
|
void
|
|
244
273
|
cb_extract_option_symbol(VALUE& val, VALUE options, const char* name)
|
|
245
274
|
{
|
|
@@ -252,7 +281,7 @@ cb_extract_option_symbol(VALUE& val, VALUE options, const char* name)
|
|
|
252
281
|
return;
|
|
253
282
|
}
|
|
254
283
|
throw couchbase::ruby::ruby_exception(
|
|
255
|
-
rb_eArgError,
|
|
284
|
+
rb_eArgError, cb_sprintf("%s must be an Symbol, but given %+" PRIsVALUE, name, val));
|
|
256
285
|
}
|
|
257
286
|
}
|
|
258
287
|
|
|
@@ -268,7 +297,7 @@ cb_extract_option_string(VALUE& val, VALUE options, const char* name)
|
|
|
268
297
|
return;
|
|
269
298
|
}
|
|
270
299
|
throw couchbase::ruby::ruby_exception(
|
|
271
|
-
rb_eArgError,
|
|
300
|
+
rb_eArgError, cb_sprintf("%s must be an String, but given %+" PRIsVALUE, name, val));
|
|
272
301
|
}
|
|
273
302
|
}
|
|
274
303
|
|
|
@@ -285,7 +314,7 @@ cb_extract_option_string(std::string& target, VALUE options, const char* name)
|
|
|
285
314
|
return;
|
|
286
315
|
}
|
|
287
316
|
throw couchbase::ruby::ruby_exception(
|
|
288
|
-
rb_eArgError,
|
|
317
|
+
rb_eArgError, cb_sprintf("%s must be an String, but given %+" PRIsVALUE, name, val));
|
|
289
318
|
}
|
|
290
319
|
}
|
|
291
320
|
|
|
@@ -302,7 +331,7 @@ cb_extract_option_string(std::optional<std::string>& target, VALUE options, cons
|
|
|
302
331
|
return;
|
|
303
332
|
}
|
|
304
333
|
throw couchbase::ruby::ruby_exception(
|
|
305
|
-
rb_eArgError,
|
|
334
|
+
rb_eArgError, cb_sprintf("%s must be an String, but given %+" PRIsVALUE, name, val));
|
|
306
335
|
}
|
|
307
336
|
}
|
|
308
337
|
|
|
@@ -322,7 +351,7 @@ cb_extract_option_bignum(VALUE& val, VALUE options, const char* name)
|
|
|
322
351
|
break;
|
|
323
352
|
}
|
|
324
353
|
throw couchbase::ruby::ruby_exception(
|
|
325
|
-
rb_eArgError,
|
|
354
|
+
rb_eArgError, cb_sprintf("%s must be an Integer, but given %+" PRIsVALUE, name, val));
|
|
326
355
|
}
|
|
327
356
|
}
|
|
328
357
|
|
|
@@ -338,7 +367,7 @@ cb_extract_option_array(VALUE& val, VALUE options, const char* name)
|
|
|
338
367
|
return;
|
|
339
368
|
}
|
|
340
369
|
throw couchbase::ruby::ruby_exception(
|
|
341
|
-
rb_eArgError,
|
|
370
|
+
rb_eArgError, cb_sprintf("%s must be an Array, but given %+" PRIsVALUE, name, val));
|
|
342
371
|
}
|
|
343
372
|
}
|
|
344
373
|
|
|
@@ -351,7 +380,7 @@ cb_cas_to_num(const couchbase::cas& cas)
|
|
|
351
380
|
couchbase::cas
|
|
352
381
|
cb_num_to_cas(VALUE num)
|
|
353
382
|
{
|
|
354
|
-
return couchbase::cas{ static_cast<std::uint64_t>(
|
|
383
|
+
return couchbase::cas{ static_cast<std::uint64_t>(cb_num2ull(num)) };
|
|
355
384
|
}
|
|
356
385
|
|
|
357
386
|
VALUE
|
|
@@ -370,7 +399,7 @@ cb_extract_cas(couchbase::cas& field, VALUE cas)
|
|
|
370
399
|
break;
|
|
371
400
|
default:
|
|
372
401
|
throw couchbase::ruby::ruby_exception(
|
|
373
|
-
rb_eArgError,
|
|
402
|
+
rb_eArgError, cb_sprintf("CAS must be an Integer, but given %+" PRIsVALUE, cas));
|
|
374
403
|
}
|
|
375
404
|
}
|
|
376
405
|
|
|
@@ -380,7 +409,7 @@ cb_extract_expiry(std::uint32_t& field, VALUE options)
|
|
|
380
409
|
if (NIL_P(options)) {
|
|
381
410
|
return;
|
|
382
411
|
}
|
|
383
|
-
|
|
412
|
+
cb_check_type(options, T_HASH);
|
|
384
413
|
|
|
385
414
|
static VALUE property_name = rb_id2sym(rb_intern("expiry"));
|
|
386
415
|
VALUE val = rb_hash_aref(options, property_name);
|
|
@@ -408,7 +437,7 @@ cb_extract_expiry(std::optional<std::uint32_t>& field, VALUE options)
|
|
|
408
437
|
if (NIL_P(options)) {
|
|
409
438
|
return;
|
|
410
439
|
}
|
|
411
|
-
|
|
440
|
+
cb_check_type(options, T_HASH);
|
|
412
441
|
|
|
413
442
|
static VALUE property_name = rb_id2sym(rb_intern("expiry"));
|
|
414
443
|
VALUE val = rb_hash_aref(options, property_name);
|
|
@@ -434,12 +463,12 @@ std::pair<expiry_type, std::chrono::seconds>
|
|
|
434
463
|
unpack_expiry(VALUE val, bool allow_nil)
|
|
435
464
|
{
|
|
436
465
|
if (TYPE(val) == T_FIXNUM || TYPE(val) == T_BIGNUM) {
|
|
437
|
-
return { expiry_type::relative, std::chrono::seconds(
|
|
466
|
+
return { expiry_type::relative, std::chrono::seconds(cb_num2ull(val)) };
|
|
438
467
|
}
|
|
439
468
|
if (TYPE(val) != T_ARRAY || RARRAY_LEN(val) != 2) {
|
|
440
469
|
throw ruby_exception(
|
|
441
470
|
rb_eArgError,
|
|
442
|
-
|
|
471
|
+
cb_sprintf("expected expiry to be Array[Symbol, Integer|nil], given %+" PRIsVALUE, val));
|
|
443
472
|
}
|
|
444
473
|
VALUE expiry = rb_ary_entry(val, 1);
|
|
445
474
|
if (NIL_P(expiry)) {
|
|
@@ -450,14 +479,14 @@ unpack_expiry(VALUE val, bool allow_nil)
|
|
|
450
479
|
}
|
|
451
480
|
if (TYPE(expiry) != T_FIXNUM && TYPE(expiry) != T_BIGNUM) {
|
|
452
481
|
throw ruby_exception(
|
|
453
|
-
rb_eArgError,
|
|
482
|
+
rb_eArgError, cb_sprintf("expiry value must be an Integer, but given %+" PRIsVALUE, expiry));
|
|
454
483
|
}
|
|
455
|
-
auto duration = std::chrono::seconds(
|
|
484
|
+
auto duration = std::chrono::seconds(cb_num2ull(expiry));
|
|
456
485
|
|
|
457
486
|
VALUE type = rb_ary_entry(val, 0);
|
|
458
487
|
if (TYPE(type) != T_SYMBOL) {
|
|
459
488
|
throw ruby_exception(rb_eArgError,
|
|
460
|
-
|
|
489
|
+
cb_sprintf("expiry type must be a Symbol, but given %+" PRIsVALUE, type));
|
|
461
490
|
}
|
|
462
491
|
static VALUE duration_type = rb_id2sym(rb_intern("duration"));
|
|
463
492
|
static VALUE time_point_type = rb_id2sym(rb_intern("time_point"));
|
|
@@ -467,7 +496,7 @@ unpack_expiry(VALUE val, bool allow_nil)
|
|
|
467
496
|
if (type == time_point_type) {
|
|
468
497
|
return { expiry_type::absolute, duration };
|
|
469
498
|
}
|
|
470
|
-
throw ruby_exception(rb_eArgError,
|
|
499
|
+
throw ruby_exception(rb_eArgError, cb_sprintf("unknown expiry type: %+" PRIsVALUE, type));
|
|
471
500
|
}
|
|
472
501
|
|
|
473
502
|
std::optional<couchbase::durability_level>
|
|
@@ -475,7 +504,7 @@ extract_durability_level(VALUE options)
|
|
|
475
504
|
{
|
|
476
505
|
static VALUE property_name{ rb_id2sym(rb_intern("durability_level")) };
|
|
477
506
|
if (VALUE val = rb_hash_aref(options, property_name); !NIL_P(val)) {
|
|
478
|
-
ID level =
|
|
507
|
+
ID level = cb_sym2id(val);
|
|
479
508
|
if (level == rb_intern("none")) {
|
|
480
509
|
return {};
|
|
481
510
|
}
|
|
@@ -489,7 +518,7 @@ extract_durability_level(VALUE options)
|
|
|
489
518
|
return couchbase::durability_level::persist_to_majority;
|
|
490
519
|
}
|
|
491
520
|
throw ruby_exception(exc_invalid_argument(),
|
|
492
|
-
|
|
521
|
+
cb_sprintf("unknown durability level: %+" PRIsVALUE, val));
|
|
493
522
|
}
|
|
494
523
|
return couchbase::durability_level::none;
|
|
495
524
|
}
|
|
@@ -527,7 +556,7 @@ get_bool(VALUE options, VALUE name)
|
|
|
527
556
|
default:
|
|
528
557
|
throw ruby_exception(
|
|
529
558
|
rb_eArgError,
|
|
530
|
-
|
|
559
|
+
cb_sprintf("%+" PRIsVALUE " must be a Boolean, but given %+" PRIsVALUE, name, val));
|
|
531
560
|
}
|
|
532
561
|
}
|
|
533
562
|
return {};
|
|
@@ -546,11 +575,11 @@ get_milliseconds(VALUE options, VALUE name)
|
|
|
546
575
|
case T_FIXNUM:
|
|
547
576
|
return std::chrono::milliseconds(FIX2ULONG(val));
|
|
548
577
|
case T_BIGNUM:
|
|
549
|
-
return std::chrono::milliseconds(
|
|
578
|
+
return std::chrono::milliseconds(cb_num2ull(val));
|
|
550
579
|
default:
|
|
551
580
|
throw ruby_exception(
|
|
552
581
|
rb_eArgError,
|
|
553
|
-
|
|
582
|
+
cb_sprintf("%+" PRIsVALUE
|
|
554
583
|
" must be a Integer representing milliseconds, but given %+" PRIsVALUE,
|
|
555
584
|
name,
|
|
556
585
|
val));
|
|
@@ -572,11 +601,11 @@ get_size_t(VALUE options, VALUE name)
|
|
|
572
601
|
case T_FIXNUM:
|
|
573
602
|
return static_cast<std::size_t>(FIX2ULONG(val));
|
|
574
603
|
case T_BIGNUM:
|
|
575
|
-
return static_cast<std::size_t>(
|
|
604
|
+
return static_cast<std::size_t>(cb_num2ull(val));
|
|
576
605
|
default:
|
|
577
606
|
throw ruby_exception(
|
|
578
607
|
rb_eArgError,
|
|
579
|
-
|
|
608
|
+
cb_sprintf("%+" PRIsVALUE " must be a Integer, but given %+" PRIsVALUE, name, val));
|
|
580
609
|
}
|
|
581
610
|
}
|
|
582
611
|
return {};
|
|
@@ -596,26 +625,26 @@ get_uint16_t(VALUE options, VALUE name)
|
|
|
596
625
|
if (FIX2ULONG(val) > std::numeric_limits<std::uint16_t>::max()) {
|
|
597
626
|
throw ruby_exception(
|
|
598
627
|
rb_eArgError,
|
|
599
|
-
|
|
628
|
+
cb_sprintf("%+" PRIsVALUE " must not be larger than %d , but given %+" PRIsVALUE,
|
|
600
629
|
name,
|
|
601
630
|
static_cast<int>(std::numeric_limits<std::uint16_t>::max()),
|
|
602
631
|
val));
|
|
603
632
|
}
|
|
604
633
|
return static_cast<std::uint16_t>(FIX2ULONG(val));
|
|
605
634
|
case T_BIGNUM:
|
|
606
|
-
if (
|
|
635
|
+
if (cb_num2ull(val) > std::numeric_limits<std::uint16_t>::max()) {
|
|
607
636
|
throw ruby_exception(
|
|
608
637
|
rb_eArgError,
|
|
609
|
-
|
|
638
|
+
cb_sprintf("%+" PRIsVALUE " must not be larger than %d , but given %+" PRIsVALUE,
|
|
610
639
|
name,
|
|
611
640
|
static_cast<int>(std::numeric_limits<std::uint16_t>::max()),
|
|
612
641
|
val));
|
|
613
642
|
}
|
|
614
|
-
return static_cast<std::uint16_t>(
|
|
643
|
+
return static_cast<std::uint16_t>(cb_num2ull(val));
|
|
615
644
|
default:
|
|
616
645
|
throw ruby_exception(
|
|
617
646
|
rb_eArgError,
|
|
618
|
-
|
|
647
|
+
cb_sprintf("%+" PRIsVALUE " must be a Integer, but given %+" PRIsVALUE, name, val));
|
|
619
648
|
}
|
|
620
649
|
}
|
|
621
650
|
return {};
|
|
@@ -635,7 +664,7 @@ get_symbol(VALUE options, VALUE name)
|
|
|
635
664
|
}
|
|
636
665
|
throw couchbase::ruby::ruby_exception(
|
|
637
666
|
rb_eArgError,
|
|
638
|
-
|
|
667
|
+
cb_sprintf("%+" PRIsVALUE " must be an Symbol, but given %+" PRIsVALUE, name, val));
|
|
639
668
|
}
|
|
640
669
|
return {};
|
|
641
670
|
}
|
|
@@ -654,7 +683,7 @@ get_hash(VALUE options, VALUE name)
|
|
|
654
683
|
}
|
|
655
684
|
throw couchbase::ruby::ruby_exception(
|
|
656
685
|
rb_eArgError,
|
|
657
|
-
|
|
686
|
+
cb_sprintf("%+" PRIsVALUE " must be a Hash, but given %+" PRIsVALUE, name, val));
|
|
658
687
|
}
|
|
659
688
|
return {};
|
|
660
689
|
}
|
|
@@ -673,9 +702,43 @@ get_string(VALUE options, VALUE name)
|
|
|
673
702
|
}
|
|
674
703
|
throw couchbase::ruby::ruby_exception(
|
|
675
704
|
rb_eArgError,
|
|
676
|
-
|
|
705
|
+
cb_sprintf("%+" PRIsVALUE " must be an String, but given %+" PRIsVALUE, name, val));
|
|
677
706
|
}
|
|
678
707
|
return {};
|
|
679
708
|
}
|
|
680
709
|
} // namespace options
|
|
710
|
+
|
|
711
|
+
auto
|
|
712
|
+
cb_to_timeout(VALUE timeout, const char* name, std::chrono::milliseconds max_timeout)
|
|
713
|
+
-> std::chrono::milliseconds
|
|
714
|
+
{
|
|
715
|
+
if (!RB_INTEGER_TYPE_P(timeout)) {
|
|
716
|
+
VALUE message = Qnil;
|
|
717
|
+
cb_protect([&message, timeout, name] {
|
|
718
|
+
message = rb_sprintf("%s must be an Integer, but given %+" PRIsVALUE, name, timeout);
|
|
719
|
+
});
|
|
720
|
+
throw ruby_exception(rb_eArgError, message);
|
|
721
|
+
}
|
|
722
|
+
std::uint64_t timeout_ms = 0;
|
|
723
|
+
// The sign is -2 or -1 for a negative value, and 2 for one that does not fit timeout_ms.
|
|
724
|
+
if (int sign = rb_integer_pack(timeout,
|
|
725
|
+
&timeout_ms,
|
|
726
|
+
1,
|
|
727
|
+
sizeof(timeout_ms),
|
|
728
|
+
0,
|
|
729
|
+
INTEGER_PACK_LSWORD_FIRST | INTEGER_PACK_NATIVE_BYTE_ORDER);
|
|
730
|
+
sign < 0 || sign > 1 || timeout_ms > static_cast<std::uint64_t>(max_timeout.count())) {
|
|
731
|
+
VALUE message = Qnil;
|
|
732
|
+
cb_protect([&message, timeout, name, max = static_cast<std::int64_t>(max_timeout.count())] {
|
|
733
|
+
message =
|
|
734
|
+
rb_sprintf("%s must be between 0 and %" PRId64 " milliseconds, but given %+" PRIsVALUE,
|
|
735
|
+
name,
|
|
736
|
+
max,
|
|
737
|
+
timeout);
|
|
738
|
+
});
|
|
739
|
+
throw ruby_exception(exc_invalid_argument(), message);
|
|
740
|
+
}
|
|
741
|
+
return std::chrono::milliseconds{ static_cast<std::int64_t>(timeout_ms) };
|
|
742
|
+
}
|
|
743
|
+
|
|
681
744
|
} // namespace couchbase::ruby
|