couchbase 4.2.3 → 4.2.5-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CMakeLists.txt +136 -11
- package/deps/couchbase-cxx-client/CMakeLists.txt +54 -4
- package/deps/couchbase-cxx-client/README.md +1 -0
- package/deps/couchbase-cxx-client/bin/create-search-index +164 -0
- package/deps/couchbase-cxx-client/bin/init-cluster +55 -10
- package/deps/couchbase-cxx-client/bin/run-unit-tests +62 -6
- package/deps/couchbase-cxx-client/bin/travel-sample-index-v6.json +184 -0
- package/deps/couchbase-cxx-client/bin/travel-sample-index.json +188 -0
- package/deps/couchbase-cxx-client/cmake/Documentation.cmake +0 -1
- package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +98 -3
- package/deps/couchbase-cxx-client/cmake/Testing.cmake +8 -0
- package/deps/couchbase-cxx-client/cmake/build_config.hxx.in +3 -0
- package/deps/couchbase-cxx-client/core/bucket.cxx +183 -152
- package/deps/couchbase-cxx-client/core/bucket.hxx +17 -4
- package/deps/couchbase-cxx-client/core/cluster.hxx +18 -1
- package/deps/couchbase-cxx-client/core/cluster_options.hxx +1 -0
- package/deps/couchbase-cxx-client/core/error_context/key_value.cxx +2 -1
- package/deps/couchbase-cxx-client/core/error_context/key_value.hxx +10 -12
- package/deps/couchbase-cxx-client/core/error_context/search.hxx +1 -1
- package/deps/couchbase-cxx-client/core/impl/analytics.cxx +1 -0
- package/deps/couchbase-cxx-client/core/impl/boolean_field_query.cxx +40 -0
- package/deps/couchbase-cxx-client/core/impl/boolean_query.cxx +62 -0
- package/deps/couchbase-cxx-client/core/impl/cluster.cxx +1 -0
- package/deps/couchbase-cxx-client/core/impl/conjunction_query.cxx +51 -0
- package/deps/couchbase-cxx-client/core/impl/date_range.cxx +89 -0
- package/deps/couchbase-cxx-client/core/impl/date_range_facet.cxx +54 -0
- package/deps/couchbase-cxx-client/core/impl/date_range_facet_result.cxx +64 -0
- package/deps/couchbase-cxx-client/core/impl/date_range_query.cxx +125 -0
- package/deps/couchbase-cxx-client/core/impl/disjunction_query.cxx +51 -0
- package/deps/couchbase-cxx-client/core/impl/encoded_search_facet.hxx +29 -0
- package/deps/couchbase-cxx-client/core/impl/encoded_search_query.hxx +29 -0
- package/deps/couchbase-cxx-client/core/impl/encoded_search_sort.hxx +29 -0
- package/deps/couchbase-cxx-client/core/impl/geo_bounding_box_query.cxx +46 -0
- package/deps/couchbase-cxx-client/core/impl/geo_distance_query.cxx +43 -0
- package/deps/couchbase-cxx-client/core/impl/geo_polygon_query.cxx +46 -0
- package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.cxx +80 -0
- package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.hxx +48 -0
- package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.cxx +80 -0
- package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.hxx +48 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.cxx +141 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.hxx +61 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.cxx +60 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.hxx +41 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_result.cxx +84 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_result.hxx +43 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_row.cxx +82 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_row.hxx +56 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_row_location.hxx +32 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.cxx +137 -0
- package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.hxx +45 -0
- package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.cxx +80 -0
- package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.hxx +48 -0
- package/deps/couchbase-cxx-client/core/impl/key_value_error_context.cxx +98 -0
- package/deps/couchbase-cxx-client/core/impl/match_all_query.cxx +35 -0
- package/deps/couchbase-cxx-client/core/impl/match_none_query.cxx +35 -0
- package/deps/couchbase-cxx-client/core/impl/match_phrase_query.cxx +43 -0
- package/deps/couchbase-cxx-client/core/impl/match_query.cxx +59 -0
- package/deps/couchbase-cxx-client/core/impl/numeric_range.cxx +49 -0
- package/deps/couchbase-cxx-client/core/impl/numeric_range_facet.cxx +54 -0
- package/deps/couchbase-cxx-client/core/impl/numeric_range_facet_result.cxx +64 -0
- package/deps/couchbase-cxx-client/core/impl/numeric_range_query.cxx +56 -0
- package/deps/couchbase-cxx-client/core/impl/phrase_query.cxx +42 -0
- package/deps/couchbase-cxx-client/core/impl/prefix_query.cxx +40 -0
- package/deps/couchbase-cxx-client/core/impl/query_error_context.cxx +75 -0
- package/deps/couchbase-cxx-client/core/impl/query_string_query.cxx +37 -0
- package/deps/couchbase-cxx-client/core/impl/regexp_query.cxx +40 -0
- package/deps/couchbase-cxx-client/core/impl/search.cxx +191 -0
- package/deps/couchbase-cxx-client/core/impl/search_error_context.cxx +147 -0
- package/deps/couchbase-cxx-client/core/impl/search_meta_data.cxx +46 -0
- package/deps/couchbase-cxx-client/core/impl/search_result.cxx +66 -0
- package/deps/couchbase-cxx-client/core/impl/search_row.cxx +74 -0
- package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +64 -0
- package/deps/couchbase-cxx-client/core/impl/search_row_locations.cxx +66 -0
- package/deps/couchbase-cxx-client/core/impl/search_sort_field.cxx +104 -0
- package/deps/couchbase-cxx-client/core/impl/search_sort_id.cxx +43 -0
- package/deps/couchbase-cxx-client/core/impl/search_sort_score.cxx +43 -0
- package/deps/couchbase-cxx-client/core/impl/term_facet.cxx +36 -0
- package/deps/couchbase-cxx-client/core/impl/term_facet_result.cxx +64 -0
- package/deps/couchbase-cxx-client/core/impl/term_query.cxx +56 -0
- package/deps/couchbase-cxx-client/core/impl/term_range_query.cxx +57 -0
- package/deps/couchbase-cxx-client/core/impl/wildcard_query.cxx +40 -0
- package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +9 -2
- package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +54 -37
- package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +4 -3
- package/deps/couchbase-cxx-client/core/json_string.hxx +5 -0
- package/deps/couchbase-cxx-client/core/meta/version.cxx +18 -4
- package/deps/couchbase-cxx-client/core/mozilla_ca_bundle.hxx +39 -0
- package/deps/couchbase-cxx-client/core/operations/document_search.cxx +3 -1
- package/deps/couchbase-cxx-client/core/operations/document_search.hxx +1 -1
- package/deps/couchbase-cxx-client/core/protocol/client_request.hxx +11 -2
- package/deps/couchbase-cxx-client/core/protocol/client_response.hxx +1 -0
- package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +59 -46
- package/deps/couchbase-cxx-client/core/utils/connection_string.hxx +1 -0
- package/deps/couchbase-cxx-client/couchbase/analytics_error_context.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/boolean_field_query.hxx +77 -0
- package/deps/couchbase-cxx-client/couchbase/boolean_query.hxx +223 -0
- package/deps/couchbase-cxx-client/couchbase/cluster.hxx +39 -0
- package/deps/couchbase-cxx-client/couchbase/conjunction_query.hxx +88 -0
- package/deps/couchbase-cxx-client/couchbase/date_range.hxx +69 -0
- package/deps/couchbase-cxx-client/couchbase/date_range_facet.hxx +56 -0
- package/deps/couchbase-cxx-client/couchbase/date_range_facet_result.hxx +55 -0
- package/deps/couchbase-cxx-client/couchbase/date_range_query.hxx +265 -0
- package/deps/couchbase-cxx-client/couchbase/disjunction_query.hxx +109 -0
- package/deps/couchbase-cxx-client/couchbase/doc_id_query.hxx +111 -0
- package/deps/couchbase-cxx-client/couchbase/error_context.hxx +17 -8
- package/deps/couchbase-cxx-client/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
- package/deps/couchbase-cxx-client/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
- package/deps/couchbase-cxx-client/couchbase/fmt/search_scan_consistency.hxx +49 -0
- package/deps/couchbase-cxx-client/couchbase/geo_bounding_box_query.hxx +107 -0
- package/deps/couchbase-cxx-client/couchbase/geo_distance_query.hxx +109 -0
- package/deps/couchbase-cxx-client/couchbase/geo_point.hxx +32 -0
- package/deps/couchbase-cxx-client/couchbase/geo_polygon_query.hxx +85 -0
- package/deps/couchbase-cxx-client/couchbase/highlight_style.hxx +45 -0
- package/deps/couchbase-cxx-client/couchbase/key_value_error_context.hxx +7 -2
- package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/match_all_query.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/match_none_query.hxx +43 -0
- package/deps/couchbase-cxx-client/couchbase/match_operator.hxx +45 -0
- package/deps/couchbase-cxx-client/couchbase/match_phrase_query.hxx +108 -0
- package/deps/couchbase-cxx-client/couchbase/match_query.hxx +163 -0
- package/deps/couchbase-cxx-client/couchbase/numeric_range.hxx +58 -0
- package/deps/couchbase-cxx-client/couchbase/numeric_range_facet.hxx +56 -0
- package/deps/couchbase-cxx-client/couchbase/numeric_range_facet_result.hxx +55 -0
- package/deps/couchbase-cxx-client/couchbase/numeric_range_query.hxx +143 -0
- package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +93 -0
- package/deps/couchbase-cxx-client/couchbase/prefix_query.hxx +82 -0
- package/deps/couchbase-cxx-client/couchbase/query_error_context.hxx +3 -1
- package/deps/couchbase-cxx-client/couchbase/query_string_query.hxx +72 -0
- package/deps/couchbase-cxx-client/couchbase/regexp_query.hxx +82 -0
- package/deps/couchbase-cxx-client/couchbase/scope.hxx +39 -0
- package/deps/couchbase-cxx-client/couchbase/search_date_range.hxx +68 -0
- package/deps/couchbase-cxx-client/couchbase/search_error_context.hxx +138 -0
- package/deps/couchbase-cxx-client/couchbase/search_facet.hxx +60 -0
- package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +50 -0
- package/deps/couchbase-cxx-client/couchbase/search_meta_data.hxx +85 -0
- package/deps/couchbase-cxx-client/couchbase/search_metrics.hxx +127 -0
- package/deps/couchbase-cxx-client/couchbase/search_numeric_range.hxx +69 -0
- package/deps/couchbase-cxx-client/couchbase/search_options.hxx +509 -0
- package/deps/couchbase-cxx-client/couchbase/search_query.hxx +69 -0
- package/deps/couchbase-cxx-client/couchbase/search_result.hxx +77 -0
- package/deps/couchbase-cxx-client/couchbase/search_row.hxx +104 -0
- package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +55 -0
- package/deps/couchbase-cxx-client/couchbase/search_row_locations.hxx +86 -0
- package/deps/couchbase-cxx-client/couchbase/search_scan_consistency.hxx +34 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort.hxx +58 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort_field.hxx +117 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort_field_missing.hxx +26 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort_field_mode.hxx +27 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort_field_type.hxx +28 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort_id.hxx +60 -0
- package/deps/couchbase-cxx-client/couchbase/search_sort_score.hxx +60 -0
- package/deps/couchbase-cxx-client/couchbase/search_term_range.hxx +51 -0
- package/deps/couchbase-cxx-client/couchbase/security_options.hxx +3 -0
- package/deps/couchbase-cxx-client/couchbase/subdocument_error_context.hxx +4 -2
- package/deps/couchbase-cxx-client/couchbase/term_facet.hxx +48 -0
- package/deps/couchbase-cxx-client/couchbase/term_facet_result.hxx +55 -0
- package/deps/couchbase-cxx-client/couchbase/term_query.hxx +151 -0
- package/deps/couchbase-cxx-client/couchbase/term_range_query.hxx +142 -0
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +2 -1
- package/deps/couchbase-cxx-client/couchbase/transactions/transaction_result.hxx +1 -1
- package/deps/couchbase-cxx-client/couchbase/transactions.hxx +3 -3
- package/deps/couchbase-cxx-client/couchbase/wildcard_query.hxx +83 -0
- package/deps/couchbase-cxx-client/docs/Doxyfile.in +1 -1
- package/deps/couchbase-cxx-client/docs/cbc-analytics.md +2 -2
- package/deps/couchbase-cxx-client/docs/cbc-get.md +3 -2
- package/deps/couchbase-cxx-client/docs/cbc-pillowfight.md +7 -2
- package/deps/couchbase-cxx-client/docs/cbc-query.md +2 -2
- package/deps/couchbase-cxx-client/docs/cbc.md +3 -3
- package/deps/couchbase-cxx-client/docs/cli.hxx +5 -5
- package/deps/couchbase-cxx-client/docs/mainpage.hxx +42 -5
- package/deps/couchbase-cxx-client/test/CMakeLists.txt +1 -0
- package/deps/couchbase-cxx-client/test/test_integration_analytics.cxx +28 -6
- package/deps/couchbase-cxx-client/test/test_integration_collections.cxx +7 -3
- package/deps/couchbase-cxx-client/test/test_integration_connect.cxx +7 -3
- package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +13 -3
- package/deps/couchbase-cxx-client/test/test_integration_diagnostics.cxx +8 -2
- package/deps/couchbase-cxx-client/test/test_integration_durability.cxx +12 -7
- package/deps/couchbase-cxx-client/test/test_integration_examples.cxx +283 -11
- package/deps/couchbase-cxx-client/test/test_integration_management.cxx +140 -88
- package/deps/couchbase-cxx-client/test/test_integration_query.cxx +67 -9
- package/deps/couchbase-cxx-client/test/test_integration_range_scan.cxx +12 -12
- package/deps/couchbase-cxx-client/test/test_integration_read_replica.cxx +48 -11
- package/deps/couchbase-cxx-client/test/test_integration_search.cxx +19 -1
- package/deps/couchbase-cxx-client/test/test_integration_subdoc.cxx +60 -9
- package/deps/couchbase-cxx-client/test/test_integration_tracer.cxx +3 -0
- package/deps/couchbase-cxx-client/test/test_integration_transcoders.cxx +4 -0
- package/deps/couchbase-cxx-client/test/test_transaction_examples.cxx +100 -85
- package/deps/couchbase-cxx-client/test/test_unit_connection_string.cxx +29 -0
- package/deps/couchbase-cxx-client/test/test_unit_search.cxx +427 -0
- package/deps/couchbase-cxx-client/test/utils/integration_test_guard.cxx +2 -1
- package/deps/couchbase-cxx-client/test/utils/logger.cxx +3 -1
- package/deps/couchbase-cxx-client/test/utils/server_version.hxx +31 -15
- package/deps/couchbase-cxx-client/test/utils/test_context.cxx +8 -0
- package/deps/couchbase-cxx-client/tools/get.cxx +9 -8
- package/deps/couchbase-cxx-client/tools/pillowfight.cxx +175 -75
- package/deps/couchbase-cxx-client/tools/version.cxx +4 -2
- package/dist/binding.d.ts +1 -1
- package/dist/binding.js +3 -2
- package/package.json +96 -1
- package/scripts/createPlatformPackages.js +108 -0
- package/scripts/install.js +45 -0
- package/scripts/prebuilds.js +249 -0
- package/scripts/prune.js +124 -0
- package/src/jstocbpp_autogen.hpp +3 -2
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
#include <csignal>
|
|
34
34
|
#include <numeric>
|
|
35
35
|
#include <random>
|
|
36
|
+
#include <thread>
|
|
36
37
|
|
|
37
38
|
namespace cbc
|
|
38
39
|
{
|
|
@@ -46,11 +47,14 @@ usage() -> std::string
|
|
|
46
47
|
static const std::size_t default_number_of_worker_threads{ 1 };
|
|
47
48
|
static const double default_chance_of_get{ 0.6 };
|
|
48
49
|
static const double default_hit_chance_for_get{ 1.0 };
|
|
49
|
-
static const double default_hit_chance_for_upsert{
|
|
50
|
+
static const double default_hit_chance_for_upsert{ 1 };
|
|
50
51
|
static const double default_chance_of_query{ 0.0 };
|
|
51
52
|
static const std::string default_query_statement{ "SELECT COUNT(*) FROM `{bucket_name}` WHERE type = \"fake_profile\"" };
|
|
52
53
|
static const std::size_t default_document_body_size{ 0 };
|
|
53
54
|
static const std::size_t default_operation_limit{ 0 };
|
|
55
|
+
static const std::size_t default_batch_size{ 100 };
|
|
56
|
+
static const std::chrono::milliseconds default_batch_wait{ 0 };
|
|
57
|
+
static const std::size_t default_number_of_keys_to_populate{ 1'000 };
|
|
54
58
|
|
|
55
59
|
static const std::string usage_string = fmt::format(
|
|
56
60
|
R"(Run workload generator.
|
|
@@ -60,20 +64,24 @@ Usage:
|
|
|
60
64
|
cbc pillowfight (-h|--help)
|
|
61
65
|
|
|
62
66
|
Options:
|
|
63
|
-
-h --help
|
|
64
|
-
--
|
|
65
|
-
--
|
|
66
|
-
--
|
|
67
|
-
--
|
|
68
|
-
--
|
|
69
|
-
--
|
|
70
|
-
--
|
|
71
|
-
--
|
|
72
|
-
--chance-of-
|
|
73
|
-
--
|
|
74
|
-
--
|
|
75
|
-
--
|
|
76
|
-
--
|
|
67
|
+
-h --help Show this screen.
|
|
68
|
+
--verbose Include more context and information where it is applicable.
|
|
69
|
+
--bucket-name=STRING Name of the bucket. [default: {bucket_name}]
|
|
70
|
+
--scope-name=STRING Name of the scope. [default: {scope_name}]
|
|
71
|
+
--collection-name=STRING Name of the collection. [default: {collection_name}]
|
|
72
|
+
--batch-size=INTEGER Number of the operations in single batch. [default: {batch_size}]
|
|
73
|
+
--batch-wait=DURATION Time to wait after the batch. [default: {batch_wait}]
|
|
74
|
+
--number-of-io-threads=INTEGER Number of the IO threads. [default: {number_of_io_threads}]
|
|
75
|
+
--number-of-worker-threads=INTEGER Number of the IO threads. [default: {number_of_worker_threads}]
|
|
76
|
+
--chance-of-get=FLOAT The probability of get operation (where 1 means only get, and 0 - only upsert). [default: {chance_of_get}]
|
|
77
|
+
--hit-chance-for-get=FLOAT The probability of using existing ID for get operation. [default: {hit_chance_for_get}]
|
|
78
|
+
--hit-chance-for-upsert=FLOAT The probability of using existing ID for upsert operation. [default: {hit_chance_for_upsert}]
|
|
79
|
+
--chance-of-query=FLOAT The probability of N1QL query will be send on after get/upsert. [default: {chance_of_query}]
|
|
80
|
+
--query-statement=STRING The N1QL query statement to use ({{bucket_name}}, {{scope_name}} and {{collection_name}} will be substituted). [default: {query_statement}]
|
|
81
|
+
--incompressible-body Use random characters to fill generated document value (by default uses 'x' to fill the body).
|
|
82
|
+
--document-body-size=INTEGER Size of the body (if zero, it will use predefined document). [default: {document_body_size}]
|
|
83
|
+
--number-of-keys-to-populate=INTEGER Preload keys before running workload, so that the worker will not generate new keys afterwards. [default: {number_of_keys_to_populate}]
|
|
84
|
+
--operations-limit=INTEGER Stop and exit after the number of the operations reaches this limit. (zero for running indefinitely) [default: {operation_limit}]
|
|
77
85
|
|
|
78
86
|
{logger_options}{cluster_options}
|
|
79
87
|
)",
|
|
@@ -89,6 +97,9 @@ Options:
|
|
|
89
97
|
fmt::arg("query_statement", default_query_statement),
|
|
90
98
|
fmt::arg("document_body_size", default_document_body_size),
|
|
91
99
|
fmt::arg("operation_limit", default_operation_limit),
|
|
100
|
+
fmt::arg("batch_size", default_batch_size),
|
|
101
|
+
fmt::arg("batch_wait", default_batch_wait),
|
|
102
|
+
fmt::arg("number_of_keys_to_populate", default_number_of_keys_to_populate),
|
|
92
103
|
fmt::arg("logger_options", usage_block_for_logger()),
|
|
93
104
|
fmt::arg("cluster_options", usage_block_for_cluster_options()));
|
|
94
105
|
|
|
@@ -140,8 +151,11 @@ struct command_options {
|
|
|
140
151
|
std::string bucket_name;
|
|
141
152
|
std::string scope_name;
|
|
142
153
|
std::string collection_name;
|
|
154
|
+
std::size_t batch_size;
|
|
155
|
+
std::chrono::milliseconds batch_wait;
|
|
143
156
|
std::size_t number_of_io_threads;
|
|
144
157
|
std::size_t number_of_worker_threads;
|
|
158
|
+
std::size_t number_of_keys_to_populate;
|
|
145
159
|
double chance_of_get;
|
|
146
160
|
double hit_chance_for_get;
|
|
147
161
|
double hit_chance_for_upsert;
|
|
@@ -149,6 +163,12 @@ struct command_options {
|
|
|
149
163
|
std::string query_statement;
|
|
150
164
|
bool incompressible_body;
|
|
151
165
|
std::size_t document_body_size;
|
|
166
|
+
bool verbose{ false };
|
|
167
|
+
|
|
168
|
+
void set_batch_wait(std::chrono::milliseconds val)
|
|
169
|
+
{
|
|
170
|
+
batch_wait = val;
|
|
171
|
+
}
|
|
152
172
|
};
|
|
153
173
|
|
|
154
174
|
enum class operation {
|
|
@@ -166,8 +186,9 @@ std::map<std::error_code, std::size_t> errors{};
|
|
|
166
186
|
std::mutex errors_mutex{};
|
|
167
187
|
|
|
168
188
|
void
|
|
169
|
-
sigint_handler(int
|
|
189
|
+
sigint_handler(int signal)
|
|
170
190
|
{
|
|
191
|
+
fmt::print(stderr, "\nrequested stop, signal={}\n", signal);
|
|
171
192
|
running.clear();
|
|
172
193
|
}
|
|
173
194
|
|
|
@@ -179,9 +200,11 @@ dump_stats(asio::steady_timer& timer, std::chrono::system_clock::time_point star
|
|
|
179
200
|
if (ec == asio::error::operation_aborted) {
|
|
180
201
|
return;
|
|
181
202
|
}
|
|
182
|
-
auto
|
|
203
|
+
auto uptime = std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now() - start_time);
|
|
204
|
+
auto diff = uptime.count();
|
|
183
205
|
const std::uint64_t ops = total;
|
|
184
|
-
fmt::print(
|
|
206
|
+
fmt::print(
|
|
207
|
+
stderr, "\r\033[Kuptime: {}, rate: {} ops/s, total: {}\r", uptime, diff == 0 ? ops : ops / static_cast<std::uint64_t>(diff), ops);
|
|
185
208
|
return dump_stats(timer, start_time);
|
|
186
209
|
});
|
|
187
210
|
}
|
|
@@ -205,6 +228,19 @@ random_text(std::size_t length)
|
|
|
205
228
|
return text;
|
|
206
229
|
}
|
|
207
230
|
|
|
231
|
+
auto
|
|
232
|
+
generate_document_body(const command_options& options)
|
|
233
|
+
{
|
|
234
|
+
if (options.document_body_size > 0) {
|
|
235
|
+
return couchbase::core::utils::json::generate_binary({
|
|
236
|
+
{ "size", options.document_body_size },
|
|
237
|
+
{ "text", options.incompressible_body ? random_text(options.document_body_size) : std::string(options.document_body_size, 'x') },
|
|
238
|
+
});
|
|
239
|
+
} else {
|
|
240
|
+
return couchbase::core::utils::to_binary(default_json_doc);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
208
244
|
void
|
|
209
245
|
worker(couchbase::cluster connected_cluster, command_options cmd_options, std::vector<std::string>& known_keys)
|
|
210
246
|
{
|
|
@@ -216,71 +252,128 @@ worker(couchbase::cluster connected_cluster, command_options cmd_options, std::v
|
|
|
216
252
|
|
|
217
253
|
auto collection = cluster.bucket(options.bucket_name).scope(options.scope_name).collection(options.collection_name);
|
|
218
254
|
|
|
219
|
-
std::vector<std::byte> json_doc
|
|
220
|
-
if (options.document_body_size > 0) {
|
|
221
|
-
json_doc = couchbase::core::utils::json::generate_binary({
|
|
222
|
-
{ "size", options.document_body_size },
|
|
223
|
-
{ "text", options.incompressible_body ? random_text(options.document_body_size) : std::string(options.document_body_size, 'x') },
|
|
224
|
-
});
|
|
225
|
-
} else {
|
|
226
|
-
json_doc = couchbase::core::utils::to_binary(default_json_doc);
|
|
227
|
-
}
|
|
255
|
+
std::vector<std::byte> json_doc = generate_document_body(options);
|
|
228
256
|
|
|
229
257
|
while (running.test_and_set()) {
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
258
|
+
std::list<std::variant<std::future<std::pair<couchbase::key_value_error_context, couchbase::mutation_result>>,
|
|
259
|
+
std::future<std::pair<couchbase::key_value_error_context, couchbase::get_result>>,
|
|
260
|
+
std::future<std::pair<couchbase::query_error_context, couchbase::query_result>>>>
|
|
261
|
+
futures;
|
|
262
|
+
for (std::size_t i = 0; i < options.batch_size; ++i) {
|
|
263
|
+
auto opcode = (dist(gen) <= options.chance_of_get) ? operation::get : operation::upsert;
|
|
264
|
+
if (opcode == operation::get && known_keys.empty()) {
|
|
265
|
+
opcode = operation::upsert;
|
|
266
|
+
}
|
|
267
|
+
bool should_check_known_keys{ false };
|
|
268
|
+
switch (opcode) {
|
|
269
|
+
case operation::get:
|
|
270
|
+
should_check_known_keys = options.hit_chance_for_get > dist(gen);
|
|
271
|
+
break;
|
|
272
|
+
case operation::upsert:
|
|
273
|
+
should_check_known_keys = options.hit_chance_for_upsert > dist(gen);
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
std::string document_id = uniq_id("id");
|
|
277
|
+
if (should_check_known_keys && !known_keys.empty()) {
|
|
278
|
+
auto key_index = std::uniform_int_distribution<std::size_t>(0, known_keys.size() - 1)(gen);
|
|
279
|
+
document_id = known_keys[key_index];
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
switch (opcode) {
|
|
283
|
+
case operation::upsert:
|
|
284
|
+
futures.emplace_back(collection.upsert<raw_json_transcoder>(document_id, json_doc));
|
|
285
|
+
break;
|
|
286
|
+
case operation::get:
|
|
287
|
+
futures.emplace_back(collection.get(document_id));
|
|
288
|
+
break;
|
|
289
|
+
}
|
|
290
|
+
if (options.chance_of_query > 0 && dist(gen) <= options.chance_of_query) {
|
|
291
|
+
futures.emplace_back(cluster.query(options.query_statement, couchbase::query_options{}));
|
|
292
|
+
}
|
|
293
|
+
if (operations_limit > 0 && total >= operations_limit) {
|
|
294
|
+
running.clear();
|
|
295
|
+
}
|
|
233
296
|
}
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
297
|
+
|
|
298
|
+
for (auto&& future : futures) {
|
|
299
|
+
std::visit(
|
|
300
|
+
[&options, &known_keys](auto f) mutable {
|
|
301
|
+
using T = std::decay_t<decltype(f)>;
|
|
302
|
+
|
|
303
|
+
auto [ctx, resp] = f.get();
|
|
304
|
+
++total;
|
|
305
|
+
if (ctx.ec()) {
|
|
306
|
+
const std::scoped_lock lock(errors_mutex);
|
|
307
|
+
++errors[ctx.ec()];
|
|
308
|
+
if (options.verbose) {
|
|
309
|
+
fmt::print(stderr, "\r\033[K{}\n", ctx.to_json());
|
|
310
|
+
}
|
|
311
|
+
} else if constexpr (std::is_same_v<
|
|
312
|
+
T,
|
|
313
|
+
std::future<std::pair<couchbase::key_value_error_context, couchbase::mutation_result>>>) {
|
|
314
|
+
known_keys.emplace_back(ctx.id());
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
std::move(future));
|
|
242
318
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
auto key_index = std::uniform_int_distribution<std::size_t>(0, known_keys.size() - 1)(gen);
|
|
246
|
-
document_id = known_keys[key_index];
|
|
247
|
-
} else {
|
|
248
|
-
known_keys.emplace_back(document_id);
|
|
319
|
+
if (options.batch_wait != std::chrono::milliseconds::zero()) {
|
|
320
|
+
std::this_thread::sleep_for(options.batch_wait);
|
|
249
321
|
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
250
324
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
325
|
+
void
|
|
326
|
+
populate_keys(const couchbase::cluster& cluster, const command_options& options, std::vector<std::vector<std::string>>& known_keys)
|
|
327
|
+
{
|
|
328
|
+
const std::size_t total_keys{ options.number_of_worker_threads * options.number_of_keys_to_populate };
|
|
329
|
+
|
|
330
|
+
auto collection = cluster.bucket(options.bucket_name).scope(options.scope_name).collection(options.collection_name);
|
|
331
|
+
|
|
332
|
+
const auto json_doc = generate_document_body(options);
|
|
333
|
+
const auto start_time = std::chrono::system_clock::now();
|
|
334
|
+
|
|
335
|
+
std::size_t stored_keys{ 0 };
|
|
336
|
+
std::size_t retried_keys{ 0 };
|
|
337
|
+
for (std::size_t i = 0; i < options.number_of_worker_threads; ++i) {
|
|
338
|
+
auto keys_left = options.number_of_keys_to_populate;
|
|
339
|
+
|
|
340
|
+
while (keys_left > 0) {
|
|
341
|
+
fmt::print(stderr,
|
|
342
|
+
"\r\033[K{:02.2f}% {} of {}, {}\r",
|
|
343
|
+
static_cast<double>(stored_keys) / gsl::narrow_cast<double>(total_keys) * 100,
|
|
344
|
+
stored_keys,
|
|
345
|
+
total_keys,
|
|
346
|
+
std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - start_time));
|
|
347
|
+
|
|
348
|
+
auto batch_size = std::min(keys_left, options.batch_size);
|
|
349
|
+
|
|
350
|
+
std::vector<std::future<std::pair<couchbase::key_value_error_context, couchbase::mutation_result>>> futures;
|
|
351
|
+
futures.reserve(batch_size);
|
|
352
|
+
for (std::size_t k = 0; k < batch_size; ++k) {
|
|
353
|
+
const std::string document_id = uniq_id("id");
|
|
354
|
+
futures.emplace_back(collection.upsert<raw_json_transcoder>(document_id, json_doc));
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
for (auto&& future : futures) {
|
|
358
|
+
auto [ctx, res] = future.get();
|
|
265
359
|
if (ctx.ec()) {
|
|
266
|
-
|
|
267
|
-
|
|
360
|
+
++retried_keys;
|
|
361
|
+
} else {
|
|
362
|
+
++stored_keys;
|
|
363
|
+
--keys_left;
|
|
268
364
|
}
|
|
269
|
-
} break;
|
|
270
|
-
}
|
|
271
|
-
if (options.chance_of_query > 0 && dist(gen) <= options.chance_of_query) {
|
|
272
|
-
const couchbase::query_options operation_options{};
|
|
273
|
-
auto [ctx, resp] = cluster.query(options.query_statement, operation_options).get();
|
|
274
|
-
++total;
|
|
275
|
-
if (ctx.ec()) {
|
|
276
|
-
const std::scoped_lock lock(errors_mutex);
|
|
277
|
-
++errors[ctx.ec()];
|
|
278
365
|
}
|
|
279
366
|
}
|
|
280
|
-
if (operations_limit > 0 && total >= operations_limit) {
|
|
281
|
-
running.clear();
|
|
282
|
-
}
|
|
283
367
|
}
|
|
368
|
+
const auto finish_time = std::chrono::system_clock::now();
|
|
369
|
+
const auto total_time = finish_time - start_time;
|
|
370
|
+
|
|
371
|
+
fmt::print(stderr,
|
|
372
|
+
"\r\033[K{} keys populated in {}s ({}ms) with {} retries\n",
|
|
373
|
+
stored_keys,
|
|
374
|
+
std::chrono::duration_cast<std::chrono::seconds>(total_time).count(),
|
|
375
|
+
std::chrono::duration_cast<std::chrono::milliseconds>(total_time).count(),
|
|
376
|
+
retried_keys);
|
|
284
377
|
}
|
|
285
378
|
|
|
286
379
|
void
|
|
@@ -309,13 +402,16 @@ do_work(const std::string& connection_string, const couchbase::cluster_options&
|
|
|
309
402
|
throw std::system_error(ec, "unable to connect to the cluster in time");
|
|
310
403
|
}
|
|
311
404
|
|
|
405
|
+
std::vector<std::vector<std::string>> known_keys(cmd_options.number_of_worker_threads);
|
|
406
|
+
if (cmd_options.number_of_keys_to_populate > 0) {
|
|
407
|
+
populate_keys(cluster, cmd_options, known_keys);
|
|
408
|
+
}
|
|
409
|
+
|
|
312
410
|
const auto start_time = std::chrono::system_clock::now();
|
|
313
411
|
|
|
314
412
|
asio::steady_timer stats_timer(io);
|
|
315
413
|
dump_stats(stats_timer, start_time);
|
|
316
414
|
|
|
317
|
-
std::vector<std::vector<std::string>> known_keys(cmd_options.number_of_worker_threads);
|
|
318
|
-
|
|
319
415
|
std::vector<std::thread> worker_pool{};
|
|
320
416
|
worker_pool.reserve(cmd_options.number_of_worker_threads);
|
|
321
417
|
for (std::size_t i = 0; i < cmd_options.number_of_worker_threads; ++i) {
|
|
@@ -343,7 +439,7 @@ do_work(const std::string& connection_string, const couchbase::cluster_options&
|
|
|
343
439
|
if (!errors.empty()) {
|
|
344
440
|
fmt::print("error stats:\n");
|
|
345
441
|
for (auto [e, count] : errors) {
|
|
346
|
-
fmt::print(" {}: {}\n",
|
|
442
|
+
fmt::print(" {}: {}\n", e.message(), count);
|
|
347
443
|
}
|
|
348
444
|
}
|
|
349
445
|
}
|
|
@@ -373,9 +469,13 @@ cbc::pillowfight::execute(const std::vector<std::string>& argv)
|
|
|
373
469
|
cbc::fill_cluster_options(options, cluster_options, connection_string);
|
|
374
470
|
|
|
375
471
|
command_options cmd_options{};
|
|
472
|
+
cmd_options.verbose = options["--verbose"].asBool();
|
|
376
473
|
cmd_options.bucket_name = options["--bucket-name"].asString();
|
|
377
474
|
cmd_options.scope_name = options["--scope-name"].asString();
|
|
378
475
|
cmd_options.collection_name = options["--collection-name"].asString();
|
|
476
|
+
cmd_options.batch_size = options["--batch-size"].asLong();
|
|
477
|
+
parse_duration_option(cmd_options.set_batch_wait, "--batch-wait");
|
|
478
|
+
cmd_options.number_of_keys_to_populate = options["--number-of-keys-to-populate"].asLong();
|
|
379
479
|
cmd_options.number_of_io_threads = options["--number-of-io-threads"].asLong();
|
|
380
480
|
cmd_options.number_of_worker_threads = options["--number-of-worker-threads"].asLong();
|
|
381
481
|
cmd_options.chance_of_get = get_double_option(options, "--chance-of-get");
|
|
@@ -49,9 +49,11 @@ cbc::version::execute(const std::vector<std::string>& argv)
|
|
|
49
49
|
if (options["--json"].asBool()) {
|
|
50
50
|
tao::json::value info;
|
|
51
51
|
for (const auto& [name, value] : couchbase::core::meta::sdk_build_info()) {
|
|
52
|
-
if (name == "version_major" || name == "version_minor" || name == "version_patch" || name == "version_build"
|
|
52
|
+
if (name == "version_major" || name == "version_minor" || name == "version_patch" || name == "version_build" ||
|
|
53
|
+
name == "mozilla_ca_bundle_size") {
|
|
53
54
|
info[name] = std::stoi(value);
|
|
54
|
-
} else if (name == "snapshot" || name == "static_stdlib" || name == "static_openssl"
|
|
55
|
+
} else if (name == "snapshot" || name == "static_stdlib" || name == "static_openssl" ||
|
|
56
|
+
name == "mozilla_ca_bundle_embedded") {
|
|
55
57
|
info[name] = value == "true";
|
|
56
58
|
} else {
|
|
57
59
|
info[name] = value;
|
package/dist/binding.d.ts
CHANGED
|
@@ -831,7 +831,7 @@ export interface CppSearchRequest {
|
|
|
831
831
|
query: CppJsonString;
|
|
832
832
|
limit?: number;
|
|
833
833
|
skip?: number;
|
|
834
|
-
explain
|
|
834
|
+
explain?: boolean;
|
|
835
835
|
disable_scoring: boolean;
|
|
836
836
|
include_locations: boolean;
|
|
837
837
|
highlight_style?: CppSearchHighlightStyle;
|
package/dist/binding.js
CHANGED
|
@@ -9,7 +9,7 @@ eslint
|
|
|
9
9
|
jsdoc/require-jsdoc: off,
|
|
10
10
|
@typescript-eslint/no-empty-interface: off
|
|
11
11
|
*/
|
|
12
|
-
const
|
|
12
|
+
const path_1 = __importDefault(require("path"));
|
|
13
13
|
exports.zeroCas = 0;
|
|
14
14
|
//#region Autogenerated Bindings
|
|
15
15
|
var CppManagementAnalyticsCouchbaseLinkEncryptionLevel;
|
|
@@ -157,5 +157,6 @@ var CppTxnExternalException;
|
|
|
157
157
|
(function (CppTxnExternalException) {
|
|
158
158
|
})(CppTxnExternalException = exports.CppTxnExternalException || (exports.CppTxnExternalException = {}));
|
|
159
159
|
// Load it with require
|
|
160
|
-
|
|
160
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
161
|
+
const binding = require('../scripts/prebuilds').loadPrebuild(path_1.default.resolve(__dirname, '..'));
|
|
161
162
|
exports.default = binding;
|
package/package.json
CHANGED
|
@@ -1 +1,96 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"bugs": {
|
|
3
|
+
"url": "http://www.couchbase.com/issues/browse/JSCBC"
|
|
4
|
+
},
|
|
5
|
+
"description": "The official Couchbase Node.js Client Library.",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=12.0.0"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "http://www.couchbase.com/communities/nodejs",
|
|
10
|
+
"keywords": [
|
|
11
|
+
"couchbase",
|
|
12
|
+
"libcouchbase",
|
|
13
|
+
"memcached",
|
|
14
|
+
"nosql",
|
|
15
|
+
"json",
|
|
16
|
+
"document"
|
|
17
|
+
],
|
|
18
|
+
"main": "dist/couchbase.js",
|
|
19
|
+
"types": "dist/couchbase.d.ts",
|
|
20
|
+
"license": "Apache-2.0",
|
|
21
|
+
"name": "couchbase",
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"cmake-js": "^7.2.0",
|
|
24
|
+
"node-addon-api": "^5.0.0"
|
|
25
|
+
},
|
|
26
|
+
"devDependencies": {
|
|
27
|
+
"@trivago/prettier-plugin-sort-imports": "^4.1.0",
|
|
28
|
+
"@types/bindings": "^1.5.1",
|
|
29
|
+
"@types/debug": "^4.1.7",
|
|
30
|
+
"@types/node": "^20.1.0",
|
|
31
|
+
"@tsconfig/node12": "^1.0.11",
|
|
32
|
+
"@typescript-eslint/eslint-plugin": "^5.32.0",
|
|
33
|
+
"@typescript-eslint/parser": "^5.32.0",
|
|
34
|
+
"chai": "^4.3.6",
|
|
35
|
+
"eslint": "^8.21.0",
|
|
36
|
+
"eslint-config-prettier": "^8.5.0",
|
|
37
|
+
"eslint-plugin-jsdoc": "^41.1.0",
|
|
38
|
+
"eslint-plugin-mocha": "^10.1.0",
|
|
39
|
+
"eslint-plugin-node": "^11.1.0",
|
|
40
|
+
"expose-gc": "^1.0.0",
|
|
41
|
+
"mocha": "^10.0.0",
|
|
42
|
+
"npm-check-updates": "^16.0.5",
|
|
43
|
+
"nyc": "^15.1.0",
|
|
44
|
+
"prebuild": "^11.0.4",
|
|
45
|
+
"prettier": "^2.7.1",
|
|
46
|
+
"segfault-handler": "^1.3.0",
|
|
47
|
+
"semver": "^7.3.7",
|
|
48
|
+
"ts-mocha": "^10.0.0",
|
|
49
|
+
"ts-node": "^10.9.1",
|
|
50
|
+
"typedoc": "^0.24.1",
|
|
51
|
+
"typescript": "^4.7.4",
|
|
52
|
+
"uuid": "^9.0.0"
|
|
53
|
+
},
|
|
54
|
+
"repository": {
|
|
55
|
+
"type": "git",
|
|
56
|
+
"url": "http://github.com/couchbase/couchnode.git"
|
|
57
|
+
},
|
|
58
|
+
"version": "4.2.5-dev.1",
|
|
59
|
+
"config": {
|
|
60
|
+
"native": false
|
|
61
|
+
},
|
|
62
|
+
"scripts": {
|
|
63
|
+
"install": "node ./scripts/install.js",
|
|
64
|
+
"build": "cmake-js build && tsc",
|
|
65
|
+
"rebuild": "cmake-js rebuild && tsc",
|
|
66
|
+
"prebuild": "prebuild --backend cmake-js --verbose --strip",
|
|
67
|
+
"prepare": "tsc",
|
|
68
|
+
"help-prune": "node ./scripts/prune.js",
|
|
69
|
+
"build-docs": "typedoc",
|
|
70
|
+
"test": "ts-mocha test/*.test.*",
|
|
71
|
+
"test-fast": "ts-mocha test/*.test.* -ig '(slow)'",
|
|
72
|
+
"cover": "nyc ts-mocha test/*.test.*",
|
|
73
|
+
"cover-fast": "nyc ts-mocha test/*.test.* -ig '(slow)'",
|
|
74
|
+
"lint": "eslint ./lib/ ./test/",
|
|
75
|
+
"check-deps": "ncu"
|
|
76
|
+
},
|
|
77
|
+
"binary": {
|
|
78
|
+
"napi_versions": [
|
|
79
|
+
6
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"optionalDependencies": {
|
|
83
|
+
"@couchbase/couchbase-darwin-arm64-openssl1": "4.2.5-dev.1",
|
|
84
|
+
"@couchbase/couchbase-darwin-arm64-openssl3": "4.2.5-dev.1",
|
|
85
|
+
"@couchbase/couchbase-darwin-x64-openssl1": "4.2.5-dev.1",
|
|
86
|
+
"@couchbase/couchbase-darwin-x64-openssl3": "4.2.5-dev.1",
|
|
87
|
+
"@couchbase/couchbase-linux-arm64-openssl1": "4.2.5-dev.1",
|
|
88
|
+
"@couchbase/couchbase-linux-arm64-openssl3": "4.2.5-dev.1",
|
|
89
|
+
"@couchbase/couchbase-linux-x64-openssl1": "4.2.5-dev.1",
|
|
90
|
+
"@couchbase/couchbase-linux-x64-openssl3": "4.2.5-dev.1",
|
|
91
|
+
"@couchbase/couchbase-linuxmusl-x64-openssl1": "4.2.5-dev.1",
|
|
92
|
+
"@couchbase/couchbase-linuxmusl-x64-openssl3": "4.2.5-dev.1",
|
|
93
|
+
"@couchbase/couchbase-win32-x64-openssl1": "4.2.5-dev.1",
|
|
94
|
+
"@couchbase/couchbase-win32-x64-openssl3": "4.2.5-dev.1"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
const fs = require('fs')
|
|
2
|
+
const path = require('path')
|
|
3
|
+
const { getSupportedPlatformPackages } = require('./prebuilds')
|
|
4
|
+
|
|
5
|
+
try {
|
|
6
|
+
// we run this script w/in a Jenkins dir("couchnode"){} block
|
|
7
|
+
const couchbasePkgData = JSON.parse(fs.readFileSync('package.json'))
|
|
8
|
+
const packageName = couchbasePkgData.name
|
|
9
|
+
const packageVersion = couchbasePkgData.version
|
|
10
|
+
let platformPackages = (couchbasePkgData.optionalDependencies = {})
|
|
11
|
+
const prebuildsPath = path.join(process.cwd(), 'prebuilds')
|
|
12
|
+
const prebuilds = fs.readdirSync(prebuildsPath)
|
|
13
|
+
const supportedPlatPkgs = getSupportedPlatformPackages(couchbasePkgData.name)
|
|
14
|
+
for (const prebuild of prebuilds) {
|
|
15
|
+
if (fs.lstatSync(path.join(prebuildsPath, prebuild)).isDirectory()) continue
|
|
16
|
+
// prebuild format:
|
|
17
|
+
// couchbase-v<pkg-version>-<runtime>-v<runtime-version>-<platform>-<arch>-<SSL type>.node.tar.gz
|
|
18
|
+
const tokens = prebuild.split('-')
|
|
19
|
+
if (tokens.length < 7) continue
|
|
20
|
+
if (tokens[tokens.length - 1].startsWith('debug')) {
|
|
21
|
+
fs.renameSync(`prebuilds/${prebuild}`, `prebuilds_debug/${prebuild}`)
|
|
22
|
+
continue
|
|
23
|
+
}
|
|
24
|
+
const nodeVersion = parseInt(
|
|
25
|
+
tokens[tokens.length - 1].replace('.node', '').replace('node', '')
|
|
26
|
+
)
|
|
27
|
+
const arch = tokens[tokens.length - 2]
|
|
28
|
+
const platform = tokens[tokens.length - 3]
|
|
29
|
+
const runtime = tokens[tokens.length - 5]
|
|
30
|
+
const sslType =
|
|
31
|
+
runtime === 'napi'
|
|
32
|
+
? nodeVersion >= 18
|
|
33
|
+
? 'openssl3'
|
|
34
|
+
: 'openssl1'
|
|
35
|
+
: 'boringssl'
|
|
36
|
+
const platPkg = `${tokens[0]}-${platform}-${arch}-${sslType}`
|
|
37
|
+
let description = `Couchbase Node.js SDK platform specific binary for ${runtime} runtime on ${platform} OS with ${arch} architecture`
|
|
38
|
+
if (runtime === 'napi') {
|
|
39
|
+
description += ` and OpenSSL ${nodeVersion >= 18 ? '3.x' : '1.x'}.`
|
|
40
|
+
} else {
|
|
41
|
+
description += ' and BoringSSL.'
|
|
42
|
+
}
|
|
43
|
+
console.log(`platformPackage=${platPkg}`)
|
|
44
|
+
if (supportedPlatPkgs.includes(platPkg)) {
|
|
45
|
+
console.log(`Building requirements for platform package: ${platPkg}`)
|
|
46
|
+
if (!fs.existsSync(`prebuilds/${platPkg}`)) {
|
|
47
|
+
fs.mkdirSync(`prebuilds/${platPkg}`)
|
|
48
|
+
}
|
|
49
|
+
tokens[tokens.length - 1] = `${sslType}.node`
|
|
50
|
+
const newPrebuildName = tokens.join('-')
|
|
51
|
+
const oldPath = path.join('prebuilds', prebuild)
|
|
52
|
+
const newPath = path.join('prebuilds', platPkg)
|
|
53
|
+
fs.renameSync(oldPath, path.join(newPath, newPrebuildName))
|
|
54
|
+
const platformPackage = `@${packageName}/${platPkg}`
|
|
55
|
+
// build the platform package files: package.json, README and index.js
|
|
56
|
+
const engines = { node: `>=16.0.0` }
|
|
57
|
+
if (runtime === 'napi') {
|
|
58
|
+
engines.node = nodeVersion >= 18 ? '>=18.0.0' : '<18'
|
|
59
|
+
}
|
|
60
|
+
fs.writeFileSync(
|
|
61
|
+
path.join(newPath, 'package.json'),
|
|
62
|
+
JSON.stringify(
|
|
63
|
+
{
|
|
64
|
+
name: platformPackage,
|
|
65
|
+
version: packageVersion,
|
|
66
|
+
engines: engines,
|
|
67
|
+
os: [platform.includes('linux') ? 'linux' : platform],
|
|
68
|
+
cpu: [arch],
|
|
69
|
+
bugs: couchbasePkgData.bugs,
|
|
70
|
+
homepage: couchbasePkgData.homepage,
|
|
71
|
+
license: couchbasePkgData.license,
|
|
72
|
+
repository: couchbasePkgData.repository,
|
|
73
|
+
description: description,
|
|
74
|
+
},
|
|
75
|
+
null,
|
|
76
|
+
2
|
|
77
|
+
)
|
|
78
|
+
)
|
|
79
|
+
fs.writeFileSync(path.join(newPath, 'index.js'), '')
|
|
80
|
+
fs.writeFileSync(path.join(newPath, 'README.md'), description)
|
|
81
|
+
platformPackages[platformPackage] = packageVersion
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (
|
|
86
|
+
!process.env.ALLOW_MISMATCH &&
|
|
87
|
+
Object.keys(platformPackages).length != supportedPlatPkgs.length
|
|
88
|
+
) {
|
|
89
|
+
const builtPlatformPkgs = Object.keys(platformPackages).map((pkg) => {
|
|
90
|
+
const tokens = pkg.split('/')
|
|
91
|
+
return tokens[1]
|
|
92
|
+
})
|
|
93
|
+
const missingPkgs = supportedPlatPkgs.filter(
|
|
94
|
+
(pkg) => !builtPlatformPkgs.includes(pkg)
|
|
95
|
+
)
|
|
96
|
+
const extraPkgs = builtPlatformPkgs.filter(
|
|
97
|
+
(pkg) => !supportedPlatPkgs.includes(pkg)
|
|
98
|
+
)
|
|
99
|
+
let msg = 'Mismatch in built platform packages.\n'
|
|
100
|
+
msg += 'Missing: ' + JSON.stringify(missingPkgs) + '.\n'
|
|
101
|
+
msg += 'Extra: ' + JSON.stringify(extraPkgs) + '.'
|
|
102
|
+
throw new Error(msg)
|
|
103
|
+
}
|
|
104
|
+
fs.writeFileSync('package.json', JSON.stringify(couchbasePkgData, null, 2))
|
|
105
|
+
} catch (err) {
|
|
106
|
+
console.log('An error occurred:', err)
|
|
107
|
+
process.exitCode = 1
|
|
108
|
+
}
|