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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fbb98c4aa181b040acdc62e785326b4b8936ed2bc8e9b14f0c7266b327ce4eb0
4
- data.tar.gz: 135d823382c9751150329e77e496e2a587a3d988844d5891e9510a8d986e32e8
3
+ metadata.gz: 4ba376c24afbb895629c0ca2c33e59ac8d45dae4c196ab87bedb5e0d415867ea
4
+ data.tar.gz: 68af1ad4535c8b4eb90160c867335fd665b8069f2e8322718d8a43575dacbb6f
5
5
  SHA512:
6
- metadata.gz: 37e01b547103e82da0e9712a292959731ca77039b14e55fd4a5ff7b5273da4442f1af8f1d25c18fa101dcca45fb328495525d871a9dbf071c319b4fa1489424e
7
- data.tar.gz: 4bc55960dfcaca68decfdc326d72c96056a63408ef41c4a4c19ddacd32c5d82509e0e8f4e3c59b2d68e63629fd48aa60987dd7d1cd319f73759743da341f0832
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, please file it in [our JIRA issue tracker](https://jira.issues.couchbase.com/browse/RCBC). Also you are
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.1"
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=2c61cd44005215cde1147b4f63461c378f23b3c7"
7
- cmake_flags << "-DCOUCHBASE_CXX_CLIENT_GIT_REVISION=49d3be2fc0fcde4118e2b720b6041bbbd9c87420"
8
- cmake_flags << "-DCOUCHBASE_CXX_CLIENT_GIT_DESCRIBE=1.3.2-0-g49d3be2f"
9
- cmake_flags << "-DCOUCHBASE_CXX_CLIENT_BUILD_TIMESTAMP=2026-06-02T16:50:29"
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 May 14 03:12:02 2026 GMT
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
- ## Just configure this file as the SSLCACertificateFile.
16
+ ## Configure this file as the SSLCACertificateFile.
17
17
  ##
18
18
  ## Conversion done with mk-ca-bundle.pl version 1.33.
19
- ## SHA256: 77130ef91213772844561fbd3aa31d413b25c2ac7f576fea3bc3bbff7ef93489
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
- MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
70
- 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
- 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
- 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
- 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
- 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
- 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
- lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
77
- qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
78
- 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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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
- 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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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
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
- 86a1f3366afac7c6f8ae9f3c779ac221129328c43f0ab2b8817eb2f362a5025c cacert.pem
1
+ f66dff1bdf8f96060b8177976f8b7d9254bc89bc4db933d769f7384d28480bc9 cacert.pem
@@ -21,7 +21,7 @@ endif()
21
21
 
22
22
  project(
23
23
  couchbase_cxx_client
24
- VERSION "1.3.2"
24
+ VERSION "1.3.3"
25
25
  LANGUAGES CXX C)
26
26
  message(
27
27
  STATUS
@@ -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
- io_thread_.join();
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(SA): close all sockets in fork_event::child
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
- if (event != fork_event::child && transactions_) {
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
- if ((!config->bucket.has_value() && req.body().bucket().empty()) ||
639
- (session_->bucket_name_.has_value() && !req.body().bucket().empty() &&
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
- if ((!config->bucket.has_value() && req.body().bucket().empty()) ||
829
- (session_->bucket_name_.has_value() && !req.body().bucket().empty() &&
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: