couchbase 3.8.1 → 3.8.2
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/cache/extconf_include.rb +4 -4
- data/ext/cache/mozilla-ca-bundle.crt +95 -102
- data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
- data/ext/couchbase/CMakeLists.txt +1 -1
- data/ext/couchbase/core/impl/public_cluster.cxx +118 -5
- data/ext/couchbase/core/io/configuration_belongs_to_session.hxx +67 -0
- data/ext/couchbase/core/io/mcbp_session.cxx +7 -16
- data/ext/couchbase/core/io/streams.cxx +143 -12
- data/ext/couchbase/core/io/streams.hxx +6 -0
- data/ext/couchbase/core/operations/management/bucket_create.cxx +37 -38
- data/ext/couchbase/core/operations/management/bucket_update.cxx +26 -28
- data/ext/couchbase/core/transactions/attempt_context_impl.cxx +254 -178
- data/ext/couchbase/core/transactions/attempt_context_impl.hxx +5 -1
- data/ext/couchbase/core/transactions/transactions_cleanup.cxx +42 -7
- data/ext/couchbase/core/transactions/waitable_op_list.hxx +13 -2
- data/ext/couchbase/couchbase/cluster.hxx +33 -0
- data/lib/couchbase/cluster.rb +16 -14
- data/lib/couchbase/options.rb +7 -2
- data/lib/couchbase/version.rb +1 -1
- metadata +6 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4ba376c24afbb895629c0ca2c33e59ac8d45dae4c196ab87bedb5e0d415867ea
|
|
4
|
+
data.tar.gz: 68af1ad4535c8b4eb90160c867335fd665b8069f2e8322718d8a43575dacbb6f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9ce7e01b85248d6f15b365d2c0fe4506c18319d40a00a7a24f747c884e471b9798b50b9af6803aed9cb08c124aadb23c84452fa26aea2031977aadbda60e8ac4
|
|
7
|
+
data.tar.gz: 49335630892f741d61de77ccb787ed535adfce6eec627751a0ad7b9fb7a855abc3249acd40854e7a03cc1e486838ce9acccd30f0f08f1d38091c33d352ddc938
|
data/README.md
CHANGED
|
@@ -9,7 +9,7 @@ This repository contains the third generation of the official Couchbase SDK for
|
|
|
9
9
|
|
|
10
10
|
## Support and Feedback
|
|
11
11
|
|
|
12
|
-
If you find an issue,
|
|
12
|
+
Issues are tracked on [our JIRA issue tracker](https://jira.issues.couchbase.com/browse/RCBC). If you find an issue, you can report it by [opening an issue on GitHub](https://github.com/couchbase/couchbase-ruby-client/issues). Also, you are
|
|
13
13
|
always welcome on [our forum](https://forums.couchbase.com/c/ruby-sdk) and [Discord](https://discord.com/invite/sQ5qbPZuTh).
|
|
14
14
|
|
|
15
15
|
Please attach version information to the ticket/post. To obtain this information, use the following command:
|
|
@@ -23,7 +23,7 @@ The library has been tested with MRI 3.2, 3.3, 3.4 and 4.0. Supported platforms
|
|
|
23
23
|
Add this line to your application's Gemfile:
|
|
24
24
|
|
|
25
25
|
```ruby
|
|
26
|
-
gem "couchbase", "3.8.
|
|
26
|
+
gem "couchbase", "3.8.2"
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
And then execute:
|
|
@@ -3,7 +3,7 @@ cmake_flags << "-DCPM_USE_NAMED_CACHE_DIRECTORIES=ON"
|
|
|
3
3
|
cmake_flags << "-DCPM_USE_LOCAL_PACKAGES=OFF"
|
|
4
4
|
cmake_flags << "-DCPM_SOURCE_CACHE=#{File.expand_path('cache', __dir__)}"
|
|
5
5
|
cmake_flags << "-DCOUCHBASE_CXX_CLIENT_EMBED_MOZILLA_CA_BUNDLE_ROOT=#{File.expand_path('cache', __dir__)}"
|
|
6
|
-
cmake_flags << "-DEXT_GIT_REVISION=
|
|
7
|
-
cmake_flags << "-DCOUCHBASE_CXX_CLIENT_GIT_REVISION=
|
|
8
|
-
cmake_flags << "-DCOUCHBASE_CXX_CLIENT_GIT_DESCRIBE=1.3.
|
|
9
|
-
cmake_flags << "-DCOUCHBASE_CXX_CLIENT_BUILD_TIMESTAMP=2026-
|
|
6
|
+
cmake_flags << "-DEXT_GIT_REVISION=2eba0f295d903f8c9ac7f62b7e7a31a9dfac1375"
|
|
7
|
+
cmake_flags << "-DCOUCHBASE_CXX_CLIENT_GIT_REVISION=ebe2721b90d12a085d112a055b6519659fa4f90e"
|
|
8
|
+
cmake_flags << "-DCOUCHBASE_CXX_CLIENT_GIT_DESCRIBE=1.3.3-0-gebe2721b"
|
|
9
|
+
cmake_flags << "-DCOUCHBASE_CXX_CLIENT_BUILD_TIMESTAMP=2026-09-02T00:55:38"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
##
|
|
2
2
|
## Bundle of CA Root Certificates
|
|
3
3
|
##
|
|
4
|
-
## Certificate data from Mozilla as of: Thu
|
|
4
|
+
## Certificate data from Mozilla as of: Thu Aug 13 03:12:01 2026 GMT
|
|
5
5
|
##
|
|
6
6
|
## Find updated versions here: https://curl.se/docs/caextract.html
|
|
7
7
|
##
|
|
@@ -13,39 +13,13 @@
|
|
|
13
13
|
## It contains the certificates in PEM format and therefore
|
|
14
14
|
## can be directly used with curl / libcurl / php_curl, or with
|
|
15
15
|
## an Apache+mod_ssl webserver for SSL client authentication.
|
|
16
|
-
##
|
|
16
|
+
## Configure this file as the SSLCACertificateFile.
|
|
17
17
|
##
|
|
18
18
|
## Conversion done with mk-ca-bundle.pl version 1.33.
|
|
19
|
-
## SHA256:
|
|
19
|
+
## SHA256: 81b7f2576333a2e360e673f912d7b0b7a765d836c731003e348a46cac5d37198
|
|
20
20
|
##
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
Entrust Root Certification Authority
|
|
24
|
-
====================================
|
|
25
|
-
-----BEGIN CERTIFICATE-----
|
|
26
|
-
MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
|
|
27
|
-
BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
|
|
28
|
-
b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
|
|
29
|
-
A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
|
|
30
|
-
MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
|
|
31
|
-
MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
|
|
32
|
-
Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
|
|
33
|
-
dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
|
|
34
|
-
ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
|
|
35
|
-
A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
|
|
36
|
-
Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
|
|
37
|
-
j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
|
|
38
|
-
rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
|
|
39
|
-
DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
|
|
40
|
-
MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
|
|
41
|
-
hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
|
|
42
|
-
A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
|
|
43
|
-
Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
|
|
44
|
-
v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
|
|
45
|
-
W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
|
|
46
|
-
tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
|
|
47
|
-
-----END CERTIFICATE-----
|
|
48
|
-
|
|
49
23
|
COMODO ECC Certification Authority
|
|
50
24
|
==================================
|
|
51
25
|
-----BEGIN CERTIFICATE-----
|
|
@@ -63,37 +37,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
|
|
|
63
37
|
U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
|
|
64
38
|
-----END CERTIFICATE-----
|
|
65
39
|
|
|
66
|
-
ePKI Root Certification Authority
|
|
67
|
-
=================================
|
|
68
|
-
-----BEGIN CERTIFICATE-----
|
|
69
|
-
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
-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
-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
-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
-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
-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
-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
-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
-
qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
|
|
78
|
-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
-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
-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
-
lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
|
|
82
|
-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
-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
-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
-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
-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
-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
-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
-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
-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
-
xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
|
|
92
|
-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
-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
-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
|
|
95
|
-
-----END CERTIFICATE-----
|
|
96
|
-
|
|
97
40
|
NetLock Arany (Class Gold) Főtanúsítvány
|
|
98
41
|
========================================
|
|
99
42
|
-----BEGIN CERTIFICATE-----
|
|
@@ -611,27 +554,6 @@ vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
|
|
|
611
554
|
9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
|
|
612
555
|
-----END CERTIFICATE-----
|
|
613
556
|
|
|
614
|
-
Atos TrustedRoot 2011
|
|
615
|
-
=====================
|
|
616
|
-
-----BEGIN CERTIFICATE-----
|
|
617
|
-
MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
|
|
618
|
-
cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
|
|
619
|
-
MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
|
|
620
|
-
A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
|
|
621
|
-
hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
|
|
622
|
-
54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
|
|
623
|
-
DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
|
|
624
|
-
HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
|
|
625
|
-
z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
|
|
626
|
-
l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
|
|
627
|
-
bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
|
|
628
|
-
CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
|
|
629
|
-
k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
|
|
630
|
-
TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
|
|
631
|
-
61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
|
|
632
|
-
3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
|
|
633
|
-
-----END CERTIFICATE-----
|
|
634
|
-
|
|
635
557
|
QuoVadis Root CA 1 G3
|
|
636
558
|
=====================
|
|
637
559
|
-----BEGIN CERTIFICATE-----
|
|
@@ -2689,27 +2611,6 @@ It6IKTtM1/r+t+FHvpw+PoP7UV31aPcuIYXcv/Fa4nzXxeSDwWrruoBa3lwtcHb4yOWHh8qgnaHl
|
|
|
2689
2611
|
IhInD0Q9HWzq1MKLL295q39QpsQZp6F6t5b5wR9iWqJDB0BeJsas7a5wFsWqynKKTbDPAYsDP27X
|
|
2690
2612
|
-----END CERTIFICATE-----
|
|
2691
2613
|
|
|
2692
|
-
SecureSign Root CA12
|
|
2693
|
-
====================
|
|
2694
|
-
-----BEGIN CERTIFICATE-----
|
|
2695
|
-
MIIDcjCCAlqgAwIBAgIUZvnHwa/swlG07VOX5uaCwysckBYwDQYJKoZIhvcNAQELBQAwUTELMAkG
|
|
2696
|
-
A1UEBhMCSlAxIzAhBgNVBAoTGkN5YmVydHJ1c3QgSmFwYW4gQ28uLCBMdGQuMR0wGwYDVQQDExRT
|
|
2697
|
-
ZWN1cmVTaWduIFJvb3QgQ0ExMjAeFw0yMDA0MDgwNTM2NDZaFw00MDA0MDgwNTM2NDZaMFExCzAJ
|
|
2698
|
-
BgNVBAYTAkpQMSMwIQYDVQQKExpDeWJlcnRydXN0IEphcGFuIENvLiwgTHRkLjEdMBsGA1UEAxMU
|
|
2699
|
-
U2VjdXJlU2lnbiBSb290IENBMTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6OcE3
|
|
2700
|
-
emhFKxS06+QT61d1I02PJC0W6K6OyX2kVzsqdiUzg2zqMoqUm048luT9Ub+ZyZN+v/mtp7JIKwcc
|
|
2701
|
-
J/VMvHASd6SFVLX9kHrko+RRWAPNEHl57muTH2SOa2SroxPjcf59q5zdJ1M3s6oYwlkm7Fsf0uZl
|
|
2702
|
-
fO+TvdhYXAvA42VvPMfKWeP+bl+sg779XSVOKik71gurFzJ4pOE+lEa+Ym6b3kaosRbnhW70CEBF
|
|
2703
|
-
EaCeVESE99g2zvVQR9wsMJvuwPWW0v4JhscGWa5Pro4RmHvzC1KqYiaqId+OJTN5lxZJjfU+1Uef
|
|
2704
|
-
NzFJM3IFTQy2VYzxV4+Kh9GtxRESOaCtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
|
|
2705
|
-
AQH/BAQDAgEGMB0GA1UdDgQWBBRXNPN0zwRL1SXm8UC2LEzZLemgrTANBgkqhkiG9w0BAQsFAAOC
|
|
2706
|
-
AQEAPrvbFxbS8hQBICw4g0utvsqFepq2m2um4fylOqyttCg6r9cBg0krY6LdmmQOmFxv3Y67ilQi
|
|
2707
|
-
LUoT865AQ9tPkbeGGuwAtEGBpE/6aouIs3YIcipJQMPTw4WJmBClnW8Zt7vPemVV2zfrPIpyMpce
|
|
2708
|
-
mik+rY3moxtt9XUa5rBouVui7mlHJzWhhpmA8zNL4WukJsPvdFlseqJkth5Ew1DgDzk9qTPxpfPS
|
|
2709
|
-
vWKErI4cqc1avTc7bgoitPQV55FYxTpE05Uo2cBl6XLK0A+9H7MV2anjpEcJnuDLN/v9vZfVvhga
|
|
2710
|
-
aaI5gdka9at/yOPiZwud9AzqVN/Ssq+xIvEg37xEHA==
|
|
2711
|
-
-----END CERTIFICATE-----
|
|
2712
|
-
|
|
2713
2614
|
SecureSign Root CA14
|
|
2714
2615
|
====================
|
|
2715
2616
|
-----BEGIN CERTIFICATE-----
|
|
@@ -2955,3 +2856,95 @@ CgYIKoZIzj0EAwQDgYsAMIGHAkIBLdqu9S54tma4n7Zwf2Z0z+yOfP7AAXmazlIC58PRDHpty7Ve
|
|
|
2955
2856
|
7hekm9sEdu4pKeiv+62sUvTXK9Z3hBC9xdIoaDQCQTV2WnXzkoYI9bIeCvZlC9p2x1L/Cx6AcCIw
|
|
2956
2857
|
wzPbGO2E14vs7dOoY4G1VnxHx1YwlGhza9IuqbnZLBwpvQy6uWWL
|
|
2957
2858
|
-----END CERTIFICATE-----
|
|
2859
|
+
|
|
2860
|
+
SECOM TLS RSA Root CA 2024
|
|
2861
|
+
==========================
|
|
2862
|
+
-----BEGIN CERTIFICATE-----
|
|
2863
|
+
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
|
|
2888
|
+
MLAh+wwKZfqb94nMeQ==
|
|
2889
|
+
-----END CERTIFICATE-----
|
|
2890
|
+
|
|
2891
|
+
SECOM TLS ECC Root CA 2024
|
|
2892
|
+
==========================
|
|
2893
|
+
-----BEGIN CERTIFICATE-----
|
|
2894
|
+
MIICTDCCAdGgAwIBAgIJAIF6LO+PI3pEMAoGCCqGSM49BAMDMFoxCzAJBgNVBAYTAkpQMSYwJAYD
|
|
2895
|
+
VQQKEx1TRUNPTSBUcnVzdCBTeXN0ZW1zIENvLiwgTHRkLjEjMCEGA1UEAxMaU0VDT00gVExTIEVD
|
|
2896
|
+
QyBSb290IENBIDIwMjQwHhcNMjQwMTMxMDU1MjM0WhcNNDkwMTE0MDU1MjM0WjBaMQswCQYDVQQG
|
|
2897
|
+
EwJKUDEmMCQGA1UEChMdU0VDT00gVHJ1c3QgU3lzdGVtcyBDby4sIEx0ZC4xIzAhBgNVBAMTGlNF
|
|
2898
|
+
Q09NIFRMUyBFQ0MgUm9vdCBDQSAyMDI0MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE7NzFMtu9dzQX
|
|
2899
|
+
SNC12fabk0+GlC5finB3R7XaZonRUd20aFiWObtuNBCLUZSfk6QXAE55BjEXsXQ/NG8yUqicXjsu
|
|
2900
|
+
9ksDK3JZBgCwLOVh6+nwJXTvso/dEj/GUYH5mBdoo2MwYTAdBgNVHQ4EFgQUO3YReyl04k4GTFaC
|
|
2901
|
+
QNAhL3qzydUwHwYDVR0jBBgwFoAUO3YReyl04k4GTFaCQNAhL3qzydUwDgYDVR0PAQH/BAQDAgEG
|
|
2902
|
+
MA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwMDaQAwZgIxAN3ib8fi1pMYtAPjMilB5e5/H+t5
|
|
2903
|
+
CL0xPL+cZ5oTTZuSCjpAn1v7F/VAr8bFxQXAowIxAKsBVO1ACFp7skwzPvdv1EUY5a897WGLT4lb
|
|
2904
|
+
+bjxFAWyl8wDcZJdwGZ/pAHxt1AJ1g==
|
|
2905
|
+
-----END CERTIFICATE-----
|
|
2906
|
+
|
|
2907
|
+
Telia EC TLS Root CA v3
|
|
2908
|
+
=======================
|
|
2909
|
+
-----BEGIN CERTIFICATE-----
|
|
2910
|
+
MIICMjCCAbegAwIBAgIPAYvSIlRjTQSLbOVHH9K1MAoGCCqGSM49BAMDMEoxCzAJBgNVBAYTAlNF
|
|
2911
|
+
MRkwFwYDVQQKDBBUZWxpYSBDb21wYW55IEFCMSAwHgYDVQQDDBdUZWxpYSBFQyBUTFMgUm9vdCBD
|
|
2912
|
+
QSB2MzAeFw0yMzExMTUwODU1MjZaFw00ODA1MjMxMTAwMDBaMEoxCzAJBgNVBAYTAlNFMRkwFwYD
|
|
2913
|
+
VQQKDBBUZWxpYSBDb21wYW55IEFCMSAwHgYDVQQDDBdUZWxpYSBFQyBUTFMgUm9vdCBDQSB2MzB2
|
|
2914
|
+
MBAGByqGSM49AgEGBSuBBAAiA2IABMHIlhVDLbmFKUpW0iK4dpryT6emYOeS31JPwWnWPmkWRrAk
|
|
2915
|
+
TbPX40sQfHI9mpR7Rbktu3ngg6W+BBSXSechtMCnBmWXj/EaVlmV5cY1jD2HoTfhBQ3AacpCNMLJ
|
|
2916
|
+
K4NpZaNjMGEwHwYDVR0jBBgwFoAU1GToQ4g6cy/QGnGCNgtehd7H3kMwHQYDVR0OBBYEFNRk6EOI
|
|
2917
|
+
OnMv0BpxgjYLXoXex95DMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MAoGCCqGSM49
|
|
2918
|
+
BAMDA2kAMGYCMQCXAUdS/9bbJ8A1JYaGf/bWt/s7Ta0ot5Ulno8OjSNYRWQIlS4tVWldvTAVA7he
|
|
2919
|
+
OFgCMQCvKr8+Z2Rn+OBr5UHzlgBObpad1LuwNTRcdNgUJxIWadcki+UBLEi1/AURKV5md2M=
|
|
2920
|
+
-----END CERTIFICATE-----
|
|
2921
|
+
|
|
2922
|
+
Telia RSA TLS Root CA v3
|
|
2923
|
+
========================
|
|
2924
|
+
-----BEGIN CERTIFICATE-----
|
|
2925
|
+
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
|
|
2950
|
+
-----END CERTIFICATE-----
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
f66dff1bdf8f96060b8177976f8b7d9254bc89bc4db933d769f7384d28480bc9 cacert.pem
|
|
@@ -65,6 +65,8 @@
|
|
|
65
65
|
#include <asio/execution_context.hpp>
|
|
66
66
|
#include <asio/post.hpp>
|
|
67
67
|
|
|
68
|
+
#include <gsl/assert>
|
|
69
|
+
|
|
68
70
|
#include <functional>
|
|
69
71
|
#include <future>
|
|
70
72
|
#include <memory>
|
|
@@ -414,19 +416,110 @@ public:
|
|
|
414
416
|
|
|
415
417
|
void notify_fork(fork_event event)
|
|
416
418
|
{
|
|
419
|
+
// asio requires notify_fork() to run with no thread inside io_context::run():
|
|
420
|
+
//
|
|
421
|
+
// "This function must not be called while any other execution_context
|
|
422
|
+
// function, or any function on an I/O object associated with the
|
|
423
|
+
// execution_context, is being called in another thread."
|
|
424
|
+
// -- asio/execution_context.hpp
|
|
425
|
+
//
|
|
426
|
+
// That is not a formality for fork_child: epoll_reactor::notify_fork() closes
|
|
427
|
+
// and recreates epoll_fd_, timer_fd_ and the interrupter, then rewrites every
|
|
428
|
+
// descriptor registration. Running it against a live reactor makes the IO
|
|
429
|
+
// thread epoll_wait() on a descriptor another thread is closing, and then
|
|
430
|
+
// dereference whatever epoll reports as a descriptor_state.
|
|
431
|
+
//
|
|
432
|
+
// So the fixup goes in the window where the IO thread is not running: after
|
|
433
|
+
// the join in fork_prepare, and before the restart that starts the new one.
|
|
417
434
|
if (event == fork_event::prepare) {
|
|
435
|
+
// Quiesce the transactions cleanup threads BEFORE stopping the io_context.
|
|
436
|
+
// transactions_cleanup::stop() joins workers that may be blocking on a KV
|
|
437
|
+
// operation, and only the IO thread can complete those -- so stopping the
|
|
438
|
+
// io_context first can leave that join waiting forever.
|
|
439
|
+
if (transactions_) {
|
|
440
|
+
transactions_->notify_fork(event);
|
|
441
|
+
}
|
|
418
442
|
io_.stop();
|
|
419
|
-
|
|
443
|
+
// Guarded like do_close() below, and for the same reason: close() already
|
|
444
|
+
// stopped the io_context and joined this thread, so a notify_fork(prepare)
|
|
445
|
+
// afterwards has nothing left to join -- and join() on a thread that is not
|
|
446
|
+
// joinable throws std::system_error, out of a void public API.
|
|
447
|
+
if (io_thread_.joinable()) {
|
|
448
|
+
io_thread_.join();
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Our own IO thread is gone at this point, checkable in program order
|
|
453
|
+
// rather than only by a sanitizer: fork_prepare has just joined it, and
|
|
454
|
+
// fork_child/fork_parent inherit an already-joined one, because prepare runs
|
|
455
|
+
// before fork() and only the forking thread survives into the child. If a
|
|
456
|
+
// later change moves the restart back above this line, this fires
|
|
457
|
+
// immediately instead of turning into an intermittent use-after-free.
|
|
458
|
+
//
|
|
459
|
+
// The transactions cleanup threads were stopped above, before io_.stop(), so
|
|
460
|
+
// by here the only threads this cluster owned are gone.
|
|
461
|
+
Expects(!io_thread_.joinable());
|
|
462
|
+
|
|
463
|
+
if (event == fork_event::prepare) {
|
|
464
|
+
try {
|
|
465
|
+
io_.notify_fork(fork_event_to_asio(event));
|
|
466
|
+
} catch (...) {
|
|
467
|
+
// Undo everything this prepare did, then report. Returning stopped and threadless
|
|
468
|
+
// would hang ~cluster_impl, which waits on a completion only the IO thread can
|
|
469
|
+
// deliver -- the same hazard as the fork_child/fork_parent path below. The fork
|
|
470
|
+
// must not go ahead, but the cluster stays usable and destructible.
|
|
471
|
+
//
|
|
472
|
+
// The io_context comes back first: restarting cleanup spawns workers that issue KV
|
|
473
|
+
// operations, and only the IO thread completes those. Restoring cleanup matters as
|
|
474
|
+
// much as restoring the thread -- it was stopped above, and leaving it stopped
|
|
475
|
+
// would silently disable lost-attempts cleanup for the rest of the process while
|
|
476
|
+
// this function claimed the cluster was fine.
|
|
477
|
+
//
|
|
478
|
+
// Note for the caller: do not try to compensate by calling notify_fork(parent)
|
|
479
|
+
// after this throws. Prepare has already been undone here, and that call would
|
|
480
|
+
// find a restarted IO thread and trip the precondition above.
|
|
481
|
+
io_.restart();
|
|
482
|
+
io_thread_ = std::thread{ [&io = io_] {
|
|
483
|
+
io.run();
|
|
484
|
+
} };
|
|
485
|
+
if (transactions_) {
|
|
486
|
+
transactions_->notify_fork(fork_event::parent);
|
|
487
|
+
}
|
|
488
|
+
throw;
|
|
489
|
+
}
|
|
420
490
|
} else {
|
|
421
|
-
// TODO(
|
|
491
|
+
// TODO(CXXCBC-913): disown this cluster's sockets here, instead of leaving it to the
|
|
492
|
+
// reconnect. epoll_reactor::notify_fork(fork_child) below re-registers every
|
|
493
|
+
// descriptor inherited from the parent into the child's new epoll instance, so
|
|
494
|
+
// from here until those sockets are closed the child polls file descriptions the
|
|
495
|
+
// parent is still using. Closing them is at least no longer destructive -- see
|
|
496
|
+
// stream_impl::close(), which detaches a socket it did not open rather than
|
|
497
|
+
// shutting it down -- but it happens on the reconnect path, asynchronously, and
|
|
498
|
+
// only once the replaced impl is destroyed.
|
|
422
499
|
io_.restart();
|
|
500
|
+
try {
|
|
501
|
+
io_.notify_fork(fork_event_to_asio(event));
|
|
502
|
+
} catch (...) {
|
|
503
|
+
// notify_fork() throws if re-registering a descriptor with the new
|
|
504
|
+
// epoll instance fails. The io_context is unusable after that (asio says
|
|
505
|
+
// to destroy it), but destruction itself needs a runner: do_close()
|
|
506
|
+
// waits on a completion only the IO thread can deliver, so returning
|
|
507
|
+
// from here stopped and threadless would hang ~cluster_impl instead of
|
|
508
|
+
// surfacing the failure.
|
|
509
|
+
io_thread_ = std::thread{ [&io = io_] {
|
|
510
|
+
io.run();
|
|
511
|
+
} };
|
|
512
|
+
throw;
|
|
513
|
+
}
|
|
423
514
|
io_thread_ = std::thread{ [&io = io_] {
|
|
424
515
|
io.run();
|
|
425
516
|
} };
|
|
426
517
|
}
|
|
427
|
-
io_.notify_fork(fork_event_to_asio(event));
|
|
428
518
|
|
|
429
|
-
|
|
519
|
+
// prepare was handled above, before the io_context was stopped. The child does
|
|
520
|
+
// not restart cleanup on this impl: it is about to be replaced, and the
|
|
521
|
+
// replacement starts its own.
|
|
522
|
+
if (event == fork_event::parent && transactions_) {
|
|
430
523
|
transactions_->notify_fork(event);
|
|
431
524
|
}
|
|
432
525
|
}
|
|
@@ -640,6 +733,16 @@ cluster::connect(const std::string& connection_string,
|
|
|
640
733
|
auto
|
|
641
734
|
cluster::notify_fork(fork_event event) -> void
|
|
642
735
|
{
|
|
736
|
+
#if defined(_WIN32)
|
|
737
|
+
// No fork(2) on Windows, so there is nothing to prepare for or recover from.
|
|
738
|
+
// The function stays part of the API on every platform -- callers, the wrapper
|
|
739
|
+
// SDKs especially, should not have to compile differently per platform -- but
|
|
740
|
+
// here it does nothing. Doing the POSIX work instead would stop and restart the
|
|
741
|
+
// io_context and re-bootstrap the cluster for no reason, and asio's IOCP
|
|
742
|
+
// backend has no notify_fork to apply either.
|
|
743
|
+
(void)event;
|
|
744
|
+
return;
|
|
745
|
+
#else
|
|
643
746
|
if (!impl_) {
|
|
644
747
|
return;
|
|
645
748
|
}
|
|
@@ -659,14 +762,24 @@ cluster::notify_fork(fork_event event) -> void
|
|
|
659
762
|
if (err.ec()) {
|
|
660
763
|
// TODO(SA): we should fall to background reconnect loop similar to Columnar build
|
|
661
764
|
CB_LOG_ERROR("Unable to reconnect instance after fork: {}", err.ec().message());
|
|
662
|
-
return;
|
|
663
765
|
}
|
|
766
|
+
// Adopt the new impl either way. Leaving impl_ null on failure turned the
|
|
767
|
+
// child's next operation into a segfault, because every data-plane method
|
|
768
|
+
// dereferences impl_ unchecked; an impl that failed to open reports
|
|
769
|
+
// errc::network::cluster_closed instead, which is what a caller already gets
|
|
770
|
+
// from a handle it acquired before the fork.
|
|
664
771
|
impl_ = new_impl;
|
|
772
|
+
// Always fulfill the barrier. Returning early here used to hang this
|
|
773
|
+
// function forever: `barrier` is still owned by the enclosing scope below,
|
|
774
|
+
// so the promise is never destroyed and future.get() never sees a
|
|
775
|
+
// broken_promise either -- a failed post-fork reconnect just wedged the
|
|
776
|
+
// caller.
|
|
665
777
|
barrier->set_value();
|
|
666
778
|
});
|
|
667
779
|
|
|
668
780
|
future.get();
|
|
669
781
|
}
|
|
782
|
+
#endif
|
|
670
783
|
}
|
|
671
784
|
|
|
672
785
|
void
|
|
@@ -0,0 +1,67 @@
|
|
|
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
|
+
#include <optional>
|
|
21
|
+
#include <string>
|
|
22
|
+
|
|
23
|
+
namespace couchbase::core::io
|
|
24
|
+
{
|
|
25
|
+
/**
|
|
26
|
+
* Decide whether a freshly received cluster map belongs to this session and must
|
|
27
|
+
* therefore be accepted.
|
|
28
|
+
*
|
|
29
|
+
* A session's bucket binding is fixed for its entire lifetime (set once in the
|
|
30
|
+
* constructor, never reassigned), so the rule reduces to a single invariant:
|
|
31
|
+
* the bucket identity carried by the configuration must match the bucket identity
|
|
32
|
+
* of the session.
|
|
33
|
+
*
|
|
34
|
+
* - a cluster-level (bucket-less) session accepts only cluster-level configs;
|
|
35
|
+
* - a bucket-level session accepts only configs for *its own* bucket.
|
|
36
|
+
*
|
|
37
|
+
* @param config_bucket bucket name embedded in the configuration payload
|
|
38
|
+
* (std::nullopt => cluster-level / GCCCP config)
|
|
39
|
+
* @param session_bucket bucket this session is bound to
|
|
40
|
+
* (std::nullopt => cluster-level / GCCCP session)
|
|
41
|
+
* @return true if the configuration must be accepted, false if it must be ignored
|
|
42
|
+
*/
|
|
43
|
+
[[nodiscard]] inline auto
|
|
44
|
+
configuration_belongs_to_session(const std::optional<std::string>& config_bucket,
|
|
45
|
+
const std::optional<std::string>& session_bucket) -> bool
|
|
46
|
+
{
|
|
47
|
+
// Stage 1 — cluster-level config for a cluster-level session.
|
|
48
|
+
// Neither side names a bucket: this is a GCCCP (cluster) map and the session is
|
|
49
|
+
// not bound to any bucket, so the config belongs here. Accept.
|
|
50
|
+
if (!config_bucket.has_value() && !session_bucket.has_value()) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// Stage 2 — cardinality mismatch: exactly one side names a bucket. Reject.
|
|
55
|
+
// Either a bucket-less config arrived on a bucket-bound session, or a bucket
|
|
56
|
+
// config arrived on a cluster-level session. In both cases the config does not
|
|
57
|
+
// belong to this session.
|
|
58
|
+
if (config_bucket.has_value() != session_bucket.has_value()) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Stage 3 — both sides name a bucket: accept only if it is the *same* bucket.
|
|
63
|
+
// Reaching here guarantees both optionals are engaged, so value() is safe.
|
|
64
|
+
// Guards against applying another bucket's map to this session.
|
|
65
|
+
return config_bucket.value() == session_bucket.value();
|
|
66
|
+
}
|
|
67
|
+
} // namespace couchbase::core::io
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
#ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
|
|
23
23
|
#include "core/columnar/background_bootstrap_listener.hxx"
|
|
24
24
|
#endif
|
|
25
|
+
#include "configuration_belongs_to_session.hxx"
|
|
25
26
|
#include "core/config_listener.hxx"
|
|
26
27
|
#include "core/diagnostics.hxx"
|
|
27
28
|
#include "core/impl/bootstrap_error.hxx"
|
|
@@ -634,14 +635,9 @@ class mcbp_session_impl
|
|
|
634
635
|
}
|
|
635
636
|
}
|
|
636
637
|
std::optional<topology::configuration> config = req.body().config();
|
|
637
|
-
if (session_ && config.has_value()
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
// TODO(CXXCBC-549)
|
|
641
|
-
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
642
|
-
session_->bucket_name_.value() == req.body().bucket())) {
|
|
643
|
-
session_->update_configuration(std::move(config.value()));
|
|
644
|
-
}
|
|
638
|
+
if (session_ && config.has_value() &&
|
|
639
|
+
configuration_belongs_to_session(config->bucket, session_->bucket_name_)) {
|
|
640
|
+
session_->update_configuration(std::move(config.value()));
|
|
645
641
|
}
|
|
646
642
|
} break;
|
|
647
643
|
default:
|
|
@@ -824,14 +820,9 @@ class mcbp_session_impl
|
|
|
824
820
|
}
|
|
825
821
|
}
|
|
826
822
|
std::optional<topology::configuration> config = req.body().config();
|
|
827
|
-
if (session_ && config.has_value()
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
// TODO(CXXCBC-549)
|
|
831
|
-
// NOLINTNEXTLINE(bugprone-unchecked-optional-access)
|
|
832
|
-
session_->bucket_name_.value() == req.body().bucket())) {
|
|
833
|
-
session_->update_configuration(std::move(config.value()));
|
|
834
|
-
}
|
|
823
|
+
if (session_ && config.has_value() &&
|
|
824
|
+
configuration_belongs_to_session(config->bucket, session_->bucket_name_)) {
|
|
825
|
+
session_->update_configuration(std::move(config.value()));
|
|
835
826
|
}
|
|
836
827
|
} break;
|
|
837
828
|
default:
|