couchbase 4.2.8-dev.1 → 4.2.9
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.
- package/CMakeLists.txt +1 -1
- package/deps/couchbase-cxx-cache/mozilla-ca-bundle.crt +139 -56
- package/deps/couchbase-cxx-cache/mozilla-ca-bundle.sha256 +1 -1
- package/deps/couchbase-cxx-client/CMakeLists.txt +397 -424
- package/deps/couchbase-cxx-client/core/agent_config.hxx +1 -1
- package/deps/couchbase-cxx-client/core/agent_group.cxx +0 -1
- package/deps/couchbase-cxx-client/core/agent_group.hxx +9 -0
- package/deps/couchbase-cxx-client/core/agent_group_config.hxx +1 -1
- package/deps/couchbase-cxx-client/core/bucket.cxx +22 -8
- package/deps/couchbase-cxx-client/core/bucket.hxx +3 -1
- package/deps/couchbase-cxx-client/core/cluster.cxx +1453 -108
- package/deps/couchbase-cxx-client/core/cluster.hxx +183 -473
- package/deps/couchbase-cxx-client/core/cluster_agent_config.hxx +1 -1
- package/deps/couchbase-cxx-client/core/cluster_options.cxx +12 -2
- package/deps/couchbase-cxx-client/core/cluster_options.hxx +9 -8
- package/deps/couchbase-cxx-client/core/config_profiles.cxx +2 -2
- package/deps/couchbase-cxx-client/core/config_profiles.hxx +1 -1
- package/deps/couchbase-cxx-client/core/core_sdk_shim.cxx +1 -2
- package/deps/couchbase-cxx-client/core/core_sdk_shim.hxx +3 -2
- package/deps/couchbase-cxx-client/core/diagnostics.hxx +0 -1
- package/deps/couchbase-cxx-client/core/dispatcher.cxx +2 -2
- package/deps/couchbase-cxx-client/core/impl/analytics.cxx +38 -76
- package/deps/couchbase-cxx-client/core/impl/analytics.hxx +40 -0
- package/deps/couchbase-cxx-client/core/impl/analytics_index_manager.cxx +820 -0
- package/deps/couchbase-cxx-client/core/impl/binary_collection.cxx +403 -0
- package/deps/couchbase-cxx-client/core/impl/bucket.cxx +78 -0
- package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +433 -0
- package/deps/couchbase-cxx-client/core/impl/cluster.cxx +226 -44
- package/deps/couchbase-cxx-client/core/impl/collection.cxx +1384 -0
- package/deps/couchbase-cxx-client/core/impl/collection_manager.cxx +306 -0
- package/deps/couchbase-cxx-client/core/impl/configuration_profiles_registry.cxx +3 -1
- package/deps/couchbase-cxx-client/core/impl/dns_srv_tracker.cxx +2 -0
- package/deps/couchbase-cxx-client/core/{operations/mcbp_noop.cxx → impl/doc_id_query.cxx} +19 -15
- package/deps/couchbase-cxx-client/core/impl/key_value_error_category.cxx +4 -2
- package/deps/couchbase-cxx-client/core/impl/lookup_in_all_replicas.hxx +0 -10
- package/deps/couchbase-cxx-client/core/impl/lookup_in_any_replica.hxx +0 -10
- package/deps/couchbase-cxx-client/core/impl/observe_poll.cxx +24 -17
- package/deps/couchbase-cxx-client/core/impl/observe_poll.hxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/query.cxx +45 -68
- package/deps/couchbase-cxx-client/core/impl/query.hxx +34 -0
- package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +628 -0
- package/deps/couchbase-cxx-client/core/impl/scope.cxx +172 -0
- package/deps/couchbase-cxx-client/core/impl/search.cxx +12 -61
- package/deps/couchbase-cxx-client/core/impl/search.hxx +37 -0
- package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +469 -0
- package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +12 -0
- package/deps/couchbase-cxx-client/core/impl/search_sort_geo_distance.cxx +87 -0
- package/deps/couchbase-cxx-client/core/impl/with_legacy_durability.hxx +23 -25
- package/deps/couchbase-cxx-client/core/io/dns_config.cxx +28 -0
- package/deps/couchbase-cxx-client/core/io/dns_config.hxx +6 -25
- package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +9 -1
- package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +1 -1
- package/deps/couchbase-cxx-client/core/io/mcbp_message.hxx +3 -2
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +51 -21
- package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +2 -1
- package/deps/couchbase-cxx-client/core/logger/logger.hxx +4 -4
- package/deps/couchbase-cxx-client/core/management/bucket_settings.hxx +1 -1
- package/deps/couchbase-cxx-client/core/mcbp/packet.cxx +1 -1
- package/deps/couchbase-cxx-client/core/mcbp/queue_callback.hxx +1 -1
- package/deps/couchbase-cxx-client/core/meta/features.hxx +28 -0
- package/deps/couchbase-cxx-client/core/operations/document_query.cxx +17 -1
- package/deps/couchbase-cxx-client/core/operations/document_query.hxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_create.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataset_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_create.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_dataverse_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_get_pending_mutations.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_index_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_connect.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_disconnect.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/analytics_link_get_all.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_create.cxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/bucket_get.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/change_password.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/management/collection_create.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/collection_update.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/error_utils.cxx +6 -5
- package/deps/couchbase-cxx-client/core/operations/management/eventing_deploy_function.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_drop_function.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_get_function.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_pause_function.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_resume_function.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_undeploy_function.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/eventing_upsert_function.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_get.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/group_get_all.cxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/management/query_index_build_deferred.hxx +2 -2
- package/deps/couchbase-cxx-client/core/operations/management/query_index_create.cxx +4 -1
- package/deps/couchbase-cxx-client/core/operations/management/query_index_drop.cxx +4 -1
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.cxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/management/query_index_get_all.hxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/management/scope_create.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.cxx +4 -4
- package/deps/couchbase-cxx-client/core/operations/management/search_get_stats.hxx +4 -4
- package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.cxx +1 -1
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_get_stats.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.cxx +2 -0
- package/deps/couchbase-cxx-client/core/operations.hxx +0 -1
- package/deps/couchbase-cxx-client/core/operations_fwd.hxx +260 -0
- package/deps/couchbase-cxx-client/core/origin.cxx +146 -5
- package/deps/couchbase-cxx-client/core/origin.hxx +30 -140
- package/deps/couchbase-cxx-client/core/protocol/cmd_cluster_map_change_notification.hxx +3 -3
- package/deps/couchbase-cxx-client/core/protocol/cmd_hello.hxx +5 -0
- package/deps/couchbase-cxx-client/core/protocol/cmd_observe_seqno.hxx +4 -4
- package/deps/couchbase-cxx-client/core/protocol/hello_feature.hxx +6 -0
- package/deps/couchbase-cxx-client/core/protocol/hello_feature_fmt.hxx +3 -0
- package/deps/couchbase-cxx-client/core/protocol/status.cxx +6 -0
- package/deps/couchbase-cxx-client/core/protocol/status.hxx +1 -0
- package/deps/couchbase-cxx-client/core/query_context.hxx +11 -7
- package/deps/couchbase-cxx-client/core/range_scan_orchestrator.cxx +1 -1
- package/deps/couchbase-cxx-client/core/topology/configuration.cxx +23 -0
- package/deps/couchbase-cxx-client/core/topology/configuration.hxx +8 -12
- package/deps/couchbase-cxx-client/core/topology/configuration_fmt.hxx +3 -3
- package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +2 -0
- package/deps/couchbase-cxx-client/core/topology/error_map.hxx +2 -2
- package/deps/couchbase-cxx-client/core/topology/error_map_json.hxx +4 -0
- package/deps/couchbase-cxx-client/core/transactions/active_transaction_record.cxx +58 -0
- package/deps/couchbase-cxx-client/core/transactions/active_transaction_record.hxx +5 -40
- package/deps/couchbase-cxx-client/core/transactions/async_attempt_context.cxx +30 -0
- package/deps/couchbase-cxx-client/core/transactions/atr_cleanup_entry.cxx +18 -18
- package/deps/couchbase-cxx-client/core/transactions/attempt_context.cxx +36 -0
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +39 -41
- package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +2 -2
- package/deps/couchbase-cxx-client/core/transactions/internal/atr_cleanup_entry.hxx +3 -1
- package/deps/couchbase-cxx-client/core/transactions/internal/atr_entry.hxx +2 -0
- package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.cxx +32 -0
- package/deps/couchbase-cxx-client/core/transactions/internal/doc_record.hxx +4 -30
- package/deps/couchbase-cxx-client/core/transactions/internal/doc_record_fmt.hxx +41 -0
- package/deps/couchbase-cxx-client/core/transactions/internal/logging.hxx +17 -15
- package/deps/couchbase-cxx-client/core/transactions/internal/transaction_context.hxx +1 -1
- package/deps/couchbase-cxx-client/core/transactions/internal/transactions_cleanup.hxx +4 -4
- package/deps/couchbase-cxx-client/core/transactions/internal/utils.hxx +1 -13
- package/deps/couchbase-cxx-client/core/transactions/result.hxx +0 -26
- package/deps/couchbase-cxx-client/core/transactions/result_fmt.hxx +46 -0
- package/deps/couchbase-cxx-client/core/transactions/staged_mutation.cxx +16 -14
- package/deps/couchbase-cxx-client/core/transactions/transaction_context.cxx +6 -6
- package/deps/couchbase-cxx-client/core/transactions/transaction_keyspace.cxx +48 -0
- package/deps/couchbase-cxx-client/core/transactions/transaction_links.hxx +1 -0
- package/deps/couchbase-cxx-client/core/transactions/transaction_options.cxx +61 -4
- package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +9 -8
- package/deps/couchbase-cxx-client/core/transactions/transactions_cleanup.cxx +9 -16
- package/deps/couchbase-cxx-client/core/transactions/transactions_config.cxx +7 -6
- package/deps/couchbase-cxx-client/core/transactions.hxx +6 -5
- package/deps/couchbase-cxx-client/core/utils/join_strings.hxx +4 -3
- package/deps/couchbase-cxx-client/core/utils/keyspace.hxx +4 -4
- package/deps/couchbase-cxx-client/couchbase/allow_querying_search_index_options.hxx +44 -0
- package/deps/couchbase-cxx-client/couchbase/analytics_index_manager.hxx +463 -0
- package/deps/couchbase-cxx-client/couchbase/analyze_document_options.hxx +44 -0
- package/deps/couchbase-cxx-client/couchbase/append_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/behavior_options.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/binary_collection.hxx +19 -115
- package/deps/couchbase-cxx-client/couchbase/bucket.hxx +13 -30
- package/deps/couchbase-cxx-client/couchbase/bucket_manager.hxx +8 -7
- package/deps/couchbase-cxx-client/couchbase/build_query_index_options.hxx +0 -1
- package/deps/couchbase-cxx-client/couchbase/cluster.hxx +41 -73
- package/deps/couchbase-cxx-client/couchbase/cluster_options.hxx +1 -27
- package/deps/couchbase-cxx-client/couchbase/collection.hxx +176 -386
- package/deps/couchbase-cxx-client/couchbase/collection_manager.hxx +8 -9
- package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +21 -24
- package/deps/couchbase-cxx-client/couchbase/connect_link_analytics_options.hxx +116 -0
- package/deps/couchbase-cxx-client/couchbase/create_bucket_options.hxx +3 -3
- package/deps/couchbase-cxx-client/couchbase/create_collection_options.hxx +3 -2
- package/deps/couchbase-cxx-client/couchbase/create_dataset_analytics_options.hxx +120 -0
- package/deps/couchbase-cxx-client/couchbase/create_dataverse_analytics_options.hxx +85 -0
- package/deps/couchbase-cxx-client/couchbase/create_index_analytics_options.hxx +103 -0
- package/deps/couchbase-cxx-client/couchbase/create_link_analytics_options.hxx +63 -0
- package/deps/couchbase-cxx-client/couchbase/decrement_options.hxx +0 -23
- package/deps/couchbase-cxx-client/couchbase/disallow_querying_search_index_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/disconnect_link_analytics_options.hxx +105 -0
- package/deps/couchbase-cxx-client/couchbase/drop_dataset_analytics_options.hxx +103 -0
- package/deps/couchbase-cxx-client/couchbase/drop_dataverse_analytics_options.hxx +84 -0
- package/deps/couchbase-cxx-client/couchbase/drop_index_analytics_options.hxx +103 -0
- package/deps/couchbase-cxx-client/couchbase/drop_link_analytics_options.hxx +63 -0
- package/deps/couchbase-cxx-client/couchbase/drop_search_index_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/error_codes.hxx +22 -1
- package/deps/couchbase-cxx-client/couchbase/exists_options.hxx +0 -23
- package/deps/couchbase-cxx-client/couchbase/fmt/key_value_error_map_attribute.hxx +6 -0
- package/deps/couchbase-cxx-client/couchbase/fmt/key_value_status_code.hxx +3 -0
- package/deps/couchbase-cxx-client/couchbase/fmt/transaction_keyspace.hxx +37 -0
- package/deps/couchbase-cxx-client/couchbase/freeze_plan_search_index_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_datasets_analytics_options.hxx +66 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_indexes_analytics_options.hxx +65 -0
- package/deps/couchbase-cxx-client/couchbase/get_all_query_indexes_options.hxx +1 -4
- package/deps/couchbase-cxx-client/couchbase/get_all_replicas_options.hxx +0 -23
- package/deps/couchbase-cxx-client/couchbase/get_all_search_indexes_options.hxx +45 -0
- package/deps/couchbase-cxx-client/couchbase/get_and_lock_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/get_and_touch_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/get_any_replica_options.hxx +0 -23
- package/deps/couchbase-cxx-client/couchbase/get_indexed_search_index_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/get_links_analytics_options.hxx +121 -0
- package/deps/couchbase-cxx-client/couchbase/get_options.hxx +0 -23
- package/deps/couchbase-cxx-client/couchbase/get_pending_mutations_analytics_options.hxx +67 -0
- package/deps/couchbase-cxx-client/couchbase/get_search_index_options.hxx +44 -0
- package/deps/couchbase-cxx-client/couchbase/increment_options.hxx +0 -23
- package/deps/couchbase-cxx-client/couchbase/insert_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/key_value_error_map_attribute.hxx +12 -0
- package/deps/couchbase-cxx-client/couchbase/key_value_status_code.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/lookup_in_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/management/analytics_dataset.hxx +48 -0
- package/deps/couchbase-cxx-client/couchbase/management/analytics_index.hxx +48 -0
- package/deps/couchbase-cxx-client/couchbase/management/analytics_link.hxx +239 -0
- package/deps/couchbase-cxx-client/couchbase/management/query_index.hxx +3 -3
- package/deps/couchbase-cxx-client/couchbase/management/search_index.hxx +40 -0
- package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +0 -1
- package/deps/couchbase-cxx-client/couchbase/mutate_in_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/network_options.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/pause_ingest_search_index_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +19 -0
- package/deps/couchbase-cxx-client/couchbase/prepend_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +99 -20
- package/deps/couchbase-cxx-client/couchbase/query_options.hxx +0 -21
- package/deps/couchbase-cxx-client/couchbase/remove_options.hxx +0 -23
- package/deps/couchbase-cxx-client/couchbase/replace_link_analytics_options.hxx +63 -0
- package/deps/couchbase-cxx-client/couchbase/replace_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/resume_ingest_search_index_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/scope.hxx +13 -45
- package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +1 -7
- package/deps/couchbase-cxx-client/couchbase/search_geo_distance_units.hxx +26 -0
- package/deps/couchbase-cxx-client/couchbase/search_index_manager.hxx +292 -0
- package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +10 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort_geo_distance.hxx +84 -0
- package/deps/couchbase-cxx-client/couchbase/security_options.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/touch_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/tracing/request_tracer.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/transactions/async_attempt_context.hxx +10 -7
- package/deps/couchbase-cxx-client/couchbase/transactions/attempt_context.hxx +10 -10
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_keyspace.hxx +8 -58
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +28 -70
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +7 -2
- package/deps/couchbase-cxx-client/couchbase/transactions/transactions_cleanup_config.hxx +2 -1
- package/deps/couchbase-cxx-client/couchbase/transactions/transactions_config.hxx +11 -38
- package/deps/couchbase-cxx-client/couchbase/unfreeze_plan_search_index_options.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/unlock_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/upsert_options.hxx +0 -24
- package/deps/couchbase-cxx-client/couchbase/upsert_search_index_options.hxx +41 -0
- package/dist/binding.d.ts +7 -9
- package/dist/bindingutilities.js +2 -0
- package/dist/collection.js +3 -3
- package/dist/errors.d.ts +9 -0
- package/dist/errors.js +14 -2
- package/dist/transactions.d.ts +2 -0
- package/dist/transactions.js +2 -3
- package/dist/usermanager.js +1 -1
- package/package.json +7 -7
- package/src/binding.cpp +1 -0
- package/src/connection.cpp +12 -9
- package/src/connection.hpp +3 -3
- package/src/connection_autogen.cpp +7 -5
- package/src/constants.cpp +3 -0
- package/src/instance.cpp +2 -2
- package/src/instance.hpp +1 -1
- package/src/jstocbpp_autogen.hpp +21 -38
- package/src/jstocbpp_basic.hpp +2 -0
- package/src/jstocbpp_errors.hpp +1 -0
- package/src/jstocbpp_transactions.hpp +6 -22
- package/src/mutationtoken.hpp +1 -0
- package/tools/gen-bindings-json.py +39 -16
- package/deps/couchbase-cxx-cache/spdlog/66ab2619a0014319471759c03e2de1af6bda14de/spdlog/example/CMakeLists.txt +0 -23
- package/deps/couchbase-cxx-cache/spdlog/66ab2619a0014319471759c03e2de1af6bda14de/spdlog/example/example.cpp +0 -398
- package/deps/couchbase-cxx-client/core/impl/append.cxx +0 -87
- package/deps/couchbase-cxx-client/core/impl/build_deferred_query_indexes.cxx +0 -157
- package/deps/couchbase-cxx-client/core/impl/create_bucket.cxx +0 -158
- package/deps/couchbase-cxx-client/core/impl/create_collection.cxx +0 -83
- package/deps/couchbase-cxx-client/core/impl/create_query_index.cxx +0 -232
- package/deps/couchbase-cxx-client/core/impl/create_scope.cxx +0 -69
- package/deps/couchbase-cxx-client/core/impl/decrement.cxx +0 -96
- package/deps/couchbase-cxx-client/core/impl/drop_bucket.cxx +0 -66
- package/deps/couchbase-cxx-client/core/impl/drop_collection.cxx +0 -76
- package/deps/couchbase-cxx-client/core/impl/drop_query_index.cxx +0 -187
- package/deps/couchbase-cxx-client/core/impl/drop_scope.cxx +0 -68
- package/deps/couchbase-cxx-client/core/impl/exists.cxx +0 -47
- package/deps/couchbase-cxx-client/core/impl/flush_bucket.cxx +0 -66
- package/deps/couchbase-cxx-client/core/impl/get.cxx +0 -68
- package/deps/couchbase-cxx-client/core/impl/get_all_buckets.cxx +0 -178
- package/deps/couchbase-cxx-client/core/impl/get_all_query_indexes.cxx +0 -106
- package/deps/couchbase-cxx-client/core/impl/get_all_replicas.cxx +0 -145
- package/deps/couchbase-cxx-client/core/impl/get_all_scopes.cxx +0 -94
- package/deps/couchbase-cxx-client/core/impl/get_and_lock.cxx +0 -49
- package/deps/couchbase-cxx-client/core/impl/get_and_touch.cxx +0 -49
- package/deps/couchbase-cxx-client/core/impl/get_any_replica.cxx +0 -134
- package/deps/couchbase-cxx-client/core/impl/get_bucket.cxx +0 -168
- package/deps/couchbase-cxx-client/core/impl/increment.cxx +0 -96
- package/deps/couchbase-cxx-client/core/impl/insert.cxx +0 -90
- package/deps/couchbase-cxx-client/core/impl/lookup_in.cxx +0 -69
- package/deps/couchbase-cxx-client/core/impl/lookup_in_all_replicas.cxx +0 -178
- package/deps/couchbase-cxx-client/core/impl/lookup_in_any_replica.cxx +0 -169
- package/deps/couchbase-cxx-client/core/impl/mutate_in.cxx +0 -125
- package/deps/couchbase-cxx-client/core/impl/prepend.cxx +0 -87
- package/deps/couchbase-cxx-client/core/impl/remove.cxx +0 -86
- package/deps/couchbase-cxx-client/core/impl/replace.cxx +0 -102
- package/deps/couchbase-cxx-client/core/impl/touch.cxx +0 -49
- package/deps/couchbase-cxx-client/core/impl/unlock.cxx +0 -47
- package/deps/couchbase-cxx-client/core/impl/update_bucket.cxx +0 -133
- package/deps/couchbase-cxx-client/core/impl/update_collection.cxx +0 -83
- package/deps/couchbase-cxx-client/core/impl/upsert.cxx +0 -100
- package/deps/couchbase-cxx-client/core/impl/watch_query_indexes.cxx +0 -196
- package/deps/couchbase-cxx-client/core/operations/mcbp_noop.hxx +0 -49
- /package/deps/couchbase-cxx-client/core/impl/{streaming_json_lexter_error_category.cxx → streaming_json_lexer_error_category.cxx} +0 -0
|
@@ -15,12 +15,14 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
#include "staged_mutation.hxx"
|
|
18
|
+
|
|
18
19
|
#include "attempt_context_impl.hxx"
|
|
19
20
|
#include "core/cluster.hxx"
|
|
20
21
|
|
|
21
22
|
#include "internal/transaction_fields.hxx"
|
|
22
23
|
#include "internal/utils.hxx"
|
|
23
24
|
#include "result.hxx"
|
|
25
|
+
#include "result_fmt.hxx"
|
|
24
26
|
|
|
25
27
|
#include <asio/bind_executor.hpp>
|
|
26
28
|
#include <asio/post.hpp>
|
|
@@ -124,16 +126,16 @@ staged_mutation_queue::extract_to(const std::string& prefix, core::operations::m
|
|
|
124
126
|
void
|
|
125
127
|
staged_mutation_queue::remove_any(const core::document_id& id)
|
|
126
128
|
{
|
|
127
|
-
std::lock_guard<std::mutex> lock(mutex_);
|
|
129
|
+
const std::lock_guard<std::mutex> lock(mutex_);
|
|
128
130
|
auto new_end =
|
|
129
|
-
std::remove_if(queue_.begin(), queue_.end(), [id](const staged_mutation& item) { return document_ids_equal(item.id(), id); });
|
|
131
|
+
std::remove_if(queue_.begin(), queue_.end(), [&id](const staged_mutation& item) { return document_ids_equal(item.id(), id); });
|
|
130
132
|
queue_.erase(new_end, queue_.end());
|
|
131
133
|
}
|
|
132
134
|
|
|
133
135
|
staged_mutation*
|
|
134
136
|
staged_mutation_queue::find_any(const core::document_id& id)
|
|
135
137
|
{
|
|
136
|
-
std::lock_guard<std::mutex> lock(mutex_);
|
|
138
|
+
const std::lock_guard<std::mutex> lock(mutex_);
|
|
137
139
|
for (auto& item : queue_) {
|
|
138
140
|
if (document_ids_equal(item.doc().id(), id)) {
|
|
139
141
|
return &item;
|
|
@@ -209,7 +211,7 @@ staged_mutation_queue::commit(attempt_context_impl* ctx)
|
|
|
209
211
|
auto future = barrier->get_future();
|
|
210
212
|
|
|
211
213
|
try {
|
|
212
|
-
auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref()
|
|
214
|
+
auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref().io_context());
|
|
213
215
|
async_constant_delay delay(timer);
|
|
214
216
|
|
|
215
217
|
switch (item.type()) {
|
|
@@ -292,7 +294,7 @@ staged_mutation_queue::rollback(attempt_context_impl* ctx)
|
|
|
292
294
|
auto future = barrier->get_future();
|
|
293
295
|
|
|
294
296
|
try {
|
|
295
|
-
auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref()
|
|
297
|
+
auto timer = std::make_shared<asio::steady_timer>(ctx->cluster_ref().io_context());
|
|
296
298
|
async_exp_delay delay(timer);
|
|
297
299
|
|
|
298
300
|
switch (item.type()) {
|
|
@@ -360,7 +362,7 @@ staged_mutation_queue::rollback_insert(attempt_context_impl* ctx,
|
|
|
360
362
|
{
|
|
361
363
|
CB_ATTEMPT_CTX_LOG_TRACE(ctx, "rolling back staged insert for {} with cas {}", item.doc().id(), item.doc().cas().value());
|
|
362
364
|
|
|
363
|
-
asio::post(asio::bind_executor(ctx->cluster_ref()
|
|
365
|
+
asio::post(asio::bind_executor(ctx->cluster_ref().io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
|
|
364
366
|
try {
|
|
365
367
|
auto ec = ctx->error_if_expired_and_not_in_overtime(STAGE_DELETE_INSERTED, item.doc().id().key());
|
|
366
368
|
if (ec) {
|
|
@@ -379,7 +381,7 @@ staged_mutation_queue::rollback_insert(attempt_context_impl* ctx,
|
|
|
379
381
|
req.access_deleted = true;
|
|
380
382
|
req.cas = item.doc().cas();
|
|
381
383
|
wrap_durable_request(req, ctx->overall().config());
|
|
382
|
-
return ctx->cluster_ref()
|
|
384
|
+
return ctx->cluster_ref().execute(
|
|
383
385
|
req, [this, callback = std::move(callback), ctx, &item, delay](const core::operations::mutate_in_response& resp) mutable {
|
|
384
386
|
CB_ATTEMPT_CTX_LOG_TRACE(ctx, "mutate_in for {} with cas {}", item.doc().id(), item.doc().cas().value());
|
|
385
387
|
|
|
@@ -407,7 +409,7 @@ staged_mutation_queue::rollback_remove_or_replace(attempt_context_impl* ctx,
|
|
|
407
409
|
{
|
|
408
410
|
CB_ATTEMPT_CTX_LOG_TRACE(ctx, "rolling back staged remove/replace for {} with cas {}", item.doc().id(), item.doc().cas().value());
|
|
409
411
|
|
|
410
|
-
asio::post(asio::bind_executor(ctx->cluster_ref()
|
|
412
|
+
asio::post(asio::bind_executor(ctx->cluster_ref().io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
|
|
411
413
|
try {
|
|
412
414
|
auto ec = ctx->error_if_expired_and_not_in_overtime(STAGE_ROLLBACK_DOC, item.doc().id().key());
|
|
413
415
|
if (ec) {
|
|
@@ -425,7 +427,7 @@ staged_mutation_queue::rollback_remove_or_replace(attempt_context_impl* ctx,
|
|
|
425
427
|
.specs();
|
|
426
428
|
req.cas = item.doc().cas();
|
|
427
429
|
wrap_durable_request(req, ctx->overall().config());
|
|
428
|
-
return ctx->cluster_ref()
|
|
430
|
+
return ctx->cluster_ref().execute(
|
|
429
431
|
req, [this, callback = std::move(callback), ctx, &item, delay](const core::operations::mutate_in_response& resp) mutable {
|
|
430
432
|
auto res = result::create_from_subdoc_response(resp);
|
|
431
433
|
try {
|
|
@@ -455,7 +457,7 @@ staged_mutation_queue::commit_doc(attempt_context_impl* ctx,
|
|
|
455
457
|
ctx, "commit doc {}, cas_zero_mode {}, ambiguity_resolution_mode {}", item.doc().id(), cas_zero_mode, ambiguity_resolution_mode);
|
|
456
458
|
|
|
457
459
|
asio::post(asio::bind_executor(
|
|
458
|
-
ctx->cluster_ref()
|
|
460
|
+
ctx->cluster_ref().io_context(),
|
|
459
461
|
[this, callback = std::move(callback), ctx, &item, delay, cas_zero_mode, ambiguity_resolution_mode]() mutable {
|
|
460
462
|
try {
|
|
461
463
|
ctx->check_expiry_during_commit_or_rollback(STAGE_COMMIT_DOC, std::optional<const std::string>(item.doc().id().key()));
|
|
@@ -472,7 +474,7 @@ staged_mutation_queue::commit_doc(attempt_context_impl* ctx,
|
|
|
472
474
|
core::operations::insert_request req{ item.doc().id(), item.content() };
|
|
473
475
|
req.flags = couchbase::codec::codec_flags::json_common_flags;
|
|
474
476
|
wrap_durable_request(req, ctx->overall().config());
|
|
475
|
-
return ctx->cluster_ref()
|
|
477
|
+
return ctx->cluster_ref().execute(
|
|
476
478
|
req,
|
|
477
479
|
[this, callback = std::move(callback), ctx, &item, delay, ambiguity_resolution_mode, cas_zero_mode](
|
|
478
480
|
const core::operations::insert_response& resp) mutable {
|
|
@@ -498,7 +500,7 @@ staged_mutation_queue::commit_doc(attempt_context_impl* ctx,
|
|
|
498
500
|
req.store_semantics = couchbase::store_semantics::replace;
|
|
499
501
|
req.cas = couchbase::cas(cas_zero_mode ? 0 : item.doc().cas().value());
|
|
500
502
|
wrap_durable_request(req, ctx->overall().config());
|
|
501
|
-
return ctx->cluster_ref()
|
|
503
|
+
return ctx->cluster_ref().execute(
|
|
502
504
|
req,
|
|
503
505
|
[this, callback = std::move(callback), ctx, &item, delay, ambiguity_resolution_mode, cas_zero_mode](
|
|
504
506
|
const core::operations::mutate_in_response resp) mutable {
|
|
@@ -527,7 +529,7 @@ staged_mutation_queue::remove_doc(attempt_context_impl* ctx,
|
|
|
527
529
|
{
|
|
528
530
|
CB_ATTEMPT_CTX_LOG_TRACE(ctx, "remove doc {}", item.doc().id());
|
|
529
531
|
|
|
530
|
-
asio::post(asio::bind_executor(ctx->cluster_ref()
|
|
532
|
+
asio::post(asio::bind_executor(ctx->cluster_ref().io_context(), [this, callback = std::move(callback), ctx, &item, delay]() mutable {
|
|
531
533
|
try {
|
|
532
534
|
ctx->check_expiry_during_commit_or_rollback(STAGE_REMOVE_DOC, std::optional<const std::string>(item.doc().id().key()));
|
|
533
535
|
auto ec = ctx->hooks_.before_doc_removed(ctx, item.doc().id().key());
|
|
@@ -536,7 +538,7 @@ staged_mutation_queue::remove_doc(attempt_context_impl* ctx,
|
|
|
536
538
|
}
|
|
537
539
|
core::operations::remove_request req{ item.doc().id() };
|
|
538
540
|
wrap_durable_request(req, ctx->overall().config());
|
|
539
|
-
return ctx->cluster_ref()
|
|
541
|
+
return ctx->cluster_ref().execute(
|
|
540
542
|
req, [this, callback = std::move(callback), ctx, &item, delay](core::operations::remove_response resp) mutable {
|
|
541
543
|
auto res = result::create_from_mutation_response(resp);
|
|
542
544
|
try {
|
|
@@ -32,7 +32,7 @@ transaction_context::transaction_context(transactions& txns, const couchbase::tr
|
|
|
32
32
|
, config_(config.apply(txns.config()))
|
|
33
33
|
, deferred_elapsed_(0)
|
|
34
34
|
, cleanup_(txns.cleanup())
|
|
35
|
-
, delay_(new exp_delay(std::chrono::milliseconds(1), std::chrono::milliseconds(100), 2 * config_.
|
|
35
|
+
, delay_(new exp_delay(std::chrono::milliseconds(1), std::chrono::milliseconds(100), 2 * config_.timeout))
|
|
36
36
|
{
|
|
37
37
|
// add metadata_collection to cleanup, if present
|
|
38
38
|
if (config_.metadata_collection) {
|
|
@@ -54,7 +54,7 @@ transaction_context::remaining() const
|
|
|
54
54
|
{
|
|
55
55
|
const auto& now = std::chrono::steady_clock::now();
|
|
56
56
|
auto expired_nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now - start_time_client_) + deferred_elapsed_;
|
|
57
|
-
return config_.
|
|
57
|
+
return config_.timeout - expired_nanos;
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
[[nodiscard]] bool
|
|
@@ -64,7 +64,7 @@ transaction_context::has_expired_client_side()
|
|
|
64
64
|
const auto& now = std::chrono::steady_clock::now();
|
|
65
65
|
auto expired_nanos = std::chrono::duration_cast<std::chrono::nanoseconds>(now - start_time_client_) + deferred_elapsed_;
|
|
66
66
|
auto expired_millis = std::chrono::duration_cast<std::chrono::milliseconds>(expired_nanos);
|
|
67
|
-
bool is_expired = expired_nanos > config_.
|
|
67
|
+
bool is_expired = expired_nanos > config_.timeout;
|
|
68
68
|
if (is_expired) {
|
|
69
69
|
CB_ATTEMPT_CTX_LOG_INFO(current_attempt_context_,
|
|
70
70
|
"has expired client side (now={}ns, start={}ns, deferred_elapsed={}ns, expired={}ns ({}ms), config={}ms)",
|
|
@@ -73,7 +73,7 @@ transaction_context::has_expired_client_side()
|
|
|
73
73
|
deferred_elapsed_.count(),
|
|
74
74
|
expired_nanos.count(),
|
|
75
75
|
expired_millis.count(),
|
|
76
|
-
std::chrono::duration_cast<std::chrono::milliseconds>(config_.
|
|
76
|
+
std::chrono::duration_cast<std::chrono::milliseconds>(config_.timeout).count());
|
|
77
77
|
}
|
|
78
78
|
return is_expired;
|
|
79
79
|
}
|
|
@@ -81,7 +81,7 @@ transaction_context::has_expired_client_side()
|
|
|
81
81
|
void
|
|
82
82
|
transaction_context::after_delay(std::chrono::milliseconds delay, std::function<void()> fn)
|
|
83
83
|
{
|
|
84
|
-
auto timer = std::make_shared<asio::steady_timer>(this->transactions_.cluster_ref()
|
|
84
|
+
auto timer = std::make_shared<asio::steady_timer>(this->transactions_.cluster_ref().io_context());
|
|
85
85
|
timer->expires_after(delay);
|
|
86
86
|
timer->async_wait([timer, fn](std::error_code) {
|
|
87
87
|
// have to always call the function, even if timer was canceled.
|
|
@@ -92,7 +92,7 @@ transaction_context::after_delay(std::chrono::milliseconds delay, std::function<
|
|
|
92
92
|
void
|
|
93
93
|
transaction_context::new_attempt_context(async_attempt_context::VoidCallback&& cb)
|
|
94
94
|
{
|
|
95
|
-
asio::post(transactions_.cluster_ref()
|
|
95
|
+
asio::post(transactions_.cluster_ref().io_context(), [this, cb = std::move(cb)]() {
|
|
96
96
|
// the first time we call the delay, it just records an end time. After that, it
|
|
97
97
|
// actually delays.
|
|
98
98
|
try {
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2021-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
|
+
#include <couchbase/transactions/transaction_keyspace.hxx>
|
|
19
|
+
|
|
20
|
+
#include <couchbase/collection.hxx>
|
|
21
|
+
#include <couchbase/scope.hxx>
|
|
22
|
+
|
|
23
|
+
namespace couchbase::transactions
|
|
24
|
+
{
|
|
25
|
+
transaction_keyspace::transaction_keyspace(std::string bucket_name, std::string scope_name, std::string collection_name)
|
|
26
|
+
: bucket(std::move(bucket_name))
|
|
27
|
+
, scope(std::move(scope_name))
|
|
28
|
+
, collection(std::move(collection_name))
|
|
29
|
+
{
|
|
30
|
+
if (scope.empty()) {
|
|
31
|
+
scope = couchbase::scope::default_name;
|
|
32
|
+
}
|
|
33
|
+
if (collection.empty()) {
|
|
34
|
+
collection = couchbase::collection::default_name;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
transaction_keyspace::transaction_keyspace(const std::string& bucket_name)
|
|
39
|
+
: transaction_keyspace{ bucket_name, couchbase::scope::default_name, couchbase::collection::default_name }
|
|
40
|
+
{
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
bool
|
|
44
|
+
transaction_keyspace::valid()
|
|
45
|
+
{
|
|
46
|
+
return !bucket.empty() && !scope.empty() && !collection.empty();
|
|
47
|
+
}
|
|
48
|
+
} // namespace couchbase::transactions
|
|
@@ -257,6 +257,7 @@ struct fmt::formatter<couchbase::core::transactions::transaction_links> {
|
|
|
257
257
|
r.atr_scope_name().value_or("none"),
|
|
258
258
|
r.atr_collection_name().value_or("none"),
|
|
259
259
|
r.atr_id().value_or("none"),
|
|
260
|
+
r.staged_transaction_id().value_or("none"),
|
|
260
261
|
r.staged_attempt_id().value_or("none"),
|
|
261
262
|
r.staged_operation_id().value_or("none"),
|
|
262
263
|
r.crc32_of_staging().value_or("none"));
|
|
@@ -13,9 +13,12 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
+
|
|
17
|
+
#include <couchbase/collection.hxx>
|
|
18
|
+
#include <couchbase/transactions/transaction_options.hxx>
|
|
19
|
+
|
|
16
20
|
#include <core/transactions/attempt_context_testing_hooks.hxx>
|
|
17
21
|
#include <core/transactions/cleanup_testing_hooks.hxx>
|
|
18
|
-
#include <couchbase/transactions/transaction_options.hxx>
|
|
19
22
|
|
|
20
23
|
namespace couchbase::transactions
|
|
21
24
|
{
|
|
@@ -27,12 +30,66 @@ transaction_options::apply(const transactions_config::built& conf) const
|
|
|
27
30
|
query_config.scan_consistency = *scan_consistency_;
|
|
28
31
|
}
|
|
29
32
|
return { durability_.value_or(conf.level),
|
|
30
|
-
|
|
31
|
-
kv_timeout_ ? kv_timeout_ : conf.kv_timeout,
|
|
33
|
+
timeout_.value_or(conf.timeout),
|
|
32
34
|
attempt_context_hooks_ ? attempt_context_hooks_ : conf.attempt_context_hooks,
|
|
33
35
|
cleanup_hooks_ ? cleanup_hooks_ : conf.cleanup_hooks,
|
|
34
36
|
metadata_collection_ ? metadata_collection_ : conf.metadata_collection,
|
|
35
37
|
query_config,
|
|
36
38
|
conf.cleanup_config };
|
|
37
39
|
}
|
|
38
|
-
|
|
40
|
+
|
|
41
|
+
transaction_options&
|
|
42
|
+
transaction_options::test_factories(std::shared_ptr<core::transactions::attempt_context_testing_hooks> hooks,
|
|
43
|
+
std::shared_ptr<core::transactions::cleanup_testing_hooks> cleanup_hooks)
|
|
44
|
+
{
|
|
45
|
+
attempt_context_hooks_ = hooks;
|
|
46
|
+
cleanup_hooks_ = cleanup_hooks;
|
|
47
|
+
return *this;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
std::optional<transaction_keyspace>
|
|
51
|
+
transaction_options::metadata_collection() const
|
|
52
|
+
{
|
|
53
|
+
return metadata_collection_;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
transaction_options&
|
|
57
|
+
transaction_options::durability_level(couchbase::durability_level level)
|
|
58
|
+
{
|
|
59
|
+
durability_ = level;
|
|
60
|
+
return *this;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
std::optional<couchbase::durability_level>
|
|
64
|
+
transaction_options::durability_level() const
|
|
65
|
+
{
|
|
66
|
+
return durability_;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
transaction_options&
|
|
70
|
+
transaction_options::scan_consistency(query_scan_consistency scan_consistency)
|
|
71
|
+
{
|
|
72
|
+
scan_consistency_ = scan_consistency;
|
|
73
|
+
return *this;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
std::optional<query_scan_consistency>
|
|
77
|
+
transaction_options::scan_consistency() const
|
|
78
|
+
{
|
|
79
|
+
return scan_consistency_;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
std::optional<std::chrono::nanoseconds>
|
|
83
|
+
transaction_options::timeout()
|
|
84
|
+
{
|
|
85
|
+
return timeout_;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
transaction_options&
|
|
89
|
+
transaction_options::metadata_collection(const couchbase::collection& coll)
|
|
90
|
+
{
|
|
91
|
+
metadata_collection_.emplace(coll.bucket_name(), coll.scope_name(), coll.name());
|
|
92
|
+
return *this;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
} // namespace couchbase::transactions
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
#include "attempt_context_impl.hxx"
|
|
18
18
|
|
|
19
19
|
#include "core/cluster.hxx"
|
|
20
|
-
|
|
20
|
+
#include "core/meta/version.hxx"
|
|
21
21
|
#include "core/transactions.hxx"
|
|
22
|
+
|
|
22
23
|
#include "internal/exceptions_internal.hxx"
|
|
23
24
|
#include "internal/logging.hxx"
|
|
24
25
|
#include "internal/transaction_context.hxx"
|
|
@@ -27,13 +28,13 @@
|
|
|
27
28
|
|
|
28
29
|
namespace couchbase::core::transactions
|
|
29
30
|
{
|
|
30
|
-
transactions::transactions(
|
|
31
|
-
: transactions(cluster, config.build())
|
|
31
|
+
transactions::transactions(core::cluster cluster, const couchbase::transactions::transactions_config& config)
|
|
32
|
+
: transactions(std::move(cluster), config.build())
|
|
32
33
|
{
|
|
33
34
|
}
|
|
34
35
|
|
|
35
|
-
transactions::transactions(
|
|
36
|
-
: cluster_(cluster)
|
|
36
|
+
transactions::transactions(core::cluster cluster, const couchbase::transactions::transactions_config::built& config)
|
|
37
|
+
: cluster_(std::move(cluster))
|
|
37
38
|
, config_(config)
|
|
38
39
|
, cleanup_(new transactions_cleanup(cluster_, config_))
|
|
39
40
|
{
|
|
@@ -48,7 +49,7 @@ transactions::transactions(std::shared_ptr<core::cluster> cluster, const couchba
|
|
|
48
49
|
auto barrier = std::make_shared<std::promise<std::error_code>>();
|
|
49
50
|
auto f = barrier->get_future();
|
|
50
51
|
std::atomic<bool> callback_called{ false };
|
|
51
|
-
cluster_
|
|
52
|
+
cluster_.open_bucket(config_.metadata_collection->bucket, [&callback_called, barrier](std::error_code ec) {
|
|
52
53
|
if (callback_called.load()) {
|
|
53
54
|
return;
|
|
54
55
|
}
|
|
@@ -59,7 +60,7 @@ transactions::transactions(std::shared_ptr<core::cluster> cluster, const couchba
|
|
|
59
60
|
if (err) {
|
|
60
61
|
auto err_msg =
|
|
61
62
|
fmt::format("error opening metadata_collection bucket '{}' specified in the config!", config_.metadata_collection->bucket);
|
|
62
|
-
CB_TXN_LOG_DEBUG(err_msg);
|
|
63
|
+
CB_TXN_LOG_DEBUG("{}", err_msg);
|
|
63
64
|
throw std::runtime_error(err_msg);
|
|
64
65
|
}
|
|
65
66
|
}
|
|
@@ -76,7 +77,7 @@ wrap_run(transactions& txns, const couchbase::transactions::transaction_options&
|
|
|
76
77
|
while (attempts++ < max_attempts) {
|
|
77
78
|
// NOTE: new_attempt_context has the exponential backoff built in. So, after
|
|
78
79
|
// the first time it is called, it has a 1ms delay, then 2ms, etc... capped at 100ms
|
|
79
|
-
// until (for now) a timeout is reached (2x the
|
|
80
|
+
// until (for now) a timeout is reached (2x the timeout). Soon, will build in
|
|
80
81
|
// a max attempts instead. In any case, the timeout occurs in the logic - adding
|
|
81
82
|
// a max attempts or timeout is just in case a bug prevents timeout, etc...
|
|
82
83
|
overall.new_attempt_context();
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
#include "internal/transactions_cleanup.hxx"
|
|
27
27
|
#include "internal/utils.hxx"
|
|
28
28
|
|
|
29
|
-
#include <
|
|
30
|
-
|
|
29
|
+
#include <couchbase/fmt/transaction_keyspace.hxx>
|
|
30
|
+
|
|
31
31
|
#include <functional>
|
|
32
32
|
|
|
33
33
|
namespace couchbase::core::transactions
|
|
@@ -41,9 +41,8 @@ transactions_cleanup_attempt::transactions_cleanup_attempt(const atr_cleanup_ent
|
|
|
41
41
|
{
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
transactions_cleanup::transactions_cleanup(
|
|
45
|
-
|
|
46
|
-
: cluster_(cluster)
|
|
44
|
+
transactions_cleanup::transactions_cleanup(core::cluster cluster, const couchbase::transactions::transactions_config::built& config)
|
|
45
|
+
: cluster_(std::move(cluster))
|
|
47
46
|
, config_(config)
|
|
48
47
|
, client_uuid_(uid_generator::next())
|
|
49
48
|
, running_(config.cleanup_config.cleanup_client_attempts || config.cleanup_config.cleanup_lost_attempts)
|
|
@@ -254,8 +253,7 @@ transactions_cleanup::create_client_record(const couchbase::transactions::transa
|
|
|
254
253
|
if (ec) {
|
|
255
254
|
throw client_error(*ec, "client_record_before_create hook raised error");
|
|
256
255
|
}
|
|
257
|
-
cluster_
|
|
258
|
-
req, [barrier](core::operations::mutate_in_response resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
|
|
256
|
+
cluster_.execute(req, [barrier](auto&& resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
|
|
259
257
|
wrap_operation_future(f);
|
|
260
258
|
|
|
261
259
|
} catch (const client_error& e) {
|
|
@@ -285,15 +283,13 @@ transactions_cleanup::get_active_clients(const couchbase::transactions::transact
|
|
|
285
283
|
lookup_in_specs::get(subdoc::lookup_in_macro::vbucket).xattr(),
|
|
286
284
|
}
|
|
287
285
|
.specs();
|
|
288
|
-
wrap_request(req, config_);
|
|
289
286
|
auto barrier = std::make_shared<std::promise<result>>();
|
|
290
287
|
auto f = barrier->get_future();
|
|
291
288
|
auto ec = config_.cleanup_hooks->client_record_before_get(keyspace.bucket);
|
|
292
289
|
if (ec) {
|
|
293
290
|
throw client_error(*ec, "client_record_before_get hook raised error");
|
|
294
291
|
}
|
|
295
|
-
cluster_
|
|
296
|
-
req, [barrier](core::operations::lookup_in_response resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
|
|
292
|
+
cluster_.execute(req, [barrier](auto&& resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
|
|
297
293
|
auto res = wrap_operation_future(f);
|
|
298
294
|
|
|
299
295
|
std::vector<std::string> active_client_uids;
|
|
@@ -375,9 +371,8 @@ transactions_cleanup::get_active_clients(const couchbase::transactions::transact
|
|
|
375
371
|
auto mutate_barrier = std::make_shared<std::promise<result>>();
|
|
376
372
|
auto mutate_f = mutate_barrier->get_future();
|
|
377
373
|
CB_LOST_ATTEMPT_CLEANUP_LOG_TRACE("updating record");
|
|
378
|
-
cluster_
|
|
379
|
-
|
|
380
|
-
});
|
|
374
|
+
cluster_.execute(mutate_req,
|
|
375
|
+
[mutate_barrier](auto&& resp) { mutate_barrier->set_value(result::create_from_subdoc_response(resp)); });
|
|
381
376
|
res = wrap_operation_future(mutate_f);
|
|
382
377
|
|
|
383
378
|
// just update the cas, and return the details
|
|
@@ -420,9 +415,7 @@ transactions_cleanup::remove_client_record_from_all_buckets(const std::string& u
|
|
|
420
415
|
wrap_durable_request(req, config_);
|
|
421
416
|
auto barrier = std::make_shared<std::promise<result>>();
|
|
422
417
|
auto f = barrier->get_future();
|
|
423
|
-
cluster_
|
|
424
|
-
barrier->set_value(result::create_from_subdoc_response(resp));
|
|
425
|
-
});
|
|
418
|
+
cluster_.execute(req, [barrier](auto&& resp) { barrier->set_value(result::create_from_subdoc_response(resp)); });
|
|
426
419
|
wrap_operation_future(f);
|
|
427
420
|
CB_LOST_ATTEMPT_CLEANUP_LOG_DEBUG("removed {} from {}", uuid, keyspace);
|
|
428
421
|
} catch (const client_error& e) {
|
|
@@ -26,7 +26,7 @@ namespace couchbase::transactions
|
|
|
26
26
|
|
|
27
27
|
transactions_config::transactions_config()
|
|
28
28
|
: level_(couchbase::durability_level::majority)
|
|
29
|
-
,
|
|
29
|
+
, timeout_(std::chrono::seconds(15))
|
|
30
30
|
, attempt_context_hooks_(new core::transactions::attempt_context_testing_hooks())
|
|
31
31
|
, cleanup_hooks_(new core::transactions::cleanup_testing_hooks())
|
|
32
32
|
{
|
|
@@ -36,7 +36,7 @@ transactions_config::~transactions_config() = default;
|
|
|
36
36
|
|
|
37
37
|
transactions_config::transactions_config(transactions_config&& c) noexcept
|
|
38
38
|
: level_(c.level_)
|
|
39
|
-
,
|
|
39
|
+
, timeout_(c.timeout_)
|
|
40
40
|
, attempt_context_hooks_(c.attempt_context_hooks_)
|
|
41
41
|
, cleanup_hooks_(c.cleanup_hooks_)
|
|
42
42
|
, metadata_collection_(std::move(c.metadata_collection_))
|
|
@@ -47,7 +47,7 @@ transactions_config::transactions_config(transactions_config&& c) noexcept
|
|
|
47
47
|
|
|
48
48
|
transactions_config::transactions_config(const transactions_config& config)
|
|
49
49
|
: level_(config.durability_level())
|
|
50
|
-
,
|
|
50
|
+
, timeout_(config.timeout())
|
|
51
51
|
, attempt_context_hooks_(std::make_shared<core::transactions::attempt_context_testing_hooks>(config.attempt_context_hooks()))
|
|
52
52
|
, cleanup_hooks_(std::make_shared<core::transactions::cleanup_testing_hooks>(config.cleanup_hooks()))
|
|
53
53
|
, metadata_collection_(config.metadata_collection())
|
|
@@ -61,7 +61,7 @@ transactions_config::operator=(const transactions_config& c)
|
|
|
61
61
|
{
|
|
62
62
|
if (this != &c) {
|
|
63
63
|
level_ = c.level_;
|
|
64
|
-
|
|
64
|
+
timeout_ = c.timeout_;
|
|
65
65
|
attempt_context_hooks_ = c.attempt_context_hooks_;
|
|
66
66
|
cleanup_hooks_ = c.cleanup_hooks_;
|
|
67
67
|
query_config_ = c.query_config_;
|
|
@@ -74,8 +74,9 @@ transactions_config::operator=(const transactions_config& c)
|
|
|
74
74
|
transactions_config::built
|
|
75
75
|
transactions_config::build() const
|
|
76
76
|
{
|
|
77
|
-
return {
|
|
78
|
-
|
|
77
|
+
return {
|
|
78
|
+
level_, timeout_, attempt_context_hooks_, cleanup_hooks_, metadata_collection_, query_config_.build(), cleanup_config_.build()
|
|
79
|
+
};
|
|
79
80
|
}
|
|
80
81
|
|
|
81
82
|
} // namespace couchbase::transactions
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
#include "transactions/attempt_context.hxx"
|
|
26
26
|
#include "transactions/exceptions.hxx"
|
|
27
27
|
|
|
28
|
+
#include "core/cluster.hxx"
|
|
28
29
|
#include "core/logger/logger.hxx"
|
|
29
30
|
|
|
30
31
|
#include <spdlog/common.h>
|
|
@@ -134,8 +135,8 @@ class transactions : public couchbase::transactions::transactions
|
|
|
134
135
|
* @param cluster The cluster to use for the transactions.
|
|
135
136
|
* @param config The configuration parameters to use for the transactions.
|
|
136
137
|
*/
|
|
137
|
-
transactions(
|
|
138
|
-
transactions(
|
|
138
|
+
transactions(core::cluster cluster, const couchbase::transactions::transactions_config::built& config);
|
|
139
|
+
transactions(core::cluster cluster, const couchbase::transactions::transactions_config& config);
|
|
139
140
|
|
|
140
141
|
/**
|
|
141
142
|
* @brief Destructor
|
|
@@ -239,17 +240,17 @@ class transactions : public couchbase::transactions::transactions
|
|
|
239
240
|
*
|
|
240
241
|
* @return Ref to the cluster used by this transaction object.
|
|
241
242
|
*/
|
|
242
|
-
[[nodiscard]]
|
|
243
|
+
[[nodiscard]] core::cluster& cluster_ref()
|
|
243
244
|
{
|
|
244
245
|
return cluster_;
|
|
245
246
|
}
|
|
246
247
|
|
|
247
248
|
private:
|
|
248
|
-
|
|
249
|
+
core::cluster cluster_;
|
|
249
250
|
couchbase::transactions::transactions_config::built config_;
|
|
250
251
|
std::unique_ptr<transactions_cleanup> cleanup_;
|
|
251
252
|
const std::size_t max_attempts_{ 1000 };
|
|
252
253
|
const std::chrono::milliseconds min_retry_delay_{ 1 };
|
|
253
254
|
};
|
|
254
255
|
} // namespace transactions
|
|
255
|
-
} // namespace couchbase::core
|
|
256
|
+
} // namespace couchbase::core
|
|
@@ -46,16 +46,17 @@ join_strings(const Range& values, const std::string& sep)
|
|
|
46
46
|
* Joins a list of objects together using fmt:: for formatting.
|
|
47
47
|
*/
|
|
48
48
|
template<typename Range>
|
|
49
|
+
|
|
49
50
|
std::string
|
|
50
|
-
join_strings_fmt(const
|
|
51
|
+
join_strings_fmt(const Range& values, const std::string& sep)
|
|
51
52
|
{
|
|
52
53
|
std::stringstream stream;
|
|
53
54
|
auto sentinel = std::end(values);
|
|
54
55
|
if (auto it = std::begin(values); it != sentinel) {
|
|
55
|
-
stream << fmt::format(
|
|
56
|
+
stream << fmt::format("{}", *it);
|
|
56
57
|
++it;
|
|
57
58
|
while (it != sentinel) {
|
|
58
|
-
stream << sep << fmt::format(
|
|
59
|
+
stream << sep << fmt::format("{}", *it);
|
|
59
60
|
++it;
|
|
60
61
|
}
|
|
61
62
|
}
|
|
@@ -26,11 +26,11 @@ template<typename Request>
|
|
|
26
26
|
static bool
|
|
27
27
|
check_query_management_request(const Request& req)
|
|
28
28
|
{
|
|
29
|
-
// if there is a query_context, then bucket
|
|
30
|
-
// collection should be.
|
|
29
|
+
// if there is a query_context, then bucket and scope will be ignored
|
|
31
30
|
if (req.query_ctx.has_value()) {
|
|
32
|
-
return
|
|
31
|
+
return true;
|
|
33
32
|
}
|
|
33
|
+
|
|
34
34
|
// otherwise, both scope and collection must be specified, if one is
|
|
35
35
|
// and bucket _must_ be there as well.
|
|
36
36
|
return !req.bucket_name.empty() &&
|
|
@@ -52,4 +52,4 @@ build_keyspace(const Request& req)
|
|
|
52
52
|
return fmt::format("{}:`{}`.`{}`.`{}`", req.namespace_id, req.bucket_name, req.scope_name, req.collection_name);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
-
} // namespace couchbase::core::utils
|
|
55
|
+
} // namespace couchbase::core::utils
|
|
@@ -0,0 +1,44 @@
|
|
|
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/common_options.hxx>
|
|
21
|
+
#include <couchbase/manager_error_context.hxx>
|
|
22
|
+
|
|
23
|
+
#include <functional>
|
|
24
|
+
#include <memory>
|
|
25
|
+
#include <optional>
|
|
26
|
+
#include <string>
|
|
27
|
+
|
|
28
|
+
namespace couchbase
|
|
29
|
+
{
|
|
30
|
+
struct allow_querying_search_index_options : public common_options<allow_querying_search_index_options> {
|
|
31
|
+
public:
|
|
32
|
+
struct built : public common_options<allow_querying_search_index_options>::built {
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
[[nodiscard]] auto build() const -> built
|
|
36
|
+
{
|
|
37
|
+
return { build_common_options() };
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private:
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
using allow_querying_search_index_handler = std::function<void(couchbase::manager_error_context)>;
|
|
44
|
+
} // namespace couchbase
|