couchbase 3.4.2 → 3.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +2 -2
- data/ext/couchbase/CMakeLists.txt +71 -7
- data/ext/couchbase/cmake/Documentation.cmake +0 -1
- data/ext/couchbase/cmake/OpenSSL.cmake +98 -3
- data/ext/couchbase/cmake/Testing.cmake +12 -4
- data/ext/couchbase/cmake/build_config.hxx.in +3 -0
- data/ext/couchbase/core/bucket.cxx +183 -151
- data/ext/couchbase/core/bucket.hxx +23 -1
- data/ext/couchbase/core/cluster.hxx +51 -13
- data/ext/couchbase/core/cluster_options.cxx +2 -2
- data/ext/couchbase/core/cluster_options.hxx +7 -6
- data/ext/couchbase/core/cluster_options_fwd.hxx +26 -0
- data/ext/couchbase/core/config_profile.hxx +1 -54
- data/ext/couchbase/core/config_profiles.cxx +79 -0
- data/ext/couchbase/core/config_profiles.hxx +56 -0
- data/ext/couchbase/core/crud_component.cxx +51 -22
- data/ext/couchbase/core/error_context/key_value.cxx +2 -1
- data/ext/couchbase/core/error_context/key_value.hxx +10 -12
- data/ext/couchbase/core/error_context/search.hxx +1 -1
- data/ext/couchbase/core/impl/analytics.cxx +1 -0
- data/ext/couchbase/core/impl/boolean_field_query.cxx +40 -0
- data/ext/couchbase/core/impl/boolean_query.cxx +62 -0
- data/ext/couchbase/core/impl/build_deferred_query_indexes.cxx +115 -50
- data/ext/couchbase/core/impl/cluster.cxx +8 -0
- data/ext/couchbase/core/impl/conjunction_query.cxx +51 -0
- data/ext/couchbase/core/impl/create_bucket.cxx +155 -0
- data/ext/couchbase/core/impl/create_query_index.cxx +172 -59
- data/ext/couchbase/core/impl/date_range.cxx +89 -0
- data/ext/couchbase/core/impl/date_range_facet.cxx +54 -0
- data/ext/couchbase/core/impl/date_range_facet_result.cxx +64 -0
- data/ext/couchbase/core/impl/date_range_query.cxx +125 -0
- data/ext/couchbase/core/impl/disjunction_query.cxx +51 -0
- data/ext/couchbase/core/impl/dns_srv_tracker.cxx +2 -1
- data/ext/couchbase/core/impl/drop_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/drop_query_index.cxx +138 -59
- data/ext/couchbase/core/impl/encoded_search_facet.hxx +29 -0
- data/ext/couchbase/core/impl/encoded_search_query.hxx +29 -0
- data/ext/couchbase/core/impl/encoded_search_sort.hxx +29 -0
- data/ext/couchbase/core/impl/flush_bucket.cxx +66 -0
- data/ext/couchbase/core/impl/geo_bounding_box_query.cxx +46 -0
- data/ext/couchbase/core/impl/geo_distance_query.cxx +43 -0
- data/ext/couchbase/core/impl/geo_polygon_query.cxx +46 -0
- data/ext/couchbase/core/impl/get_all_buckets.cxx +163 -0
- data/ext/couchbase/core/impl/get_all_query_indexes.cxx +67 -37
- data/ext/couchbase/core/impl/get_bucket.cxx +153 -0
- data/ext/couchbase/core/impl/internal_date_range_facet_result.cxx +80 -0
- data/ext/couchbase/core/impl/internal_date_range_facet_result.hxx +48 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.cxx +113 -0
- data/ext/couchbase/core/impl/internal_manager_error_context.hxx +60 -0
- data/ext/couchbase/core/impl/internal_numeric_range_facet_result.cxx +80 -0
- data/ext/couchbase/core/impl/internal_numeric_range_facet_result.hxx +48 -0
- data/ext/couchbase/core/impl/internal_search_error_context.cxx +141 -0
- data/ext/couchbase/core/impl/internal_search_error_context.hxx +61 -0
- data/ext/couchbase/core/impl/internal_search_meta_data.cxx +60 -0
- data/ext/couchbase/core/impl/internal_search_meta_data.hxx +41 -0
- data/ext/couchbase/core/impl/internal_search_result.cxx +84 -0
- data/ext/couchbase/core/impl/internal_search_result.hxx +43 -0
- data/ext/couchbase/core/impl/internal_search_row.cxx +82 -0
- data/ext/couchbase/core/impl/internal_search_row.hxx +56 -0
- data/ext/couchbase/core/impl/internal_search_row_location.hxx +32 -0
- data/ext/couchbase/core/impl/internal_search_row_locations.cxx +137 -0
- data/ext/couchbase/core/impl/internal_search_row_locations.hxx +45 -0
- data/ext/couchbase/core/impl/internal_term_facet_result.cxx +80 -0
- data/ext/couchbase/core/impl/internal_term_facet_result.hxx +48 -0
- data/ext/couchbase/core/impl/key_value_error_category.cxx +2 -4
- data/ext/couchbase/core/impl/key_value_error_context.cxx +98 -0
- data/ext/couchbase/core/impl/lookup_in.cxx +1 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.cxx +176 -0
- data/ext/couchbase/core/impl/lookup_in_all_replicas.hxx +80 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.cxx +167 -0
- data/ext/couchbase/core/impl/lookup_in_any_replica.hxx +75 -0
- data/ext/couchbase/core/impl/lookup_in_replica.cxx +97 -0
- data/ext/couchbase/core/impl/lookup_in_replica.hxx +67 -0
- data/ext/couchbase/core/impl/manager_error_context.cxx +100 -0
- data/ext/couchbase/core/impl/match_all_query.cxx +35 -0
- data/ext/couchbase/core/impl/match_none_query.cxx +35 -0
- data/ext/couchbase/core/impl/match_phrase_query.cxx +43 -0
- data/ext/couchbase/core/impl/match_query.cxx +59 -0
- data/ext/couchbase/core/impl/numeric_range.cxx +49 -0
- data/ext/couchbase/core/impl/numeric_range_facet.cxx +54 -0
- data/ext/couchbase/core/impl/numeric_range_facet_result.cxx +64 -0
- data/ext/couchbase/core/impl/numeric_range_query.cxx +56 -0
- data/ext/couchbase/core/impl/phrase_query.cxx +42 -0
- data/ext/couchbase/core/impl/prefix_query.cxx +40 -0
- data/ext/couchbase/core/impl/query.cxx +1 -0
- data/ext/couchbase/core/impl/query_error_context.cxx +75 -0
- data/ext/couchbase/core/impl/query_string_query.cxx +37 -0
- data/ext/couchbase/core/impl/regexp_query.cxx +40 -0
- data/ext/couchbase/core/impl/search.cxx +191 -0
- data/ext/couchbase/core/impl/search_error_context.cxx +147 -0
- data/ext/couchbase/core/impl/search_meta_data.cxx +46 -0
- data/ext/couchbase/core/impl/search_result.cxx +66 -0
- data/ext/couchbase/core/impl/search_row.cxx +74 -0
- data/ext/couchbase/core/impl/search_row_location.cxx +64 -0
- data/ext/couchbase/core/impl/search_row_locations.cxx +66 -0
- data/ext/couchbase/core/impl/search_sort_field.cxx +104 -0
- data/ext/couchbase/core/impl/search_sort_id.cxx +43 -0
- data/ext/couchbase/core/impl/search_sort_score.cxx +43 -0
- data/ext/couchbase/core/impl/term_facet.cxx +36 -0
- data/ext/couchbase/core/impl/term_facet_result.cxx +64 -0
- data/ext/couchbase/core/impl/term_query.cxx +56 -0
- data/ext/couchbase/core/impl/term_range_query.cxx +57 -0
- data/ext/couchbase/core/impl/update_bucket.cxx +130 -0
- data/ext/couchbase/core/impl/watch_query_indexes.cxx +53 -29
- data/ext/couchbase/core/impl/wildcard_query.cxx +40 -0
- data/ext/couchbase/core/io/dns_client.cxx +111 -40
- data/ext/couchbase/core/io/dns_config.cxx +5 -4
- data/ext/couchbase/core/io/http_context.hxx +1 -1
- data/ext/couchbase/core/io/http_session.hxx +34 -1
- data/ext/couchbase/core/io/http_session_manager.hxx +5 -3
- data/ext/couchbase/core/io/mcbp_command.hxx +9 -2
- data/ext/couchbase/core/io/mcbp_session.cxx +106 -42
- data/ext/couchbase/core/io/mcbp_session.hxx +4 -3
- data/ext/couchbase/core/io/retry_orchestrator.hxx +3 -2
- data/ext/couchbase/core/json_string.hxx +5 -0
- data/ext/couchbase/core/logger/custom_rotating_file_sink.cxx +1 -1
- data/ext/couchbase/core/logger/logger.cxx +80 -20
- data/ext/couchbase/core/logger/logger.hxx +31 -0
- data/ext/couchbase/core/meta/features.hxx +25 -0
- data/ext/couchbase/core/meta/version.cxx +18 -4
- data/ext/couchbase/core/mozilla_ca_bundle.hxx +39 -0
- data/ext/couchbase/core/operations/document_analytics.cxx +1 -0
- data/ext/couchbase/core/operations/document_analytics.hxx +1 -0
- data/ext/couchbase/core/operations/document_append.hxx +1 -1
- data/ext/couchbase/core/operations/document_decrement.hxx +1 -1
- data/ext/couchbase/core/operations/document_exists.hxx +1 -1
- data/ext/couchbase/core/operations/document_get.hxx +1 -1
- data/ext/couchbase/core/operations/document_get_and_lock.hxx +1 -1
- data/ext/couchbase/core/operations/document_get_and_touch.hxx +1 -1
- data/ext/couchbase/core/operations/document_get_projected.hxx +1 -1
- data/ext/couchbase/core/operations/document_increment.hxx +1 -1
- data/ext/couchbase/core/operations/document_insert.hxx +1 -1
- data/ext/couchbase/core/operations/document_lookup_in.hxx +1 -1
- data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +192 -0
- data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +188 -0
- data/ext/couchbase/core/operations/document_mutate_in.hxx +1 -1
- data/ext/couchbase/core/operations/document_prepend.hxx +1 -1
- data/ext/couchbase/core/operations/document_query.cxx +13 -0
- data/ext/couchbase/core/operations/document_query.hxx +7 -0
- data/ext/couchbase/core/operations/document_remove.hxx +1 -1
- data/ext/couchbase/core/operations/document_replace.hxx +1 -1
- data/ext/couchbase/core/operations/document_search.cxx +4 -1
- data/ext/couchbase/core/operations/document_search.hxx +2 -1
- data/ext/couchbase/core/operations/document_touch.hxx +1 -1
- data/ext/couchbase/core/operations/document_unlock.hxx +1 -1
- data/ext/couchbase/core/operations/document_upsert.hxx +1 -1
- data/ext/couchbase/core/operations/document_view.hxx +1 -0
- data/ext/couchbase/core/operations.hxx +2 -0
- data/ext/couchbase/core/origin.cxx +270 -0
- data/ext/couchbase/core/origin.hxx +2 -0
- data/ext/couchbase/core/protocol/client_request.hxx +11 -2
- data/ext/couchbase/core/protocol/client_response.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_hello.hxx +1 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +107 -0
- data/ext/couchbase/core/protocol/cmd_lookup_in_replica.hxx +137 -0
- data/ext/couchbase/core/protocol/hello_feature.hxx +6 -0
- data/ext/couchbase/core/protocol/hello_feature_fmt.hxx +3 -0
- data/ext/couchbase/core/protocol/status.cxx +2 -2
- data/ext/couchbase/core/public_fwd.hxx +21 -0
- data/ext/couchbase/core/range_scan_options.cxx +3 -27
- data/ext/couchbase/core/range_scan_options.hxx +13 -17
- data/ext/couchbase/core/range_scan_orchestrator.cxx +388 -170
- data/ext/couchbase/core/range_scan_orchestrator.hxx +13 -2
- data/ext/couchbase/core/range_scan_orchestrator_options.hxx +5 -3
- data/ext/couchbase/core/scan_options.hxx +0 -19
- data/ext/couchbase/core/scan_result.cxx +19 -5
- data/ext/couchbase/core/scan_result.hxx +5 -2
- data/ext/couchbase/core/timeout_defaults.hxx +2 -3
- data/ext/couchbase/core/tls_verify_mode.hxx +26 -0
- data/ext/couchbase/core/topology/capabilities.hxx +3 -0
- data/ext/couchbase/core/topology/capabilities_fmt.hxx +8 -0
- data/ext/couchbase/core/topology/collections_manifest_fmt.hxx +1 -1
- data/ext/couchbase/core/topology/configuration.cxx +15 -2
- data/ext/couchbase/core/topology/configuration.hxx +20 -1
- data/ext/couchbase/core/topology/configuration_json.hxx +6 -1
- data/ext/couchbase/core/transactions/attempt_context_testing_hooks.cxx +93 -0
- data/ext/couchbase/core/transactions/attempt_context_testing_hooks.hxx +48 -75
- data/ext/couchbase/core/transactions/cleanup_testing_hooks.cxx +52 -0
- data/ext/couchbase/core/transactions/cleanup_testing_hooks.hxx +17 -31
- data/ext/couchbase/core/transactions/exceptions.hxx +12 -9
- data/ext/couchbase/core/utils/connection_string.cxx +75 -43
- data/ext/couchbase/core/utils/connection_string.hxx +1 -0
- data/ext/couchbase/core/utils/json.cxx +4 -1
- data/ext/couchbase/couchbase/analytics_error_context.hxx +1 -1
- data/ext/couchbase/couchbase/behavior_options.hxx +27 -1
- data/ext/couchbase/couchbase/boolean_field_query.hxx +77 -0
- data/ext/couchbase/couchbase/boolean_query.hxx +223 -0
- data/ext/couchbase/couchbase/bucket_manager.hxx +135 -0
- data/ext/couchbase/couchbase/build_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/cluster.hxx +56 -1
- data/ext/couchbase/couchbase/collection.hxx +111 -0
- data/ext/couchbase/couchbase/collection_query_index_manager.hxx +7 -48
- data/ext/couchbase/couchbase/conjunction_query.hxx +88 -0
- data/ext/couchbase/couchbase/create_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/create_primary_query_index_options.hxx +0 -29
- data/ext/couchbase/couchbase/create_query_index_options.hxx +0 -33
- data/ext/couchbase/couchbase/date_range.hxx +69 -0
- data/ext/couchbase/couchbase/date_range_facet.hxx +56 -0
- data/ext/couchbase/couchbase/date_range_facet_result.hxx +55 -0
- data/ext/couchbase/couchbase/date_range_query.hxx +265 -0
- data/ext/couchbase/couchbase/disjunction_query.hxx +109 -0
- data/ext/couchbase/couchbase/doc_id_query.hxx +111 -0
- data/ext/couchbase/couchbase/drop_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/drop_primary_query_index_options.hxx +0 -30
- data/ext/couchbase/couchbase/drop_query_index_options.hxx +0 -31
- data/ext/couchbase/couchbase/error_codes.hxx +1 -2
- data/ext/couchbase/couchbase/error_context.hxx +17 -8
- data/ext/couchbase/couchbase/flush_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
- data/ext/couchbase/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
- data/ext/couchbase/couchbase/fmt/search_scan_consistency.hxx +49 -0
- data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +107 -0
- data/ext/couchbase/couchbase/geo_distance_query.hxx +109 -0
- data/ext/couchbase/couchbase/geo_point.hxx +32 -0
- data/ext/couchbase/couchbase/geo_polygon_query.hxx +85 -0
- data/ext/couchbase/couchbase/get_all_buckets_options.hxx +44 -0
- data/ext/couchbase/couchbase/get_all_query_indexes_options.hxx +0 -30
- data/ext/couchbase/couchbase/get_and_lock_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_and_touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/get_bucket_options.hxx +43 -0
- data/ext/couchbase/couchbase/get_options.hxx +2 -2
- data/ext/couchbase/couchbase/highlight_style.hxx +45 -0
- data/ext/couchbase/couchbase/insert_options.hxx +3 -3
- data/ext/couchbase/couchbase/key_value_error_context.hxx +7 -2
- data/ext/couchbase/couchbase/lookup_in_all_replicas_options.hxx +109 -0
- data/ext/couchbase/couchbase/lookup_in_any_replica_options.hxx +101 -0
- data/ext/couchbase/couchbase/lookup_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/lookup_in_replica_result.hxx +74 -0
- data/ext/couchbase/couchbase/lookup_in_result.hxx +26 -0
- data/ext/couchbase/couchbase/management/bucket_settings.hxx +116 -0
- data/ext/couchbase/couchbase/manager_error_context.hxx +29 -53
- data/ext/couchbase/couchbase/match_all_query.hxx +43 -0
- data/ext/couchbase/couchbase/match_none_query.hxx +43 -0
- data/ext/couchbase/couchbase/match_operator.hxx +45 -0
- data/ext/couchbase/couchbase/match_phrase_query.hxx +108 -0
- data/ext/couchbase/couchbase/match_query.hxx +163 -0
- data/ext/couchbase/couchbase/mutate_in_options.hxx +2 -2
- data/ext/couchbase/couchbase/numeric_range.hxx +58 -0
- data/ext/couchbase/couchbase/numeric_range_facet.hxx +56 -0
- data/ext/couchbase/couchbase/numeric_range_facet_result.hxx +55 -0
- data/ext/couchbase/couchbase/numeric_range_query.hxx +143 -0
- data/ext/couchbase/couchbase/phrase_query.hxx +93 -0
- data/ext/couchbase/couchbase/prefix_query.hxx +82 -0
- data/ext/couchbase/couchbase/query_error_context.hxx +3 -1
- data/ext/couchbase/couchbase/query_index_manager.hxx +16 -83
- data/ext/couchbase/couchbase/query_options.hxx +18 -0
- data/ext/couchbase/couchbase/query_string_query.hxx +72 -0
- data/ext/couchbase/couchbase/regexp_query.hxx +82 -0
- data/ext/couchbase/couchbase/remove_options.hxx +2 -2
- data/ext/couchbase/couchbase/replace_options.hxx +3 -3
- data/ext/couchbase/couchbase/scope.hxx +40 -0
- data/ext/couchbase/couchbase/search_date_range.hxx +68 -0
- data/ext/couchbase/couchbase/search_error_context.hxx +138 -0
- data/ext/couchbase/couchbase/search_facet.hxx +60 -0
- data/ext/couchbase/couchbase/search_facet_result.hxx +50 -0
- data/ext/couchbase/couchbase/search_meta_data.hxx +85 -0
- data/ext/couchbase/couchbase/search_metrics.hxx +127 -0
- data/ext/couchbase/couchbase/search_numeric_range.hxx +69 -0
- data/ext/couchbase/couchbase/search_options.hxx +509 -0
- data/ext/couchbase/couchbase/search_query.hxx +69 -0
- data/ext/couchbase/couchbase/search_result.hxx +77 -0
- data/ext/couchbase/couchbase/search_row.hxx +104 -0
- data/ext/couchbase/couchbase/search_row_location.hxx +55 -0
- data/ext/couchbase/couchbase/search_row_locations.hxx +86 -0
- data/ext/couchbase/couchbase/search_scan_consistency.hxx +34 -0
- data/ext/couchbase/couchbase/search_sort.hxx +58 -0
- data/ext/couchbase/couchbase/search_sort_field.hxx +117 -0
- data/ext/couchbase/couchbase/search_sort_field_missing.hxx +26 -0
- data/ext/couchbase/couchbase/search_sort_field_mode.hxx +27 -0
- data/ext/couchbase/couchbase/search_sort_field_type.hxx +28 -0
- data/ext/couchbase/couchbase/search_sort_id.hxx +60 -0
- data/ext/couchbase/couchbase/search_sort_score.hxx +60 -0
- data/ext/couchbase/couchbase/search_term_range.hxx +51 -0
- data/ext/couchbase/couchbase/security_options.hxx +18 -0
- data/ext/couchbase/couchbase/subdocument_error_context.hxx +4 -2
- data/ext/couchbase/couchbase/term_facet.hxx +48 -0
- data/ext/couchbase/couchbase/term_facet_result.hxx +55 -0
- data/ext/couchbase/couchbase/term_query.hxx +151 -0
- data/ext/couchbase/couchbase/term_range_query.hxx +142 -0
- data/ext/couchbase/couchbase/touch_options.hxx +2 -2
- data/ext/couchbase/couchbase/tracing/request_span.hxx +63 -0
- data/ext/couchbase/couchbase/tracing/request_tracer.hxx +2 -40
- data/ext/couchbase/couchbase/transactions/async_attempt_context.hxx +83 -4
- data/ext/couchbase/couchbase/transactions/attempt_context.hxx +67 -0
- data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +2 -0
- data/ext/couchbase/couchbase/transactions/transaction_keyspace.hxx +11 -1
- data/ext/couchbase/couchbase/transactions/transaction_options.hxx +79 -8
- data/ext/couchbase/couchbase/transactions/transaction_query_options.hxx +128 -15
- data/ext/couchbase/couchbase/transactions/transaction_query_result.hxx +4 -0
- data/ext/couchbase/couchbase/transactions/transaction_result.hxx +1 -1
- data/ext/couchbase/couchbase/transactions/transactions_cleanup_config.hxx +5 -3
- data/ext/couchbase/couchbase/transactions/transactions_config.hxx +9 -5
- data/ext/couchbase/couchbase/transactions/transactions_query_config.hxx +6 -3
- data/ext/couchbase/couchbase/transactions.hxx +34 -1
- data/ext/couchbase/couchbase/unlock_options.hxx +2 -2
- data/ext/couchbase/couchbase/update_bucket_options.hxx +41 -0
- data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
- data/ext/couchbase/couchbase/watch_query_indexes_options.hxx +0 -31
- data/ext/couchbase/couchbase/wildcard_query.hxx +83 -0
- data/ext/couchbase/test/CMakeLists.txt +8 -5
- data/ext/couchbase/test/benchmark_helper_integration.hxx +2 -2
- data/ext/couchbase/test/test_helper.hxx +5 -5
- data/ext/couchbase/test/test_integration_analytics.cxx +28 -6
- data/ext/couchbase/test/test_integration_collections.cxx +13 -3
- data/ext/couchbase/test/test_integration_connect.cxx +7 -3
- data/ext/couchbase/test/test_integration_crud.cxx +18 -3
- data/ext/couchbase/test/test_integration_diagnostics.cxx +11 -5
- data/ext/couchbase/test/test_integration_durability.cxx +12 -7
- data/ext/couchbase/test/test_integration_examples.cxx +419 -11
- data/ext/couchbase/test/test_integration_management.cxx +867 -368
- data/ext/couchbase/test/test_integration_query.cxx +87 -17
- data/ext/couchbase/test/test_integration_range_scan.cxx +363 -124
- data/ext/couchbase/test/test_integration_read_replica.cxx +48 -11
- data/ext/couchbase/test/test_integration_search.cxx +32 -3
- data/ext/couchbase/test/test_integration_subdoc.cxx +717 -11
- data/ext/couchbase/test/test_integration_tracer.cxx +5 -0
- data/ext/couchbase/test/test_integration_transcoders.cxx +13 -5
- data/ext/couchbase/test/{test_transaction_transaction_context.cxx → test_transaction_context.cxx} +1 -1
- data/ext/couchbase/test/test_transaction_examples.cxx +195 -0
- data/ext/couchbase/test/{test_transaction_transaction_public_async_api.cxx → test_transaction_public_async_api.cxx} +13 -12
- data/ext/couchbase/test/{test_transaction_transaction_public_blocking_api.cxx → test_transaction_public_blocking_api.cxx} +27 -21
- data/ext/couchbase/test/{test_transaction_transaction_simple.cxx → test_transaction_simple.cxx} +17 -5
- data/ext/couchbase/test/{test_transaction_transaction_simple_async.cxx → test_transaction_simple_async.cxx} +19 -21
- data/ext/couchbase/test/test_unit_config_profiles.cxx +1 -1
- data/ext/couchbase/test/test_unit_connection_string.cxx +29 -0
- data/ext/couchbase/test/test_unit_json_transcoder.cxx +4 -0
- data/ext/couchbase/test/test_unit_query.cxx +75 -0
- data/ext/couchbase/test/test_unit_search.cxx +427 -0
- data/ext/couchbase/test/test_unit_transaction_utils.cxx +10 -1
- data/ext/couchbase/test/test_unit_utils.cxx +8 -4
- data/ext/couchbase.cxx +641 -45
- data/ext/revisions.rb +3 -3
- data/lib/couchbase/authenticator.rb +0 -1
- data/lib/couchbase/cluster.rb +1 -5
- data/lib/couchbase/collection.rb +108 -0
- data/lib/couchbase/collection_options.rb +100 -0
- data/lib/couchbase/config_profiles.rb +1 -1
- data/lib/couchbase/errors.rb +5 -0
- data/lib/couchbase/json_transcoder.rb +12 -5
- data/lib/couchbase/key_value_scan.rb +125 -0
- data/lib/couchbase/management/collection_query_index_manager.rb +54 -15
- data/lib/couchbase/management/query_index_manager.rb +70 -5
- data/lib/couchbase/options.rb +151 -0
- data/lib/couchbase/raw_binary_transcoder.rb +37 -0
- data/lib/couchbase/raw_json_transcoder.rb +38 -0
- data/lib/couchbase/raw_string_transcoder.rb +40 -0
- data/lib/couchbase/scope.rb +1 -1
- data/lib/couchbase/search_options.rb +5 -0
- data/lib/couchbase/transcoder_flags.rb +62 -0
- data/lib/couchbase/utils/time.rb +14 -1
- data/lib/couchbase/version.rb +1 -1
- metadata +175 -13
- data/ext/couchbase/core/config_profile.cxx +0 -47
- data/ext/couchbase/core/impl/collection_query_index_manager.cxx +0 -93
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
#include "range_scan_options.hxx"
|
|
19
19
|
#include "range_scan_orchestrator_options.hxx"
|
|
20
20
|
#include "scan_result.hxx"
|
|
21
|
+
#include "topology/configuration.hxx"
|
|
21
22
|
|
|
22
23
|
#include <tl/expected.hpp>
|
|
23
24
|
|
|
@@ -34,15 +35,25 @@ namespace couchbase::core
|
|
|
34
35
|
class agent;
|
|
35
36
|
class range_scan_orchestrator_impl;
|
|
36
37
|
|
|
38
|
+
class scan_stream_manager
|
|
39
|
+
{
|
|
40
|
+
public:
|
|
41
|
+
virtual ~scan_stream_manager() = default;
|
|
42
|
+
virtual void stream_start_failed(std::int16_t node_id, bool fatal) = 0;
|
|
43
|
+
virtual void stream_start_failed_awaiting_retry(std::int16_t node_id, std::uint16_t vbucket_id) = 0;
|
|
44
|
+
virtual void stream_continue_failed(std::int16_t node_id, bool fatal) = 0;
|
|
45
|
+
virtual void stream_completed(std::int16_t node_id) = 0;
|
|
46
|
+
};
|
|
47
|
+
|
|
37
48
|
class range_scan_orchestrator
|
|
38
49
|
{
|
|
39
50
|
public:
|
|
40
51
|
range_scan_orchestrator(asio::io_context& io,
|
|
41
52
|
agent kv_provider,
|
|
42
|
-
|
|
53
|
+
topology::configuration::vbucket_map vbucket_map,
|
|
43
54
|
std::string scope_name,
|
|
44
55
|
std::string collection_name,
|
|
45
|
-
std::variant<std::monostate, range_scan, sampling_scan> scan_type,
|
|
56
|
+
std::variant<std::monostate, range_scan, prefix_scan, sampling_scan> scan_type,
|
|
46
57
|
range_scan_orchestrator_options options);
|
|
47
58
|
|
|
48
59
|
auto scan() -> tl::expected<scan_result, std::error_code>;
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
#pragma once
|
|
17
17
|
|
|
18
18
|
#include "scan_options.hxx"
|
|
19
|
+
#include "timeout_defaults.hxx"
|
|
19
20
|
|
|
20
21
|
#include <couchbase/mutation_token.hxx>
|
|
21
22
|
#include <couchbase/retry_strategy.hxx>
|
|
@@ -40,15 +41,16 @@ namespace couchbase::core
|
|
|
40
41
|
{
|
|
41
42
|
|
|
42
43
|
struct range_scan_orchestrator_options {
|
|
44
|
+
static constexpr std::uint16_t default_concurrency{ 1 };
|
|
45
|
+
|
|
43
46
|
bool ids_only{ false };
|
|
44
47
|
std::optional<mutation_state> consistent_with{};
|
|
45
|
-
scan_sort sort{ scan_sort::none };
|
|
46
48
|
std::uint32_t batch_item_limit{ range_scan_continue_options::default_batch_item_limit };
|
|
47
49
|
std::uint32_t batch_byte_limit{ range_scan_continue_options::default_batch_byte_limit };
|
|
48
|
-
std::
|
|
50
|
+
std::uint16_t concurrency{ default_concurrency };
|
|
49
51
|
|
|
50
52
|
std::shared_ptr<couchbase::retry_strategy> retry_strategy{ nullptr };
|
|
51
|
-
std::chrono::milliseconds timeout{};
|
|
53
|
+
std::chrono::milliseconds timeout{ timeout_defaults::key_value_scan_timeout };
|
|
52
54
|
std::shared_ptr<couchbase::tracing::request_span> parent_span{};
|
|
53
55
|
};
|
|
54
56
|
} // namespace couchbase::core
|
|
@@ -38,26 +38,7 @@ class request_span;
|
|
|
38
38
|
|
|
39
39
|
namespace couchbase::core
|
|
40
40
|
{
|
|
41
|
-
|
|
42
|
-
enum class scan_sort {
|
|
43
|
-
none,
|
|
44
|
-
ascending,
|
|
45
|
-
};
|
|
46
|
-
|
|
47
41
|
struct mutation_state {
|
|
48
42
|
std::vector<couchbase::mutation_token> tokens;
|
|
49
43
|
};
|
|
50
|
-
|
|
51
|
-
struct scan_options {
|
|
52
|
-
bool ids_only{ false };
|
|
53
|
-
std::optional<mutation_state> consistent_with{};
|
|
54
|
-
scan_sort sort{ scan_sort::none };
|
|
55
|
-
std::uint32_t batch_item_limit{ range_scan_continue_options::default_batch_item_limit };
|
|
56
|
-
std::uint32_t batch_byte_limit{ range_scan_continue_options::default_batch_byte_limit };
|
|
57
|
-
std::chrono::milliseconds batch_time_limit{ range_scan_continue_options::default_batch_time_limit };
|
|
58
|
-
|
|
59
|
-
std::shared_ptr<couchbase::retry_strategy> retry_strategy{ nullptr };
|
|
60
|
-
std::chrono::milliseconds timeout{};
|
|
61
|
-
std::shared_ptr<couchbase::tracing::request_span> parent_span{};
|
|
62
|
-
};
|
|
63
44
|
} // namespace couchbase::core
|
|
@@ -32,10 +32,7 @@ class scan_result_impl
|
|
|
32
32
|
|
|
33
33
|
[[nodiscard]] auto next() const -> tl::expected<range_scan_item, std::error_code>
|
|
34
34
|
{
|
|
35
|
-
|
|
36
|
-
return item.value();
|
|
37
|
-
}
|
|
38
|
-
return tl::unexpected{ errc::key_value::range_scan_completed };
|
|
35
|
+
return iterator_->next().get();
|
|
39
36
|
}
|
|
40
37
|
|
|
41
38
|
void next(utils::movable_function<void(range_scan_item, std::error_code)> callback) const
|
|
@@ -43,6 +40,16 @@ class scan_result_impl
|
|
|
43
40
|
return iterator_->next(std::move(callback));
|
|
44
41
|
}
|
|
45
42
|
|
|
43
|
+
void cancel()
|
|
44
|
+
{
|
|
45
|
+
return iterator_->cancel();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
[[nodiscard]] auto is_cancelled() -> bool
|
|
49
|
+
{
|
|
50
|
+
return iterator_->is_cancelled();
|
|
51
|
+
}
|
|
52
|
+
|
|
46
53
|
private:
|
|
47
54
|
std::shared_ptr<range_scan_item_iterator> iterator_;
|
|
48
55
|
};
|
|
@@ -65,7 +72,14 @@ scan_result::next(utils::movable_function<void(range_scan_item, std::error_code)
|
|
|
65
72
|
}
|
|
66
73
|
|
|
67
74
|
void
|
|
68
|
-
scan_result::cancel()
|
|
75
|
+
scan_result::cancel()
|
|
76
|
+
{
|
|
77
|
+
return impl_->cancel();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
auto
|
|
81
|
+
scan_result::is_cancelled() -> bool
|
|
69
82
|
{
|
|
83
|
+
return impl_->is_cancelled();
|
|
70
84
|
}
|
|
71
85
|
} // namespace couchbase::core
|
|
@@ -41,8 +41,10 @@ class range_scan_item_iterator
|
|
|
41
41
|
{
|
|
42
42
|
public:
|
|
43
43
|
virtual ~range_scan_item_iterator() = default;
|
|
44
|
-
virtual auto next() -> std::future<
|
|
44
|
+
virtual auto next() -> std::future<tl::expected<range_scan_item, std::error_code>> = 0;
|
|
45
45
|
virtual void next(utils::movable_function<void(range_scan_item, std::error_code)> callback) = 0;
|
|
46
|
+
virtual void cancel() = 0;
|
|
47
|
+
virtual bool is_cancelled() = 0;
|
|
46
48
|
};
|
|
47
49
|
|
|
48
50
|
class scan_result
|
|
@@ -51,7 +53,8 @@ class scan_result
|
|
|
51
53
|
explicit scan_result(std::shared_ptr<range_scan_item_iterator> iterator);
|
|
52
54
|
[[nodiscard]] auto next() const -> tl::expected<range_scan_item, std::error_code>;
|
|
53
55
|
void next(utils::movable_function<void(range_scan_item, std::error_code)> callback) const;
|
|
54
|
-
void cancel()
|
|
56
|
+
void cancel();
|
|
57
|
+
[[nodiscard]] auto is_cancelled() -> bool;
|
|
55
58
|
|
|
56
59
|
private:
|
|
57
60
|
std::shared_ptr<scan_result_impl> impl_{};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
2
|
/*
|
|
3
|
-
* Copyright 2020-
|
|
3
|
+
* Copyright 2020-2023 Couchbase, Inc.
|
|
4
4
|
*
|
|
5
5
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
6
|
* you may not use this file except in compliance with the License.
|
|
@@ -27,6 +27,7 @@ constexpr std::chrono::milliseconds resolve_timeout{ 2'000 };
|
|
|
27
27
|
constexpr std::chrono::milliseconds connect_timeout{ 2'000 };
|
|
28
28
|
constexpr std::chrono::milliseconds key_value_timeout{ 2'500 };
|
|
29
29
|
constexpr std::chrono::milliseconds key_value_durable_timeout{ 10'000 };
|
|
30
|
+
constexpr std::chrono::milliseconds key_value_scan_timeout{ 75'000 };
|
|
30
31
|
constexpr std::chrono::milliseconds view_timeout{ 75'000 };
|
|
31
32
|
constexpr std::chrono::milliseconds query_timeout{ 75'000 };
|
|
32
33
|
constexpr std::chrono::milliseconds analytics_timeout{ 75'000 };
|
|
@@ -34,8 +35,6 @@ constexpr std::chrono::milliseconds search_timeout{ 75'000 };
|
|
|
34
35
|
constexpr std::chrono::milliseconds management_timeout{ 75'000 };
|
|
35
36
|
constexpr std::chrono::milliseconds eventing_timeout{ 75'000 };
|
|
36
37
|
|
|
37
|
-
constexpr std::chrono::milliseconds range_scan_timeout{ 75'000 };
|
|
38
|
-
|
|
39
38
|
constexpr std::chrono::milliseconds dns_srv_timeout{ 500 };
|
|
40
39
|
constexpr std::chrono::milliseconds tcp_keep_alive_interval{ 60'000 };
|
|
41
40
|
constexpr std::chrono::milliseconds config_poll_interval{ 2'500 };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
|
|
2
|
+
/*
|
|
3
|
+
* Copyright 2020-2021 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
|
+
namespace couchbase::core
|
|
21
|
+
{
|
|
22
|
+
enum class tls_verify_mode {
|
|
23
|
+
none,
|
|
24
|
+
peer,
|
|
25
|
+
};
|
|
26
|
+
} // namespace couchbase::core
|
|
@@ -31,6 +31,8 @@ enum class bucket_capability {
|
|
|
31
31
|
collections,
|
|
32
32
|
durable_write,
|
|
33
33
|
tombstoned_user_xattrs,
|
|
34
|
+
range_scan,
|
|
35
|
+
replica_read,
|
|
34
36
|
};
|
|
35
37
|
|
|
36
38
|
enum class cluster_capability {
|
|
@@ -39,5 +41,6 @@ enum class cluster_capability {
|
|
|
39
41
|
n1ql_javascript_functions,
|
|
40
42
|
n1ql_inline_functions,
|
|
41
43
|
n1ql_enhanced_prepared_statements,
|
|
44
|
+
n1ql_read_from_replica,
|
|
42
45
|
};
|
|
43
46
|
} // namespace couchbase::core
|
|
@@ -67,6 +67,12 @@ struct fmt::formatter<couchbase::core::bucket_capability> {
|
|
|
67
67
|
case couchbase::core::bucket_capability::tombstoned_user_xattrs:
|
|
68
68
|
name = "tombstoned_user_xattrs";
|
|
69
69
|
break;
|
|
70
|
+
case couchbase::core::bucket_capability::range_scan:
|
|
71
|
+
name = "range_scan";
|
|
72
|
+
break;
|
|
73
|
+
case couchbase::core::bucket_capability::replica_read:
|
|
74
|
+
name = "replica_read";
|
|
75
|
+
break;
|
|
70
76
|
}
|
|
71
77
|
return format_to(ctx.out(), "{}", name);
|
|
72
78
|
}
|
|
@@ -100,6 +106,8 @@ struct fmt::formatter<couchbase::core::cluster_capability> {
|
|
|
100
106
|
case couchbase::core::cluster_capability::n1ql_enhanced_prepared_statements:
|
|
101
107
|
name = "n1ql_enhanced_prepared_statements";
|
|
102
108
|
break;
|
|
109
|
+
case couchbase::core::cluster_capability::n1ql_read_from_replica:
|
|
110
|
+
name = "n1ql_read_from_replica";
|
|
103
111
|
}
|
|
104
112
|
return format_to(ctx.out(), "{}", name);
|
|
105
113
|
}
|
|
@@ -47,6 +47,6 @@ struct fmt::formatter<couchbase::core::topology::collections_manifest> {
|
|
|
47
47
|
couchbase::core::uuid::to_string(manifest.id),
|
|
48
48
|
manifest.uid,
|
|
49
49
|
collections.size(),
|
|
50
|
-
utils::join_strings(collections, ", "));
|
|
50
|
+
couchbase::core::utils::join_strings(collections, ", "));
|
|
51
51
|
}
|
|
52
52
|
};
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
#include "core/logger/logger.hxx"
|
|
21
21
|
#include "core/service_type_fmt.hxx"
|
|
22
22
|
|
|
23
|
+
#include <gsl/narrow>
|
|
24
|
+
|
|
23
25
|
#include <algorithm>
|
|
24
26
|
#include <stdexcept>
|
|
25
27
|
|
|
@@ -162,9 +164,20 @@ configuration::node::endpoint(const std::string& network, service_type type, boo
|
|
|
162
164
|
}
|
|
163
165
|
|
|
164
166
|
bool
|
|
165
|
-
configuration::
|
|
167
|
+
configuration::has_node(const std::string& network, service_type type, bool is_tls, const std::string& hostname, const std::string& port)
|
|
168
|
+
const
|
|
166
169
|
{
|
|
167
|
-
|
|
170
|
+
std::uint16_t port_number{ 0 };
|
|
171
|
+
try {
|
|
172
|
+
port_number = gsl::narrow_cast<std::uint16_t>(std::stoul(port, nullptr, 10));
|
|
173
|
+
} catch (const std::invalid_argument&) {
|
|
174
|
+
return false;
|
|
175
|
+
} catch (const std::out_of_range&) {
|
|
176
|
+
return false;
|
|
177
|
+
}
|
|
178
|
+
return std::any_of(nodes.begin(), nodes.end(), [&](const auto& n) {
|
|
179
|
+
return n.hostname_for(network) == hostname && n.port_or(network, type, is_tls, 0) == port_number;
|
|
180
|
+
});
|
|
168
181
|
}
|
|
169
182
|
|
|
170
183
|
std::string
|
|
@@ -112,6 +112,16 @@ struct configuration {
|
|
|
112
112
|
return cluster_capabilities.find(cluster_capability::n1ql_enhanced_prepared_statements) != cluster_capabilities.end();
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
+
[[nodiscard]] bool supports_read_from_replica() const
|
|
116
|
+
{
|
|
117
|
+
return cluster_capabilities.find(cluster_capability::n1ql_read_from_replica) != cluster_capabilities.end();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
[[nodiscard]] bool supports_range_scan() const
|
|
121
|
+
{
|
|
122
|
+
return bucket_capabilities.find(bucket_capability::range_scan) != bucket_capabilities.end();
|
|
123
|
+
}
|
|
124
|
+
|
|
115
125
|
[[nodiscard]] bool ephemeral() const
|
|
116
126
|
{
|
|
117
127
|
// Use bucket capabilities to identify if couchapi is missing (then its ephemeral). If its null then
|
|
@@ -119,8 +129,17 @@ struct configuration {
|
|
|
119
129
|
return bucket_capabilities.count(couchbase::core::bucket_capability::couchapi) == 0;
|
|
120
130
|
}
|
|
121
131
|
|
|
132
|
+
[[nodiscard]] bool supports_subdoc_read_replica() const
|
|
133
|
+
{
|
|
134
|
+
return bucket_capabilities.find(bucket_capability::replica_read) != bucket_capabilities.end();
|
|
135
|
+
}
|
|
136
|
+
|
|
122
137
|
[[nodiscard]] std::size_t index_for_this_node() const;
|
|
123
|
-
[[nodiscard]] bool
|
|
138
|
+
[[nodiscard]] bool has_node(const std::string& network,
|
|
139
|
+
service_type type,
|
|
140
|
+
bool is_tls,
|
|
141
|
+
const std::string& hostname,
|
|
142
|
+
const std::string& port) const;
|
|
124
143
|
|
|
125
144
|
template<typename Key>
|
|
126
145
|
std::pair<std::uint16_t, std::optional<std::size_t>> map_key(const Key& key, std::size_t index)
|
|
@@ -52,7 +52,6 @@ struct traits<couchbase::core::topology::configuration> {
|
|
|
52
52
|
}
|
|
53
53
|
if (const auto& hostname = o.find("hostname"); hostname != o.end()) {
|
|
54
54
|
n.hostname = hostname->second.get_string();
|
|
55
|
-
n.hostname = n.hostname.substr(0, n.hostname.rfind(':'));
|
|
56
55
|
}
|
|
57
56
|
const auto& s = o.at("services");
|
|
58
57
|
n.services_plain.key_value = s.template optional<std::uint16_t>("kv");
|
|
@@ -233,6 +232,10 @@ struct traits<couchbase::core::topology::configuration> {
|
|
|
233
232
|
result.bucket_capabilities.insert(couchbase::core::bucket_capability::nodes_ext);
|
|
234
233
|
} else if (name == "xattr") {
|
|
235
234
|
result.bucket_capabilities.insert(couchbase::core::bucket_capability::xattr);
|
|
235
|
+
} else if (name == "rangeScan") {
|
|
236
|
+
result.bucket_capabilities.insert(couchbase::core::bucket_capability::range_scan);
|
|
237
|
+
} else if (name == "subdoc.ReplicaRead") {
|
|
238
|
+
result.bucket_capabilities.insert(couchbase::core::bucket_capability::replica_read);
|
|
236
239
|
}
|
|
237
240
|
}
|
|
238
241
|
}
|
|
@@ -249,6 +252,8 @@ struct traits<couchbase::core::topology::configuration> {
|
|
|
249
252
|
result.cluster_capabilities.insert(couchbase::core::cluster_capability::n1ql_inline_functions);
|
|
250
253
|
} else if (name == "enhancedPreparedStatements") {
|
|
251
254
|
result.cluster_capabilities.insert(couchbase::core::cluster_capability::n1ql_enhanced_prepared_statements);
|
|
255
|
+
} else if (name == "readFromReplica") {
|
|
256
|
+
result.cluster_capabilities.insert(couchbase::core::cluster_capability::n1ql_read_from_replica);
|
|
252
257
|
}
|
|
253
258
|
}
|
|
254
259
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2021-Present Couchbase, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#include "attempt_context_testing_hooks.hxx"
|
|
18
|
+
|
|
19
|
+
namespace couchbase::core::transactions
|
|
20
|
+
{
|
|
21
|
+
namespace
|
|
22
|
+
{
|
|
23
|
+
inline std::optional<error_class>
|
|
24
|
+
noop_1(attempt_context*)
|
|
25
|
+
{
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
inline std::optional<error_class>
|
|
30
|
+
noop_2(attempt_context*, const std::string&)
|
|
31
|
+
{
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
inline std::optional<const std::string>
|
|
36
|
+
noop_3(attempt_context*)
|
|
37
|
+
{
|
|
38
|
+
return {};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
inline bool
|
|
42
|
+
noop_4(attempt_context*, const std::string&, std::optional<const std::string>)
|
|
43
|
+
{
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
} // namespace
|
|
47
|
+
|
|
48
|
+
attempt_context_testing_hooks::attempt_context_testing_hooks()
|
|
49
|
+
: before_atr_commit{ noop_1 }
|
|
50
|
+
, before_atr_commit_ambiguity_resolution{ noop_1 }
|
|
51
|
+
, after_atr_commit{ noop_1 }
|
|
52
|
+
, before_doc_committed{ noop_2 }
|
|
53
|
+
, before_removing_doc_during_staged_insert{ noop_2 }
|
|
54
|
+
, before_rollback_delete_inserted{ noop_2 }
|
|
55
|
+
, after_doc_committed_before_saving_cas{ noop_2 }
|
|
56
|
+
, after_doc_committed{ noop_2 }
|
|
57
|
+
, before_staged_insert{ noop_2 }
|
|
58
|
+
, before_staged_remove{ noop_2 }
|
|
59
|
+
, before_staged_replace{ noop_2 }
|
|
60
|
+
, before_doc_removed{ noop_2 }
|
|
61
|
+
, before_doc_rolled_back{ noop_2 }
|
|
62
|
+
, after_doc_removed_pre_retry{ noop_2 }
|
|
63
|
+
, after_doc_removed_post_retry{ noop_2 }
|
|
64
|
+
, after_get_complete{ noop_2 }
|
|
65
|
+
, after_staged_replace_complete_before_cas_saved{ noop_2 }
|
|
66
|
+
, after_staged_replace_complete{ noop_2 }
|
|
67
|
+
, after_staged_remove_complete{ noop_2 }
|
|
68
|
+
, after_staged_insert_complete{ noop_2 }
|
|
69
|
+
, after_rollback_replace_or_remove{ noop_2 }
|
|
70
|
+
, after_rollback_delete_inserted{ noop_2 }
|
|
71
|
+
, before_check_atr_entry_for_blocking_doc{ noop_2 }
|
|
72
|
+
, before_doc_get{ noop_2 }
|
|
73
|
+
, before_get_doc_in_exists_during_staged_insert{ noop_2 }
|
|
74
|
+
, before_query{ noop_2 }
|
|
75
|
+
, after_query{ noop_2 }
|
|
76
|
+
, before_remove_staged_insert{ noop_2 }
|
|
77
|
+
, after_remove_staged_insert{ noop_2 }
|
|
78
|
+
, after_docs_committed{ noop_1 }
|
|
79
|
+
, after_docs_removed{ noop_1 }
|
|
80
|
+
, after_atr_pending{ noop_1 }
|
|
81
|
+
, before_atr_pending{ noop_1 }
|
|
82
|
+
, before_atr_complete{ noop_1 }
|
|
83
|
+
, before_atr_rolled_back{ noop_1 }
|
|
84
|
+
, after_atr_complete{ noop_1 }
|
|
85
|
+
, before_get_atr_for_abort{ noop_1 }
|
|
86
|
+
, before_atr_aborted{ noop_1 }
|
|
87
|
+
, after_atr_aborted{ noop_1 }
|
|
88
|
+
, after_atr_rolled_back{ noop_1 }
|
|
89
|
+
, random_atr_id_for_vbucket{ noop_3 }
|
|
90
|
+
, has_expired_client_side{ noop_4 }
|
|
91
|
+
{
|
|
92
|
+
}
|
|
93
|
+
} // namespace couchbase::core::transactions
|
|
@@ -28,33 +28,6 @@ class attempt_context;
|
|
|
28
28
|
using error_func1 = std::function<std::optional<error_class>(attempt_context*)>;
|
|
29
29
|
using error_func2 = std::function<std::optional<error_class>(attempt_context*, const std::string&)>;
|
|
30
30
|
|
|
31
|
-
namespace
|
|
32
|
-
{
|
|
33
|
-
std::optional<error_class>
|
|
34
|
-
noop_1(attempt_context*)
|
|
35
|
-
{
|
|
36
|
-
return {};
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
std::optional<error_class>
|
|
40
|
-
noop_2(attempt_context*, const std::string&)
|
|
41
|
-
{
|
|
42
|
-
return {};
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
std::optional<const std::string>
|
|
46
|
-
noop_3(attempt_context*)
|
|
47
|
-
{
|
|
48
|
-
return {};
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
bool
|
|
52
|
-
noop_4(attempt_context*, const std::string&, std::optional<const std::string>)
|
|
53
|
-
{
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
} // namespace
|
|
57
|
-
|
|
58
31
|
static const std::string STAGE_ROLLBACK = "rollback";
|
|
59
32
|
static const std::string STAGE_GET = "get";
|
|
60
33
|
static const std::string STAGE_INSERT = "insert";
|
|
@@ -91,55 +64,55 @@ static const std::string STAGE_QUERY_KV_INSERT = "queryKvInsert";
|
|
|
91
64
|
* about your use-case: we are always open to adding good ideas into the transactions library.
|
|
92
65
|
*/
|
|
93
66
|
struct attempt_context_testing_hooks {
|
|
94
|
-
error_func1 before_atr_commit
|
|
95
|
-
error_func1 before_atr_commit_ambiguity_resolution
|
|
96
|
-
error_func1 after_atr_commit
|
|
97
|
-
error_func2 before_doc_committed
|
|
98
|
-
error_func2 before_removing_doc_during_staged_insert
|
|
99
|
-
error_func2 before_rollback_delete_inserted
|
|
100
|
-
error_func2 after_doc_committed_before_saving_cas
|
|
101
|
-
error_func2 after_doc_committed
|
|
102
|
-
error_func2 before_staged_insert
|
|
103
|
-
error_func2 before_staged_remove
|
|
104
|
-
error_func2 before_staged_replace
|
|
105
|
-
error_func2 before_doc_removed
|
|
106
|
-
error_func2 before_doc_rolled_back
|
|
107
|
-
error_func2 after_doc_removed_pre_retry
|
|
108
|
-
error_func2 after_doc_removed_post_retry
|
|
109
|
-
error_func2 after_get_complete
|
|
110
|
-
error_func2 after_staged_replace_complete_before_cas_saved
|
|
111
|
-
error_func2 after_staged_replace_complete
|
|
112
|
-
error_func2 after_staged_remove_complete
|
|
113
|
-
error_func2 after_staged_insert_complete
|
|
114
|
-
error_func2 after_rollback_replace_or_remove
|
|
115
|
-
error_func2 after_rollback_delete_inserted
|
|
116
|
-
error_func2 before_check_atr_entry_for_blocking_doc
|
|
117
|
-
error_func2 before_doc_get
|
|
118
|
-
error_func2 before_get_doc_in_exists_during_staged_insert
|
|
119
|
-
error_func2 before_query
|
|
120
|
-
error_func2 after_query
|
|
121
|
-
error_func2 before_remove_staged_insert
|
|
122
|
-
error_func2 after_remove_staged_insert
|
|
123
|
-
|
|
124
|
-
error_func1 after_docs_committed
|
|
125
|
-
error_func1 after_docs_removed
|
|
126
|
-
error_func1 after_atr_pending
|
|
127
|
-
error_func1 before_atr_pending
|
|
128
|
-
error_func1 before_atr_complete
|
|
129
|
-
error_func1 before_atr_rolled_back
|
|
130
|
-
error_func1 after_atr_complete
|
|
131
|
-
error_func1 before_get_atr_for_abort
|
|
132
|
-
error_func1 before_atr_aborted
|
|
133
|
-
error_func1 after_atr_aborted
|
|
134
|
-
error_func1 after_atr_rolled_back
|
|
135
|
-
|
|
136
|
-
std::function<std::optional<const std::string>(attempt_context*)> random_atr_id_for_vbucket
|
|
137
|
-
|
|
138
|
-
std::function<bool(attempt_context*, const std::string&, std::optional<const std::string>)> has_expired_client_side
|
|
67
|
+
error_func1 before_atr_commit;
|
|
68
|
+
error_func1 before_atr_commit_ambiguity_resolution;
|
|
69
|
+
error_func1 after_atr_commit;
|
|
70
|
+
error_func2 before_doc_committed;
|
|
71
|
+
error_func2 before_removing_doc_during_staged_insert;
|
|
72
|
+
error_func2 before_rollback_delete_inserted;
|
|
73
|
+
error_func2 after_doc_committed_before_saving_cas;
|
|
74
|
+
error_func2 after_doc_committed;
|
|
75
|
+
error_func2 before_staged_insert;
|
|
76
|
+
error_func2 before_staged_remove;
|
|
77
|
+
error_func2 before_staged_replace;
|
|
78
|
+
error_func2 before_doc_removed;
|
|
79
|
+
error_func2 before_doc_rolled_back;
|
|
80
|
+
error_func2 after_doc_removed_pre_retry;
|
|
81
|
+
error_func2 after_doc_removed_post_retry;
|
|
82
|
+
error_func2 after_get_complete;
|
|
83
|
+
error_func2 after_staged_replace_complete_before_cas_saved;
|
|
84
|
+
error_func2 after_staged_replace_complete;
|
|
85
|
+
error_func2 after_staged_remove_complete;
|
|
86
|
+
error_func2 after_staged_insert_complete;
|
|
87
|
+
error_func2 after_rollback_replace_or_remove;
|
|
88
|
+
error_func2 after_rollback_delete_inserted;
|
|
89
|
+
error_func2 before_check_atr_entry_for_blocking_doc;
|
|
90
|
+
error_func2 before_doc_get;
|
|
91
|
+
error_func2 before_get_doc_in_exists_during_staged_insert;
|
|
92
|
+
error_func2 before_query;
|
|
93
|
+
error_func2 after_query;
|
|
94
|
+
error_func2 before_remove_staged_insert;
|
|
95
|
+
error_func2 after_remove_staged_insert;
|
|
96
|
+
|
|
97
|
+
error_func1 after_docs_committed;
|
|
98
|
+
error_func1 after_docs_removed;
|
|
99
|
+
error_func1 after_atr_pending;
|
|
100
|
+
error_func1 before_atr_pending;
|
|
101
|
+
error_func1 before_atr_complete;
|
|
102
|
+
error_func1 before_atr_rolled_back;
|
|
103
|
+
error_func1 after_atr_complete;
|
|
104
|
+
error_func1 before_get_atr_for_abort;
|
|
105
|
+
error_func1 before_atr_aborted;
|
|
106
|
+
error_func1 after_atr_aborted;
|
|
107
|
+
error_func1 after_atr_rolled_back;
|
|
108
|
+
|
|
109
|
+
std::function<std::optional<const std::string>(attempt_context*)> random_atr_id_for_vbucket;
|
|
110
|
+
|
|
111
|
+
std::function<bool(attempt_context*, const std::string&, std::optional<const std::string>)> has_expired_client_side;
|
|
112
|
+
|
|
113
|
+
attempt_context_testing_hooks();
|
|
139
114
|
|
|
140
115
|
// needed for unique_ptr<attempt_context_testing_hooks> in transaction_config, with a forward declaration.
|
|
141
|
-
~attempt_context_testing_hooks()
|
|
142
|
-
{
|
|
143
|
-
}
|
|
116
|
+
~attempt_context_testing_hooks() = default;
|
|
144
117
|
};
|
|
145
118
|
} // namespace couchbase::core::transactions
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2021-Present Couchbase, Inc.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
#include "cleanup_testing_hooks.hxx"
|
|
18
|
+
|
|
19
|
+
namespace couchbase::core::transactions
|
|
20
|
+
{
|
|
21
|
+
namespace
|
|
22
|
+
{
|
|
23
|
+
inline std::optional<couchbase::core::transactions::error_class>
|
|
24
|
+
noop1(const std::string&)
|
|
25
|
+
{
|
|
26
|
+
return {};
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
inline std::optional<couchbase::core::transactions::error_class>
|
|
30
|
+
noop2()
|
|
31
|
+
{
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
} // namespace
|
|
35
|
+
|
|
36
|
+
cleanup_testing_hooks::cleanup_testing_hooks()
|
|
37
|
+
: before_commit_doc{ noop1 }
|
|
38
|
+
, before_doc_get{ noop1 }
|
|
39
|
+
, before_remove_doc_staged_for_removal{ noop1 }
|
|
40
|
+
, before_remove_doc{ noop1 }
|
|
41
|
+
, before_atr_get{ noop1 }
|
|
42
|
+
, before_remove_links{ noop1 }
|
|
43
|
+
, before_atr_remove{ noop2 }
|
|
44
|
+
, on_cleanup_docs_completed{ noop2 }
|
|
45
|
+
, on_cleanup_completed{ noop2 }
|
|
46
|
+
, client_record_before_create{ noop1 }
|
|
47
|
+
, client_record_before_get{ noop1 }
|
|
48
|
+
, client_record_before_update{ noop1 }
|
|
49
|
+
, client_record_before_remove_client{ noop1 }
|
|
50
|
+
{
|
|
51
|
+
}
|
|
52
|
+
} // namespace couchbase::core::transactions
|