couchbase 4.2.10 → 4.2.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. package/deps/couchbase-cxx-client/CMakeLists.txt +1 -0
  2. package/deps/couchbase-cxx-client/cmake/ThirdPartyDependencies.cmake +2 -0
  3. package/deps/couchbase-cxx-client/core/bucket.cxx +25 -10
  4. package/deps/couchbase-cxx-client/core/bucket.hxx +1 -0
  5. package/deps/couchbase-cxx-client/core/cluster.cxx +29 -3
  6. package/deps/couchbase-cxx-client/core/impl/collection.cxx +2 -2
  7. package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +6 -6
  8. package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +7 -1
  9. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +10 -0
  10. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +35 -1
  11. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +2 -0
  12. package/deps/couchbase-cxx-client/core/management/design_document.hxx +1 -1
  13. package/deps/couchbase-cxx-client/core/meta/features.hxx +16 -1
  14. package/deps/couchbase-cxx-client/core/operations/document_lookup_in_all_replicas.hxx +1 -1
  15. package/deps/couchbase-cxx-client/core/operations/document_lookup_in_any_replica.hxx +1 -1
  16. package/deps/couchbase-cxx-client/core/operations/document_query.cxx +2 -2
  17. package/deps/couchbase-cxx-client/core/operations/document_search.cxx +10 -10
  18. package/deps/couchbase-cxx-client/core/operations/document_view.cxx +3 -0
  19. package/deps/couchbase-cxx-client/core/operations/document_view.hxx +1 -0
  20. package/deps/couchbase-cxx-client/core/operations/management/query_index_create.cxx +24 -13
  21. package/deps/couchbase-cxx-client/core/operations/management/query_index_create.hxx +1 -1
  22. package/deps/couchbase-cxx-client/core/origin.cxx +14 -0
  23. package/deps/couchbase-cxx-client/core/origin.hxx +6 -0
  24. package/deps/couchbase-cxx-client/core/protocol/status.cxx +2 -0
  25. package/deps/couchbase-cxx-client/core/protocol/status.hxx +1 -0
  26. package/deps/couchbase-cxx-client/core/range_scan_load_balancer.cxx +141 -0
  27. package/deps/couchbase-cxx-client/core/range_scan_load_balancer.hxx +64 -0
  28. package/deps/couchbase-cxx-client/core/range_scan_orchestrator.cxx +224 -336
  29. package/deps/couchbase-cxx-client/core/range_scan_orchestrator.hxx +5 -6
  30. package/deps/couchbase-cxx-client/core/range_scan_orchestrator_options.hxx +6 -4
  31. package/deps/couchbase-cxx-client/core/scan_result.hxx +1 -11
  32. package/deps/couchbase-cxx-client/core/topology/capabilities.hxx +70 -1
  33. package/deps/couchbase-cxx-client/core/topology/capabilities_fmt.hxx +30 -2
  34. package/deps/couchbase-cxx-client/core/topology/configuration.hxx +1 -34
  35. package/deps/couchbase-cxx-client/core/topology/configuration_fmt.hxx +2 -2
  36. package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +43 -20
  37. package/deps/couchbase-cxx-client/core/transactions/internal/exceptions_internal.hxx +5 -0
  38. package/deps/couchbase-cxx-client/couchbase/bucket.hxx +2 -2
  39. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +1 -1
  40. package/deps/couchbase-cxx-client/couchbase/collection.hxx +1 -0
  41. package/deps/couchbase-cxx-client/couchbase/collection_query_index_manager.hxx +80 -11
  42. package/deps/couchbase-cxx-client/couchbase/error_context.hxx +1 -0
  43. package/deps/couchbase-cxx-client/couchbase/fmt/key_value_status_code.hxx +3 -1
  44. package/deps/couchbase-cxx-client/couchbase/get_links_analytics_options.hxx +2 -2
  45. package/deps/couchbase-cxx-client/couchbase/key_value_status_code.hxx +1 -0
  46. package/deps/couchbase-cxx-client/couchbase/query_index_manager.hxx +6 -8
  47. package/deps/couchbase-cxx-client/couchbase/scope.hxx +1 -1
  48. package/deps/couchbase-cxx-client/couchbase/search_options.hxx +2 -2
  49. package/deps/couchbase-cxx-client/couchbase/search_result.hxx +1 -1
  50. package/deps/couchbase-cxx-client/couchbase/subdocument_error_context.hxx +1 -0
  51. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +1 -1
  52. package/deps/couchbase-cxx-client/couchbase-sdk-cxx-black-duck-manifest.yaml +1 -0
  53. package/dist/binding.d.ts +24 -2
  54. package/dist/bindingutilities.d.ts +11 -3
  55. package/dist/bindingutilities.js +33 -7
  56. package/dist/couchbase.d.ts +1 -0
  57. package/dist/couchbase.js +1 -0
  58. package/dist/queryindexmanager.d.ts +4 -4
  59. package/dist/queryindexmanager.js +7 -7
  60. package/dist/scope.d.ts +21 -0
  61. package/dist/scope.js +34 -0
  62. package/dist/scopesearchindexmanager.d.ts +116 -0
  63. package/dist/scopesearchindexmanager.js +406 -0
  64. package/dist/sdspecs.js +10 -9
  65. package/dist/sdutils.d.ts +1 -0
  66. package/dist/sdutils.js +4 -0
  67. package/dist/searchexecutor.d.ts +3 -1
  68. package/dist/searchexecutor.js +9 -2
  69. package/dist/searchindexmanager.d.ts +58 -3
  70. package/dist/searchindexmanager.js +188 -104
  71. package/dist/viewexecutor.js +13 -9
  72. package/dist/viewindexmanager.d.ts +70 -7
  73. package/dist/viewindexmanager.js +236 -103
  74. package/dist/viewtypes.d.ts +26 -0
  75. package/dist/viewtypes.js +17 -1
  76. package/package.json +7 -7
  77. package/src/constants.cpp +1 -0
  78. package/src/jstocbpp_autogen.hpp +89 -7
  79. package/deps/couchbase-cxx-client/core/scan_options.hxx +0 -44
@@ -0,0 +1,141 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2024. Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include "range_scan_load_balancer.hxx"
19
+
20
+ #include <algorithm>
21
+ #include <limits>
22
+ #include <map>
23
+ #include <numeric>
24
+ #include <queue>
25
+ #include <random>
26
+ #include <vector>
27
+
28
+ namespace couchbase::core
29
+ {
30
+ range_scan_node_state::range_scan_node_state(std::queue<std::uint16_t> vbuckets)
31
+ : pending_vbuckets_{ std::move(vbuckets) }
32
+ {
33
+ }
34
+
35
+ auto
36
+ range_scan_node_state::fetch_vbucket_id() -> std::optional<std::uint16_t>
37
+ {
38
+ std::lock_guard<std::mutex> const lock{ mutex_ };
39
+ if (pending_vbuckets_.empty()) {
40
+ return {};
41
+ }
42
+ active_stream_count_++;
43
+ auto vbucket_id = pending_vbuckets_.front();
44
+ pending_vbuckets_.pop();
45
+ return vbucket_id;
46
+ }
47
+
48
+ void
49
+ range_scan_node_state::notify_stream_ended()
50
+ {
51
+ std::lock_guard<std::mutex> const lock{ mutex_ };
52
+ active_stream_count_--;
53
+ }
54
+
55
+ void
56
+ range_scan_node_state::enqueue_vbucket(std::uint16_t vbucket_id)
57
+ {
58
+ std::lock_guard<std::mutex> const lock{ mutex_ };
59
+ pending_vbuckets_.push(vbucket_id);
60
+ }
61
+
62
+ auto
63
+ range_scan_node_state::active_stream_count() -> std::uint16_t
64
+ {
65
+ std::lock_guard<std::mutex> const lock{ mutex_ };
66
+ return active_stream_count_;
67
+ }
68
+
69
+ auto
70
+ range_scan_node_state::pending_vbucket_count() -> std::size_t
71
+ {
72
+ std::lock_guard<std::mutex> const lock{ mutex_ };
73
+ return pending_vbuckets_.size();
74
+ }
75
+
76
+ range_scan_load_balancer::range_scan_load_balancer(const topology::configuration::vbucket_map& vbucket_map,
77
+ std::optional<std::uint64_t> seed)
78
+ : seed_{ seed }
79
+ {
80
+ std::map<std::int16_t, std::queue<std::uint16_t>> node_to_vbucket_map{};
81
+ for (std::uint16_t vbucket_id = 0; vbucket_id < vbucket_map.size(); vbucket_id++) {
82
+ auto node_id = vbucket_map[vbucket_id][0];
83
+ node_to_vbucket_map[node_id].push(vbucket_id);
84
+ }
85
+ for (auto [node_id, vbucket_ids] : node_to_vbucket_map) {
86
+ nodes_.emplace(node_id, std::move(vbucket_ids));
87
+ }
88
+ }
89
+
90
+ void
91
+ range_scan_load_balancer::seed(std::uint64_t seed)
92
+ {
93
+ seed_ = seed;
94
+ }
95
+
96
+ auto
97
+ range_scan_load_balancer::select_vbucket() -> std::optional<std::uint16_t>
98
+ {
99
+ std::lock_guard<std::mutex> const lock{ select_vbucket_mutex_ };
100
+
101
+ auto min_stream_count = std::numeric_limits<std::uint16_t>::max();
102
+ std::optional<std::int16_t> selected_node_id{};
103
+
104
+ std::vector<std::map<int16_t, range_scan_node_state>::iterator> iterators{ nodes_.size() };
105
+
106
+ std::iota(iterators.begin(), iterators.end(), nodes_.begin());
107
+ std::mt19937_64 gen{ std::random_device{}() };
108
+ if (seed_.has_value()) {
109
+ gen.seed(seed_.value());
110
+ }
111
+ std::shuffle(iterators.begin(), iterators.end(), gen);
112
+
113
+ for (auto it : iterators) {
114
+ auto& [node_id, node_status] = *it;
115
+ auto stream_count = node_status.active_stream_count();
116
+
117
+ if (stream_count < min_stream_count && node_status.pending_vbucket_count() > 0) {
118
+ min_stream_count = stream_count;
119
+ selected_node_id = node_id;
120
+ }
121
+ }
122
+
123
+ if (!selected_node_id) {
124
+ return {};
125
+ }
126
+
127
+ return nodes_.at(selected_node_id.value()).fetch_vbucket_id();
128
+ }
129
+
130
+ void
131
+ range_scan_load_balancer::notify_stream_ended(std::int16_t node_id)
132
+ {
133
+ nodes_.at(node_id).notify_stream_ended();
134
+ }
135
+
136
+ void
137
+ range_scan_load_balancer::enqueue_vbucket(std::int16_t node_id, std::uint16_t vbucket_id)
138
+ {
139
+ nodes_.at(node_id).enqueue_vbucket(vbucket_id);
140
+ }
141
+ } // namespace couchbase::core
@@ -0,0 +1,64 @@
1
+ /* -*- Mode: C++; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2024. Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+
18
+ #include "core/logger/logger.hxx"
19
+ #include "core/topology/configuration.hxx"
20
+
21
+ #include <mutex>
22
+ #include <queue>
23
+
24
+ namespace couchbase::core
25
+ {
26
+ class range_scan_node_state
27
+ {
28
+ public:
29
+ range_scan_node_state(std::queue<std::uint16_t> vbuckets);
30
+
31
+ auto fetch_vbucket_id() -> std::optional<std::uint16_t>;
32
+ void notify_stream_ended();
33
+ void enqueue_vbucket(std::uint16_t vbucket_id);
34
+ auto active_stream_count() -> std::uint16_t;
35
+ auto pending_vbucket_count() -> std::size_t;
36
+
37
+ private:
38
+ std::uint16_t active_stream_count_{ 0 };
39
+ std::queue<std::uint16_t> pending_vbuckets_{};
40
+ std::mutex mutex_{};
41
+ };
42
+
43
+ class range_scan_load_balancer
44
+ {
45
+ public:
46
+ range_scan_load_balancer(const topology::configuration::vbucket_map& vbucket_map, std::optional<std::uint64_t> seed = {});
47
+
48
+ void seed(std::uint64_t seed);
49
+
50
+ /**
51
+ * Returns the ID of a vbucket that corresponds to the node with the lowest number of active streams.
52
+ * Returns "std::nullopt" if there are no pending vbuckets
53
+ */
54
+ auto select_vbucket() -> std::optional<std::uint16_t>;
55
+
56
+ void notify_stream_ended(std::int16_t node_id);
57
+ void enqueue_vbucket(std::int16_t node_id, std::uint16_t vbucket_id);
58
+
59
+ private:
60
+ std::map<std::int16_t, range_scan_node_state> nodes_{};
61
+ std::mutex select_vbucket_mutex_{};
62
+ std::optional<std::uint64_t> seed_{};
63
+ };
64
+ } // namespace couchbase::core