couchbase 4.2.8-dev.1 → 4.2.9
Sign up to get free protection for your applications and to get access to all the features.
- 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
|