From 5a8e5f5071de4ac0520d97670eca3e38f172a2e4 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Mon, 11 Dec 2023 15:43:38 +0000 Subject: [PATCH 01/29] 3.5 prep --- antora.yml | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/antora.yml b/antora.yml index 554cbf51..e985783e 100644 --- a/antora.yml +++ b/antora.yml @@ -4,4 +4,18 @@ title: ".NET SDK" start_page: hello-world:overview.adoc nav: - modules/ROOT/nav.adoc -server_version: '7.1' +asciidoc: + attributes: + page-nav-header-levels: 1 + server_version: '7.6' + sdk_current_version: '3.5.0' + sdk_dot_minor: '3.5' + sdk_dot_major: '3.x' + version-server: '7.6' + version-common: '7.5' + name_platform: '.NET' + name-sdk: '.NET SDK' + sdk_api: '3.5' + sdk-api-link: https://docs.couchbase.com/sdk-api/couchbase-net-client/ + sdk-gh-link: https://github.com/couchbase/couchbase-net-client/ + From 15f82f5ae23d58d06e331b85ab09a18001fd2921 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Mon, 11 Dec 2023 15:44:32 +0000 Subject: [PATCH 02/29] 3.4 --> 3.5 --- antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora.yml b/antora.yml index e985783e..014ccadc 100644 --- a/antora.yml +++ b/antora.yml @@ -1,5 +1,5 @@ name: dotnet-sdk -version: '3.4' +version: '3.5' title: ".NET SDK" start_page: hello-world:overview.adoc nav: From 34077b356c461fb7d74409196face2410a6b22b2 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Tue, 12 Dec 2023 17:01:57 +0000 Subject: [PATCH 03/29] Back to 3.4 API for CNG release --- antora.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/antora.yml b/antora.yml index 014ccadc..49866639 100644 --- a/antora.yml +++ b/antora.yml @@ -6,16 +6,15 @@ nav: - modules/ROOT/nav.adoc asciidoc: attributes: - page-nav-header-levels: 1 - server_version: '7.6' + server_version: '7.2' sdk_current_version: '3.5.0' - sdk_dot_minor: '3.5' - sdk_dot_major: '3.x' - version-server: '7.6' - version-common: '7.5' + sdk_dot_minor: 3.5 + sdk_dot_major: 3.x + version-server: '7.2' + version-common: '7.2' name_platform: '.NET' name-sdk: '.NET SDK' - sdk_api: '3.5' + sdk_api: '3.4' sdk-api-link: https://docs.couchbase.com/sdk-api/couchbase-net-client/ sdk-gh-link: https://github.com/couchbase/couchbase-net-client/ From b7a5abfb9170efbc657c7c8eb05a5f2a6f990137 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Tue, 12 Dec 2023 17:23:37 +0000 Subject: [PATCH 04/29] Updates carried forward From https://github.com/couchbase/docs-sdk-dotnet/pull/310/ --- modules/project-docs/pages/compatibility.adoc | 40 ++++++++----------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/modules/project-docs/pages/compatibility.adoc b/modules/project-docs/pages/compatibility.adoc index fecc31bb..70a082eb 100644 --- a/modules/project-docs/pages/compatibility.adoc +++ b/modules/project-docs/pages/compatibility.adoc @@ -45,7 +45,9 @@ See the notes there for Support details. === Capella Compatibility The Couchbase .NET SDK is fully compatible with Couchbase Capella, our fully-hosted database-as-a-service. -To make development easier, the SDK includes the Capella client certificate ready installed. +To make development easier, the SDK includes the Capella client certificate ready installed for .NET 6.0 and later clients. +However, for clients using .NET Framework, the Capella certificate must be manually installed in the local machine's certificate store, as the API necessary for in-memory certificates isn't available under the legacy framework. + include::{version-common}@sdk:shared:partial$capella.adoc[tag=cloud] @@ -76,7 +78,7 @@ Microsoft Windows 10 / All LTS releases from Windows Server 2016. The current and previous two releases of OS X. At time of writing (October 2022): 13 (Ventura), 12 (Monterey), and 11 (Big Sur). -M1 ARM architecture is fully supported in the .NET SDK. +M1 ARM architecture is fully supported in the .NET SDK as of .NET 6.0. **** Although installable or compilable on many other platforms, we cannot provide support for untested combinations. @@ -92,7 +94,7 @@ AWS Amazon Graviton2, Apple M1 ARM processors, and ARMv8 on Ubuntu 20.04 (from S [.table-merge-cells] [cols="7,5,6,5"] |=== -| | Server 6.6 | Server 7.0 | Server 7.1 +| | Server 6.6 | Server 7.0 | Server 7.1 - 7.2 | Enhanced Durability 3+| All SDK versions @@ -129,14 +131,9 @@ include::hello-world:partial$supported.adoc[] [#table_sdk_versions] [cols="40,20,25,20"] |=== -| | SDK 3.0, 3.1 | SDK 3.2 | SDK 3.3, 3.4 - -| .NET Core 3.1 (Long Term Support) -| *✔* -| *✔* -| *✔* +| | SDK 3.0 - 3.3 | SDK 3.4 | SDK 3.5 -| .NET 5.0, 6.0 (Recommended) +| .NET 6.0 (Recommended, Long-Term Support) | *✔* | *✔* | *✔* @@ -151,24 +148,19 @@ include::hello-world:partial$supported.adoc[] | *✔* | *✔* -| .NET Core 2.0, 2.1, 2.2, 3.0 -| *◎* -| *◎* + -except *✖* 2.0, 2.1 xref:project-docs:sdk-release-notes.adoc#version-3-2-5-10-december-2021[from 3.2.5] -| *◎* + -except *✖* 2.0, 2.1 xref:project-docs:sdk-release-notes.adoc#version-3-2-5-10-december-2021[from 3.2.5] +|=== -| .NET Core 1.0, 1.1 -| *✖* -| *✖* -| *✖* -| .NET Framework 4.5.x, 4.6.0, 4.6.1 -| *✖* -| *✖* + +//// +// To add after 3.4.14 release: +| .NET 8.0 (Long-Term Support) | *✖* +| *✔* From 3.4.14 +| *✔* +//// -|=== +// TODO - any outstanding improvements touched upon in https://github.com/couchbase/docs-sdk-dotnet/pull/310 From 9a09cfa132b27d932e97bdb7076b81b22379f27b Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Tue, 12 Dec 2023 17:25:25 +0000 Subject: [PATCH 05/29] framework + cert update ...ported forward from https://github.com/couchbase/docs-sdk-dotnet/pull/310 --- modules/howtos/pages/managing-connections.adoc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/howtos/pages/managing-connections.adoc b/modules/howtos/pages/managing-connections.adoc index 7de9c4d4..2e5322db 100644 --- a/modules/howtos/pages/managing-connections.adoc +++ b/modules/howtos/pages/managing-connections.adoc @@ -223,7 +223,9 @@ The .NET SDK bundles Capella’s standard root certificate by default. This means you don’t need any additional configuration to enable TLS -- simply use `couchbases://` in your connection string. NOTE: Capella's root certificate is *not* signed by a well known CA (Certificate Authority). -However, as the certificate is bundled with the SDK, it is trusted by default. +However, as the certificate is bundled with the SDK when using .NET 6.0 or later, it is trusted by default. +.NET Framework clients will have to add it to the Windows certificate store. + === Couchbase Server From 9caad9d0152907e878795b1ac95e8cf48128bec8 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Tue, 12 Dec 2023 17:27:19 +0000 Subject: [PATCH 06/29] framework tweaks ported forward from https://github.com/couchbase/docs-sdk-dotnet/pull/310 --- modules/hello-world/partials/supported.adoc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/hello-world/partials/supported.adoc b/modules/hello-world/partials/supported.adoc index 49e045e1..1e4e01ae 100644 --- a/modules/hello-world/partials/supported.adoc +++ b/modules/hello-world/partials/supported.adoc @@ -1,6 +1,7 @@ -The Couchbase .NET SDK is compatible with https://docs.microsoft.com/en-us/dotnet/standard/net-standard[.NET Standard] 2.0 and .NET Standard 2.1, which means that it's compatible with .NET Framework 4.6.2+, .NET 5.0, .NET 6.0, and .NET Core 3.1. +The Couchbase .NET SDK is compatible with https://docs.microsoft.com/en-us/dotnet/standard/net-standard[.NET Standard] 2.0 and .NET Standard 2.1, via the currently supported Microsoft .NET SDKs. +Currently, that includes https://dotnet.microsoft.com/en-us/platform/support/policy/dotnet-core[.NET 6.0 and later] for .NET Standard 2.1 and https://learn.microsoft.com/en-us/lifecycle/products/microsoft-net-framework[.NET Framework 4.6.2 and later] for .NET Standard 2.0. The https://docs.microsoft.com/en-us/dotnet/standard/net-standard[.NET Standard documentation] and https://dotnet.microsoft.com/platform/dotnet-standard#versions[.NET Standard version chart] may be useful to help understand other available options. -Couchbase strongly recommends using the latest version of .NET that's officially supported by both Microsoft and Couchbase. +Couchbase strongly recommends using the https://versionsof.net/[latest LTS version of .NET that's officially supported] by both Microsoft and Couchbase. Other .NET implementations may work, but aren't tested, and are outside the scope of technical support. From 977e8ffb4f4337bb7dcaded906cf464e8dc363e7 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Wed, 20 Dec 2023 20:11:13 +0000 Subject: [PATCH 07/29] Update compatibility.adoc --- modules/project-docs/pages/compatibility.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/project-docs/pages/compatibility.adoc b/modules/project-docs/pages/compatibility.adoc index 70a082eb..891d57ba 100644 --- a/modules/project-docs/pages/compatibility.adoc +++ b/modules/project-docs/pages/compatibility.adoc @@ -64,7 +64,7 @@ The Couchbase .NET SDK is tested and supported on the following platforms: * Amazon Linux 2. * Red Hat Enterprise Linux 7 & 8; * CentOS 7 & 8. -* Ubuntu (LTS) 16.04 (_Xenial_), 18.04 (_Bionic_), & 20.04 (_Focal_). +* Ubuntu (LTS): 16.04 (_Xenial_), 18.04 (_Bionic_), 20.04 (_Focal_), & 22.04 (_Jammy_). * Debian 9 (_Stretch_) & 10 (_Buster_). * Alpine Linux From 4fc9bc96e0bd9514195f35bf161f6d8acb3a939a Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 21 Dec 2023 11:43:19 +0000 Subject: [PATCH 08/29] Rename durability-error-handling-from-the-sdk.adoc to ...durability-error-handling-from-the-sdk.adoc Ghost page removal --- ...he-sdk.adoc => ...durability-error-handling-from-the-sdk.adoc} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename modules/howtos/pages/{durability-error-handling-from-the-sdk.adoc => ...durability-error-handling-from-the-sdk.adoc} (100%) diff --git a/modules/howtos/pages/durability-error-handling-from-the-sdk.adoc b/modules/howtos/pages/...durability-error-handling-from-the-sdk.adoc similarity index 100% rename from modules/howtos/pages/durability-error-handling-from-the-sdk.adoc rename to modules/howtos/pages/...durability-error-handling-from-the-sdk.adoc From a5bec66cfa3d1ac6042bfc3baa2fdbe75d8657c7 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Fri, 22 Dec 2023 18:55:55 +0000 Subject: [PATCH 09/29] .NET 8.0 --- modules/project-docs/pages/compatibility.adoc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/project-docs/pages/compatibility.adoc b/modules/project-docs/pages/compatibility.adoc index 891d57ba..03be0c32 100644 --- a/modules/project-docs/pages/compatibility.adoc +++ b/modules/project-docs/pages/compatibility.adoc @@ -133,7 +133,7 @@ include::hello-world:partial$supported.adoc[] |=== | | SDK 3.0 - 3.3 | SDK 3.4 | SDK 3.5 -| .NET 6.0 (Recommended, Long-Term Support) +| .NET 6.0 (Long-Term Support) | *✔* | *✔* | *✔* @@ -143,6 +143,11 @@ include::hello-world:partial$supported.adoc[] | *✖* | *✖* +| .NET 8.0 (Recommended, Long-Term Support) +| *✖* +| *✔* From 3.4.14 +| *✔* + | .NET Framework 4.6.2+ | *✔* | *✔* From 4bde85db96701d1bedb5d9ba83eef9ceebef4e08 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Mon, 15 Jan 2024 17:52:09 +0000 Subject: [PATCH 10/29] 3.5 API --- antora.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/antora.yml b/antora.yml index 49866639..2015f634 100644 --- a/antora.yml +++ b/antora.yml @@ -14,7 +14,7 @@ asciidoc: version-common: '7.2' name_platform: '.NET' name-sdk: '.NET SDK' - sdk_api: '3.4' + sdk_api: '3.5' sdk-api-link: https://docs.couchbase.com/sdk-api/couchbase-net-client/ sdk-gh-link: https://github.com/couchbase/couchbase-net-client/ From 946981443e5a17edc81e229144720ad55cb96c31 Mon Sep 17 00:00:00 2001 From: Jeffry Morris Date: Tue, 27 Feb 2024 05:17:15 -0800 Subject: [PATCH 11/29] Gardening2 (#319) * NCBC-3653: Document that IGetResult.Dispose should be called Motivation ---------- The documentation should explain why Dispose should be called, which operations are effected and the example code should also do this. * Gardening * gardening part duex --------- Co-authored-by: Richard Smedley --- modules/devguide/examples/dotnet/Cas.cs | 4 +- .../devguide/examples/dotnet/Cloud/Cloud.cs | 16 +++++--- .../devguide/examples/dotnet/CloudConnect.cs | 2 +- .../examples/dotnet/CouchbaseCloud.cs | 2 +- .../devguide/examples/dotnet/DevGuide.csproj | 4 +- modules/devguide/examples/dotnet/Retrieve.cs | 6 +-- .../devguide/examples/dotnet/SyncExample.cs | 2 +- modules/devguide/examples/dotnet/Update.cs | 2 +- .../howtos/examples/EncryptingUsingSdk.csx | 4 +- modules/howtos/examples/ErrorHandling.csx | 8 ++-- modules/howtos/examples/KvOperations.csx | 2 +- modules/howtos/examples/SubDocument.csx | 4 +- modules/howtos/examples/Transcoding.csx | 12 +++--- .../howtos/examples/UserManagementExample.csx | 4 +- modules/project-docs/pages/performance.adoc | 41 +++++++++++++++---- 15 files changed, 71 insertions(+), 42 deletions(-) diff --git a/modules/devguide/examples/dotnet/Cas.cs b/modules/devguide/examples/dotnet/Cas.cs index 13404399..c9200d92 100644 --- a/modules/devguide/examples/dotnet/Cas.cs +++ b/modules/devguide/examples/dotnet/Cas.cs @@ -28,7 +28,7 @@ public override async Task ExecuteAsync() await Task.WhenAll(tasksWithoutCas).ConfigureAwait(false); // Check if the actual result is 1000 as expected - var result = await Bucket.DefaultCollection().GetAsync(key).ConfigureAwait(false); + using var result = await Bucket.DefaultCollection().GetAsync(key).ConfigureAwait(false); Console.WriteLine("Expected number = 1000, actual number = " + result.ContentAs().Number); // Set the initial number value back to 0 @@ -39,7 +39,7 @@ public override async Task ExecuteAsync() await Task.WhenAll(tasksWithCas).ConfigureAwait(false); // Check if the actual result is 1000 as expected - var result2 = await Bucket.DefaultCollection().GetAsync(key).ConfigureAwait(false); + using var result2 = await Bucket.DefaultCollection().GetAsync(key).ConfigureAwait(false); Console.WriteLine("Expected number = 1000, actual number = " + result2.ContentAs().Number); } diff --git a/modules/devguide/examples/dotnet/Cloud/Cloud.cs b/modules/devguide/examples/dotnet/Cloud/Cloud.cs index a51a7117..716dbe7f 100644 --- a/modules/devguide/examples/dotnet/Cloud/Cloud.cs +++ b/modules/devguide/examples/dotnet/Cloud/Cloud.cs @@ -1,10 +1,16 @@ using System; -// #tag::using[] using System.Threading.Tasks; -using Couchbase; + +namespace Couchbase.Net.DevGuide.Cloud; // #end::using[] -await new CloudExample().Main(); +public class Progam +{ + public static async Task Main(string[] args) + { + await new CloudExample().Main(); + } +} class CloudExample { @@ -44,7 +50,7 @@ public async Task Main() // #tag::upsert-get[] // Upsert Document var upsertResult = await collection.UpsertAsync("my-document-key", new { Name = "Ted", Age = 31 }); - var getResult = await collection.GetAsync("my-document-key"); + using var getResult = await collection.GetAsync("my-document-key"); Console.WriteLine(getResult.ContentAs()); // #end::upsert-get[] @@ -60,4 +66,4 @@ public async Task Main() } // end::n1ql-query[] } -} +} \ No newline at end of file diff --git a/modules/devguide/examples/dotnet/CloudConnect.cs b/modules/devguide/examples/dotnet/CloudConnect.cs index 50498784..07529a28 100644 --- a/modules/devguide/examples/dotnet/CloudConnect.cs +++ b/modules/devguide/examples/dotnet/CloudConnect.cs @@ -44,7 +44,7 @@ static async Task Main(string[] args) }); // Load the Document and print it - var getResult = await collection.GetAsync("king_arthur"); + using var getResult = await collection.GetAsync("king_arthur"); Console.WriteLine(getResult.ContentAs()); // Perform a N1QL Query diff --git a/modules/devguide/examples/dotnet/CouchbaseCloud.cs b/modules/devguide/examples/dotnet/CouchbaseCloud.cs index db397e0d..6331dd02 100644 --- a/modules/devguide/examples/dotnet/CouchbaseCloud.cs +++ b/modules/devguide/examples/dotnet/CouchbaseCloud.cs @@ -35,7 +35,7 @@ private static void Main2(string[] args) private async Task RunTest() { - var getResult = await collection.GetAsync("airline_5209").ConfigureAwait(false); + using var getResult = await collection.GetAsync("airline_5209").ConfigureAwait(false); var docContent = getResult.ContentAs(); Console.WriteLine($"The airline is {docContent.name}."); diff --git a/modules/devguide/examples/dotnet/DevGuide.csproj b/modules/devguide/examples/dotnet/DevGuide.csproj index 89976e56..f91bde9b 100644 --- a/modules/devguide/examples/dotnet/DevGuide.csproj +++ b/modules/devguide/examples/dotnet/DevGuide.csproj @@ -1,7 +1,7 @@ Exe - netcoreapp5.0 + .net6 Couchbase.Net.DevGuide Couchbase.Net.DevGuide.Program @@ -11,7 +11,7 @@ - + diff --git a/modules/devguide/examples/dotnet/Retrieve.cs b/modules/devguide/examples/dotnet/Retrieve.cs index dba0161f..c580f23d 100644 --- a/modules/devguide/examples/dotnet/Retrieve.cs +++ b/modules/devguide/examples/dotnet/Retrieve.cs @@ -25,7 +25,7 @@ public override async Task ExecuteAsync() // Get non-existent document. // Note that it's enough to check the Status property, // We're only checking all three to show they exist. - await collection.GetAsync(key).ConfigureAwait(false); + using var result = await collection.GetAsync(key).ConfigureAwait(false); } catch (DocumentNotFoundException) { @@ -36,14 +36,14 @@ public override async Task ExecuteAsync() await collection.UpsertAsync(key, "Hello Couchbase!").ConfigureAwait(false); // Get a string value - var nonDocResult = await collection.GetAsync(key).ConfigureAwait(false); + using var nonDocResult = await collection.GetAsync(key).ConfigureAwait(false); Console.WriteLine("Found: " + nonDocResult.ContentAs()); // Prepare a JSON document value await collection.UpsertAsync(key, data).ConfigureAwait(false); // Get a JSON document string value - var docResult = await collection.GetAsync(key).ConfigureAwait(false); + using var docResult = await collection.GetAsync(key).ConfigureAwait(false); Console.WriteLine("Found: " + docResult.ContentAs()); } diff --git a/modules/devguide/examples/dotnet/SyncExample.cs b/modules/devguide/examples/dotnet/SyncExample.cs index a2419e8c..2d765aea 100644 --- a/modules/devguide/examples/dotnet/SyncExample.cs +++ b/modules/devguide/examples/dotnet/SyncExample.cs @@ -32,7 +32,7 @@ public async Task PrintDocumentAsync(string id) Console.WriteLine("Before awaiting GetDocumentAsync on thread {0}.", Thread.CurrentThread.ManagedThreadId); - var doc = await Bucket.DefaultCollection().GetAsync(id).ConfigureAwait(false); + using var doc = await Bucket.DefaultCollection().GetAsync(id).ConfigureAwait(false); Console.WriteLine("After awaiting GetDocumentAsync on thread {0}.", Thread.CurrentThread.ManagedThreadId); diff --git a/modules/devguide/examples/dotnet/Update.cs b/modules/devguide/examples/dotnet/Update.cs index 5029316a..52ec84e2 100644 --- a/modules/devguide/examples/dotnet/Update.cs +++ b/modules/devguide/examples/dotnet/Update.cs @@ -46,7 +46,7 @@ public override async Task ExecuteAsync() // Check that the data was updated - var newDocument = await collection.GetAsync(key).ConfigureAwait(false); + using var newDocument = await collection.GetAsync(key).ConfigureAwait(false); Console.WriteLine("Got: " + newDocument.ContentAs()); } diff --git a/modules/howtos/examples/EncryptingUsingSdk.csx b/modules/howtos/examples/EncryptingUsingSdk.csx index 2da7611c..c4df328b 100644 --- a/modules/howtos/examples/EncryptingUsingSdk.csx +++ b/modules/howtos/examples/EncryptingUsingSdk.csx @@ -69,7 +69,7 @@ public class EncryptingUsingSdk .ConfigureAwait(false); // tag::encrypting_using_sdk_4[] - var getResult1 = await collection.GetAsync(id, options => options.Transcoder(encryptedTranscoder)) + using var getResult1 = await collection.GetAsync(id, options => options.Transcoder(encryptedTranscoder)) .ConfigureAwait(false); var encrypted = getResult1.ContentAs(); @@ -77,7 +77,7 @@ public class EncryptingUsingSdk // end::encrypting_using_sdk_4[] // tag::encrypting_using_sdk_5[] - var getResult2 = await collection.GetAsync(id, options => options.Transcoder(encryptedTranscoder)) + using var getResult2 = await collection.GetAsync(id, options => options.Transcoder(encryptedTranscoder)) .ConfigureAwait(false); var readItBack = getResult2.ContentAs(); diff --git a/modules/howtos/examples/ErrorHandling.csx b/modules/howtos/examples/ErrorHandling.csx index 45586042..efa2e639 100644 --- a/modules/howtos/examples/ErrorHandling.csx +++ b/modules/howtos/examples/ErrorHandling.csx @@ -43,11 +43,11 @@ public class ErrorHandling try { // tag::getfetch[] // This will raise a `CouchbaseException` and propagate it - var result = await collection.GetAsync("my-document-id"); + using var result1 = await collection.GetAsync("my-document-id"); // Rethrow with a custom exception type try { - await collection.GetAsync("my-document-id"); + using var result2 = await collection.GetAsync("my-document-id"); } catch (CouchbaseException ex) { throw new Exception("Couchbase lookup failed", ex); } @@ -61,7 +61,7 @@ public class ErrorHandling Console.WriteLine("[getcatch]"); // tag::getcatch[] try { - await collection.GetAsync("my-document-id"); + using var result = await collection.GetAsync("my-document-id"); } catch (DocumentNotFoundException) { await collection.InsertAsync("my-document-id", new {my ="value"}); } catch (CouchbaseException ex) { @@ -100,7 +100,7 @@ public class ErrorHandling Console.WriteLine("[customgrequest]"); IRetryStrategy myCustomStrategy = null; // tag::customreq[] - await collection.GetAsync("docid", new GetOptions().RetryStrategy(myCustomStrategy)); + using var result = await collection.GetAsync("docid", new GetOptions().RetryStrategy(myCustomStrategy)); // end::customreq[] } } diff --git a/modules/howtos/examples/KvOperations.csx b/modules/howtos/examples/KvOperations.csx index ad6cd55f..0a699749 100644 --- a/modules/howtos/examples/KvOperations.csx +++ b/modules/howtos/examples/KvOperations.csx @@ -109,7 +109,7 @@ public class KvOperations // tag::get[] var previousResult = await collection.UpsertAsync("string-key", "string value"); - var result = await collection.GetAsync("string-key"); + using var result = await collection.GetAsync("string-key"); var content = result.ContentAs(); // end::get[] } diff --git a/modules/howtos/examples/SubDocument.csx b/modules/howtos/examples/SubDocument.csx index 8fb15fcd..b3d04d84 100644 --- a/modules/howtos/examples/SubDocument.csx +++ b/modules/howtos/examples/SubDocument.csx @@ -40,7 +40,7 @@ await _collection.UpsertAsync("customer123", document); { Console.WriteLine("get:"); // #tag::get[] - var result = await _collection.LookupInAsync("customer123", specs => + using var result = await _collection.LookupInAsync("customer123", specs => specs.Get("addresses.delivery.country") ); @@ -219,7 +219,7 @@ await Concurrent(); async Task CasAsync() { Console.WriteLine("cas:"); // #tag::cas[] - var player = await _collection.GetAsync("player432"); + using var player = await _collection.GetAsync("player432"); ulong decrement = 150; await _collection.MutateInAsync("player432", specs => specs.Decrement("gold", decrement), diff --git a/modules/howtos/examples/Transcoding.csx b/modules/howtos/examples/Transcoding.csx index 9d70b745..b992878e 100644 --- a/modules/howtos/examples/Transcoding.csx +++ b/modules/howtos/examples/Transcoding.csx @@ -40,7 +40,7 @@ public class Transcoding // #end::raw-json-encode[] // #tag::raw-json-decode[] - var rawJsonDecodeResult = + using var rawJsonDecodeResult = await collection.GetAsync("john-smith", options => options.Transcoder(new RawJsonTranscoder())); var returnedJson = rawJsonDecodeResult.ContentAs(); @@ -58,7 +58,7 @@ public class Transcoding }); - var stringResult = await collection.GetAsync(docId, options => options.Transcoder(new RawStringTranscoder())); + using var stringResult = await collection.GetAsync(docId, options => options.Transcoder(new RawStringTranscoder())); var returnedString = stringResult.ContentAs(); // #end::string[] @@ -70,7 +70,7 @@ public class Transcoding await collection.UpsertAsync(docId, strBytes, options => options.Transcoder(new RawBinaryTranscoder())); - var binaryResult = await collection.GetAsync(docId, options => options.Transcoder(new RawBinaryTranscoder())); + using var binaryResult = await collection.GetAsync(docId, options => options.Transcoder(new RawBinaryTranscoder())); var returnedBinary = binaryResult.ContentAs(); // #end::binary[] @@ -84,7 +84,7 @@ public class Transcoding await collection.UpsertAsync(docId, bytes, options => options.Transcoder(new RawBinaryTranscoder())); - var binaryMemoryResult = await collection.GetAsync(docId, options => options.Transcoder(new RawBinaryTranscoder())); + using var binaryMemoryResult = await collection.GetAsync(docId, options => options.Transcoder(new RawBinaryTranscoder())); // Be sure to dispose of the IMemoryOwner when done, typically via a using statement using var binary = binaryMemoryResult.ContentAs>(); @@ -106,7 +106,7 @@ public class Transcoding // #tag::custom-decode[] - var customDecodeResult = await collection.GetAsync("john-smith", options => options.Transcoder(transcoder)); + using var customDecodeResult = await collection.GetAsync("john-smith", options => options.Transcoder(transcoder)); var returnedUser = customDecodeResult.ContentAs(); // #end::custom-decode[] @@ -137,7 +137,7 @@ public class Transcoding // #tag::msgpack-decode[] - var msgpackResult = await collection.GetAsync("john-smith", options => options.Transcoder(msgpackTranscoder)); + using var msgpackResult = await collection.GetAsync("john-smith", options => options.Transcoder(msgpackTranscoder)); var msgpackReturnedUser = msgpackResult.ContentAs(); // #end::msgpack-decode[] } diff --git a/modules/howtos/examples/UserManagementExample.csx b/modules/howtos/examples/UserManagementExample.csx index 704b0793..8179e8c0 100644 --- a/modules/howtos/examples/UserManagementExample.csx +++ b/modules/howtos/examples/UserManagementExample.csx @@ -99,7 +99,7 @@ public class UserManagementExample Console.WriteLine("Primary index already exists!"); } - var returnedAirline10doc = await collection.GetAsync("airline_10"); + using var returnedAirline10doc = await collection.GetAsync("airline_10"); await collection.UpsertAsync( "airline_11", new { @@ -112,7 +112,7 @@ public class UserManagementExample } ); - var returnedAirline11Doc = await collection.GetAsync("airline_11"); + using var returnedAirline11Doc = await collection.GetAsync("airline_11"); Console.WriteLine($"get -> { returnedAirline11Doc.ContentAs() }"); var result = await userCluster.QueryAsync( diff --git a/modules/project-docs/pages/performance.adoc b/modules/project-docs/pages/performance.adoc index bf6fb6a7..eabe671e 100644 --- a/modules/project-docs/pages/performance.adoc +++ b/modules/project-docs/pages/performance.adoc @@ -11,6 +11,18 @@ Learn how to keep get the best performance from your application. == Coding Best Practices +=== Always call Dispose on GetAsync, LookupInAsync, etc. + +`GetAsync` and other retrieval operations return a class the implements the `IDisposable` interface. +It is important that on these result types, `Dispose()` is called so that the buffer that has between "rented" that handles the response is returned back to its pool. + +[source,csharp] +---- +using var result = await collection.GetAsync("key1"); +---- + +This applies to `GetAsync`, `LookupInAsync`, `GetAndLockAsync`, `GetAndTouchAsync`, `GetAnyReplicaAsync`, and `GetAllReplicasAsync`. + === Avoid Running Tasks on the "Captured Context" When a Task is waited, the continuation may occur on the same thread which created the Task. @@ -37,7 +49,8 @@ Then a collection is opened using a non-async overload. Finally, we perform a CRUD operation, and again we disable the context. This pattern should be followed throughout your Couchbase application. -NOTE: In modern ASP.NET (5+) the core lacks a default synchronization. With this core, usage of `Task.ConfigureAwait(false)` is debatable as it adds a small amount of overhead. +NOTE: In modern ASP.NET (5+), the core lacks a default synchronization. +With this core, usage of `Task.ConfigureAwait(false)` is debatable as it adds a small amount of overhead. === Avoid Synchronously Awaiting Foreach Loops @@ -75,7 +88,9 @@ You are better off batching and awaiting `Task.WhenAll` so that blocking does no === Do Use Parallel.ForEachAsync -In the latest .NET Framework Versions (6+), there is a https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.parallel.foreachasync?view=net-6.0[special method] that allows you to control the amount of parallelism for scheduled asynchronous work: +In the latest .NET Framework Versions (6+), there is a +https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.parallel.foreachasync?view=net-6.0[special method] +that allows you to control the amount of parallelism for scheduled asynchronous work: [source,csharp] ---- @@ -89,7 +104,8 @@ await Parallel.ForEachAsync(keys, async (key, cancellationToken) => { #endif ---- -You can tune this by changing the batch size and the https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-6.0[parallel options]; there is no universal best practice here as it depends on a number of factors. +You can tune this by changing the batch size and the https://docs.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-6.0[parallel options]; +there is no universal best practice here as it depends on a number of factors. === Use Batching @@ -121,7 +137,8 @@ This is a trival example as partitioning keys may be very domain specific, but i === Avoid Sync over Async Antipattern -The Couchbase .NET SDK was designed for asynchronous the entire way down; however, at the application layer you can still block and wait for each operation. +The Couchbase .NET SDK was designed for asynchronous the entire way down; +however, at the application layer you can still block and wait for each operation. Doing this is an antipattern and may cause deadlocks, and most definitly will degrade performance. Here is an example of _sync_ over _async_: @@ -169,8 +186,11 @@ When we open the Cluster and Bucket objects, we create long-lived socket connect There is cost associated with creating these connections, so we want them to be reused over and over. If we're opening and closing these objects, we're creating and the tearing down these connections -- which causes latency, and may cause memory pressure. -The Couchbase SDK has a complementary https://docs.couchbase.com/dotnet-sdk/current/howtos/managing-connections.html#connection-di[Dependency Injection (DI)] library that makes this trival to manage. -Additionally, there are other ways of doing this manually in `Start.cs`, or for legacy applications, using `Application_Start` and `Application_End` handlers in the `Global.asax` file. +The Couchbase SDK has a complementary +https://docs.couchbase.com/dotnet-sdk/current/howtos/managing-connections.html#connection-di[Dependency Injection (DI)] +library that makes this trival to manage. +Additionally, there are other ways of doing this manually in `Start.cs`, or for legacy applications, +using `Application_Start` and `Application_End` handlers in the `Global.asax` file. We strongly recommend users of the SDK use the DI library approach as its the simplest and easiest to debug. @@ -197,7 +217,8 @@ The `SingleConnectionPool` is a very simple pool that contains exactly one conne It's useful for debugging connection related problems as it is has very few features and allows you to quickly isolate problems. It may also be suitable for some applications or micro-services that need to constrain the number of active connections. However, in general, we suggest using the `ChannelConnectionPool`. -As mentioned above, setting both `ClusterOptions.NumKvConnections` and `ClusterOptions.MaxKvConnections` to a number less than or equal to `1` will cause the `SingleConnectionPool` to be used. +As mentioned above, +setting both `ClusterOptions.NumKvConnections` and `ClusterOptions.MaxKvConnections` to a number less than or equal to `1` will cause the `SingleConnectionPool` to be used. The `DataFlowConnectionPool` is a legacy pool and should not be used in new applications. @@ -219,7 +240,8 @@ Defaults to 1MiB. ==== MaximumRetainedOperationBuilders Maximum number of buffers used for building key-value operations to be sent to the server which will be retained for reuse. -If your application has a very high degree of parallelism (for example, a very large number of data nodes), increasing this number may improve performance at the cost of RAM utilization. +If your application has a very high degree of parallelism (for example, a very large number of data nodes), +increasing this number may improve performance at the cost of RAM utilization. Defaults to the 4 times the number of logical CPUs. === Operation Tracing and Metrics @@ -227,7 +249,8 @@ Defaults to the 4 times the number of logical CPUs. The SDK by default enables operation tracing and metrics tracking. It is used to generate threshold and orphan response reports which are written to the log file. While these are useful tool for debugging, they do come at a cost of increased memory and CPU use. -Operation tracing and metrics can be disabled by setting the `ClusterOptions.TracingOptions.Enabled` flag to `false` and/or by setting the `ClusterOptions.LoggingMeterOptions.Enabled` to `false`. +Operation tracing and metrics can be disabled by setting the `ClusterOptions.TracingOptions.Enabled` flag to `false` +and/or by setting the `ClusterOptions.LoggingMeterOptions.Enabled` to `false`. Note, by doing so you will lose the ability to use these useful debugging tools. === Logging From 10e9841a7a985fd4dc4d0ec9e35db907843ac53a Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 29 Feb 2024 13:25:58 +0000 Subject: [PATCH 12/29] Added missing Apache 2 licence file --- LICENSE | 201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..261eeb9e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. From 9d509e745cc0f8ce909c4486bd7edd255cd382a3 Mon Sep 17 00:00:00 2001 From: Jeffry Morris Date: Sat, 2 Mar 2024 02:09:03 -0800 Subject: [PATCH 13/29] NCBC-3440: improve ClusterOptions documentation (#320) * NCBC-3440: improve ClusterOptions documentation * ventilated prose --------- Co-authored-by: Richard Smedley --- modules/ref/pages/client-settings.adoc | 287 ++++++++++++++++++++++++- 1 file changed, 281 insertions(+), 6 deletions(-) diff --git a/modules/ref/pages/client-settings.adoc b/modules/ref/pages/client-settings.adoc index 1a1d7485..e75408f9 100644 --- a/modules/ref/pages/client-settings.adoc +++ b/modules/ref/pages/client-settings.adoc @@ -147,11 +147,9 @@ Cluster Option: `IgnoreRemoteCertificateNameMismatch(boolean)` + Default: `false` + -If TLS is enabled via `EnableTls`, setting this to true will disable hostname validation when authenticating -connections to Couchbase Server. -This is typically done in test or development environments where a domain name (FQDN) has not been specified -for the bootstrap server's URI, and the IP address is use to validate the certificate, which will fail with a -`RemoteCertificateNameMismatch` error. +If TLS is enabled via `EnableTls`, setting this to true will disable hostname validation when authenticating connections to Couchbase Server. +This is typically done in test or development environments where a domain name (FQDN) has not been specified for the bootstrap server's URI, +and the IP address is use to validate the certificate, which will fail with a `RemoteCertificateNameMismatch` error. Name: *Enable Certificate Revocation*:: Cluster Option: `EnableCertificateRevocation(boolean)` @@ -160,6 +158,97 @@ Default: `false` + A Boolean value that specifies whether the certificate revocation list is checked during authentication. +Name: *With Credentials*:: +Cluster Option: `WithCredentials(string, string)` ++ +Default: none ++ +Applies the credentials for authentication. +Note that this is the same as setting the `UserName` and `Password` properties. + +Name: *Enabled SSL Protocols*:: +ClusterOption: `EnabledSslProtocols(SslProtocols)` ++ +Default: `TLS1.2` and `TLS1.3` for .NET6 and greater; `TLS1.2` for earlier .NET version. ++ +Defines the possible TLS protocols to use. +The underlying OS will always pick the highest supported version. + +Name: *Enabled TLS Cipher Suites*:: ++ +Default: `EnabledTlsCipherSuites(TlsCipherSuite)` ++ +List of enabled TLS Cipher Suites. +If not set, will use default .NET Cipher Suites defined by the OS. +Supported by .NET 3.1 or greater. + +Name: *Force IP As Target Host*:: +ClusterOption: `ForceIpAsTargetHost(boolean)` ++ +Default: true ++ +If `ForceIpAsTargetHost` is true, send the IP as the target host during TLS authentication. +If `ForceIpAsTargetHost` is false, then mimic the default SDK2 behavior; +the hostname or IP as defined by the server will be sent as the target host during TLS authentication. + +Name: *Key Value Remote Certificate Validation*:: +ClusterOption: `KvCertificateCallbackValidation(RemoteCertificateValidationCallback)` ++ +Default: `null` - if `null` and certificate authentication is enabled this value will be populated internally by the default callback validation. ++ +The default `RemoteCertificateValidationCallback` called by .NET to validate the TLS/SSL certificates being used for HTTP services (Query, FTS, Analytics, etc). +If this method returns `true`, then the certificate will be accepted. +While it can be handy to simply return `true` for development against self-signed certificates, +such a shortcut should never be used against a public-facing or production system. + +Name: *HTTP Remote Certificate Validation*:: +ClusterOption: `KvCertificateCallbackValidation(RemoteCertificateValidationCallback)` ++ +Default: `null` - if `null` and certificate authentication is enabled this value will be populated internally by the default callback validation. ++ +The default `RemoteCertificateValidationCallback` called by .NET to validate the TLS/SSL certificates being used for Key/Value operations. +If this method returns `true`, then the certificate will be accepted. + +Name: *With X509 Certificate Factory:: +ClusterOption: `WithX509CertificateFactory(ICertificateFactory)` ++ +Default: `nul`l - if `null` it will be set internally by the default `CertificateFactory`. ++ +Gets or sets the `ICertificateFactory` to provide client certificates during TLS authentication. +Will set the `TlsEnabled` flag to true if called. + +Name: *X509 Certificate Factory:: +ClusterOption: `X509CertificateFactory(ICertificateFactory)` ++ +Default: `null` - if `null` it will be set internally by the default `CertificateFactory`. ++ +Gets or sets the `ICertificateFactory` to provide client certificates during TLS authentication. + +Name: *Key Value Ignore Remote Certificate Name Mismatch*:: +ClusterOption: `KvIgnoreRemoteCertificateNameMismatch(boolean)` ++ +Default: `false` ++ +Ignore `CertificateNameMismatch` and `CertificateChainMismatch` for Key/Value operations, since they happen together. +Intended for development purposes only. +Does *NOT* affect anything other than the name mismatch, such as an untrusted root or an expired certificate. + +Name: *HTTP Ignore Remote Certificate Name Mismatch*:: +ClusterOption: `HttpIgnoreRemoteCertificateNameMismatch(boolean)` ++ +Default: `false` ++ +Ignore `CertificateNameMismatch` and `CertificateChainMismatch` for HTTP services (Query, FTS, Analytics, etc), since they happen together. +Intended for development purposes only. +Does *NOT* affect anything other than the name mismatch, such as an untrusted root or an expired certificate. + +Name: *EnableCertificateRevocation*:: +ClusterOption: `EnableCertificateRevocation` ++ +Default: `false` ++ + +A `System.Boolean` value that specifies whether the certificate revocation list is checked during authentication. == I/O Options @@ -231,6 +320,7 @@ Name: *Max HTTP Endpoints per Service per Node*:: Cluster Option: `MaxHttpConnections(int)` + Default: `5` ++ Each service (except the Key/Value service) has a separate dynamically sized pool of HTTP connections for issuing requests. This setting puts an upper bound on the number of HTTP connections in each pool. @@ -239,6 +329,7 @@ Name: *Enable Config Poll*:: Cluster Option: `EnableConfigPolling(boolean)` + Default: `true` ++ Enables Configuration `heartbeat` checks. @@ -250,6 +341,147 @@ Default: `2.5s` The interval at which the client fetches cluster topology information in order to proactively detect changes. `EnableConfigPolling` should be set to true to leverage this setting. +Name: *Enable Expect 100-Continue*:: +ClusterOption: `EnableExpect100Continue(boolean)` ++ +Default:`false` ++ + +Gets or sets a value that indicates if the `Expect` header for an HTTP request contains `Continue`. + +Name: *DNS Revolver*:: +Cluster Option: `DnsResolver(IDnsResolver)` ++ +Default: `DnsClientDnsResolver` ++ + +Provide a custom `IDnsResolver` for DNS SRV resolution. + +=== Bootstrapping Options + +Bootrapping is the initial process of the client connecting to a server cluster. + +Name: *Bootstrap Poll Interval*:: +ClusterOption: `BootstrapPollInterval(TimeSpan)` ++ +Default: `2.5s` ++ + +Used for checking that the SDK has bootstrapped and potentially retrying if not. + +Name: *Bootstrap HTTP TLS Port*:: +ClusterOption: `BootstrapHttpPortTls(int)` ++ +Default: `18091` ++ + +Port used for TLS HTTP bootstrapping fallback if other bootstrap methods are not available. +Do not change unless the Couchbase server default ports have be changed. + +Name: *Bootstrap HTTP Port*:: +ClusterOption: `BootstrapHttpPort(int)` ++ +Default: `8091` ++ + +Port used for HTTP bootstrapping fallback if other bootstrap methods are not available. +Do not change unless the Couchbase server default ports have be changed. + +=== Compression Options + +Name: *With Compression Algorithm*:: +Cluster Option:`WithCompressionAlgorithm(ICompressionAlgorithm)` ++ +Default: `null` ++ + +Provide a custom `ICompressionAlgorithm` for key/value body compression. + +Name: *Compression*:: +Cluster Option: Compression(boolean) ++ +Default: `true` - Ignored if no compression is supplied via `WithCompressionAlogrithm` ++ + +Enables compression for key/value operations. + +Name: *Compression Minimum Size*:: +Cluster Option:`CompressionMinSize(int)` ++ +Default: 32 ++ + +If compression is enabled, the minimum document size considered for compression (in bytes). +Documents smaller than this size are always sent to the server uncompressed. + +Name: *Compression Minimum Ratio*:: +Cluster Option: `CompressionMinRatio(float)` ++ +Default: `0.83f` ++ + +If compression is enabled, the minimum compression ratio to accept when sending documents to the server. +Documents which don't achieve this compression ratio are sent to the server uncompressed. ++ +1.0 means no compression was achieved. A value of 0.75 would result in documents which compress to at least +75% of their original size to be transmitted compressed. +The default is 0.83 (83%). + + +=== Performance Tuning Options + +Performance tuning options under the `ClusterOptions.Tuning` property. This section is volatile and may change in future releases. + + +Name: *Maximum Operation Builder Capacity*:: +Cluster Option: `MaximumOperationBuilderCapacity(int)` ++ +Default: `1MB` ++ + +Maximum size of a buffer used for building key/value operations to be sent to the server which will be retained for reuse. +Buffers larger than this value will be disposed. +If your application is consistently sending mutation operations larger than this value, increasing the value may improve performance at the cost of RAM utilization. + +Name: *Maximum Retained Operation Builders*:: +Cluster Option: `MaximumRetainedOperationBuilders(int)` ++ +Default: `Processor Count * 4` ++ + +Maximum number of buffers used for building key/value operations to be sent to the server which will be retained for reuse. +If your application has a very high degree of parallelism (for example, a very large number of data nodes), +increasing this number may improve performance at the cost of RAM utilization. +Defaults to 4 times the number of logical CPUs. + +Name: *Maximum In Flight Operations Per Connection*:: +Cluster Option: `MaximumInFlightOperationsPerConnection(int)` ++ +Default: `8` ++ + +Maximum number of operations which may be sent and still awaiting a response from the server per connection. +This value may need tuning on high latency connections or based on average operation response size. +Defaults to 8 operations per connection. ++ +Note that this is not directly limiting the total number of in-flight operations, +each bucket and each node gets a dedicated pool of connections that scale based on the minimum and maximum pool size. +This limit is per connection. + + +Name: *Stream HTTP Response Bodies*:: +Cluster Option: `StreamHttpResponseBodies(boolean)` ++ +Default: `true` if .NET Standard 2.1 or .NET 6 or greater, otherwise `false`. ++ + +If enabled, HTTP responses such as query responses will be streamed after response headers are received rather than waiting for the entire response body to be received. +This default to `true` on modern .NET runtimes and `false` on .NET 4.x. ++ +When enabled it becomes more important to call `IDisposable.Dispose` on result objects such as `IQueryResult{T}` and `IAnalyticsResult{T}` to ensure the underlying HTTP connection is released. +This is especially true on .NET 4.x where failure to dispose may cause issues with connection pool exhaustion. + + === Circuit Breaker Options Circuit breakers are a tool for preventing cascading failures. @@ -258,7 +490,8 @@ When a circuit is closed, requests are sent to the server as normal. If too many requests fail within a certain time window, the breaker opens the circuit, preventing requests from going through. When a circuit is open, any requests to the service immediately fail without the client even talking to the server. -After a "sleep delay" elapses, the next request is allowed to go through the to the server. This trial request is called a "canary." +After a "sleep delay" elapses, the next request is allowed to go through the to the server. +This trial request is called a "canary." Each service has an associated circuit breaker which may be configured independently of the others. The `IoConfig` builder has methods for configuring the circuit breakers of each service. @@ -405,6 +638,33 @@ Default: `75s` The management timeout is used on all cluster management APIs (BucketManager, UserManager, CollectionManager, QueryIndexManager, etc.) if not overridden by a custom timeout. The default is quite high because some operations (such as flushing a bucket, for example) might take a long time. +Name: *Config Updating Timeout*:: +ClusterOption: `ConfigUpdatingTimeout(TimeSpan)` ++ +Default: `15s` ++ + +The time to wait for a bucket re-configuration to take place after receiving a new cluster map config. + +Name: *Key Value Connect Timeout*:: +ClusterOption: `KvConnectTimeout(TimeSpan)` ++ +Default: `10s` ++ +description + +The time to wait while attempting to connect to a node’s KV service via a socket. +Initial connection, reconnecting, node added, etc. + +Name: *Key Value Range Scan Timeout*:: +ClusterOption: `KvScanTimeout(TimeSpan)` ++ +Default: `75s` ++ + +The time to wait before timing out a KV Range Scan. + + == General Options @@ -472,10 +732,22 @@ var clusterOptions = new ClusterOptions(); }); ---- +Name: *Key Value Send Queue Capacity*:: +Cluster Option: `KvSendQueueCapacity(uint)` ++ +Default: `1024` ++ + +Gets or sets the maximum number of operations that will be queued for processing per node. +If this value is exceeded, any additional operations will be put into the retry loop. + + + // section on wide area network support include::{version-common}@sdk:shared:partial$client-settings-wide-network.adoc[] + == Configuration Profiles Configuration Profiles provide predefined client settings that allow you to quickly configure an environment for common use-cases. @@ -521,3 +793,6 @@ This profile changes the default timeouts. | `ManagementTimeout` | 75s |=== + + + From 0a8dc1d79f05c26aac81178196f61f6d6ff3e6fd Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Sat, 2 Mar 2024 10:33:46 +0000 Subject: [PATCH 14/29] Updates and improvements --- modules/ref/pages/client-settings.adoc | 309 +++++++++++++++++++++++-- 1 file changed, 293 insertions(+), 16 deletions(-) diff --git a/modules/ref/pages/client-settings.adoc b/modules/ref/pages/client-settings.adoc index 1a1d7485..d8ee13e5 100644 --- a/modules/ref/pages/client-settings.adoc +++ b/modules/ref/pages/client-settings.adoc @@ -7,7 +7,10 @@ include::project-docs:partial$attributes.adoc[] [abstract] -{description} You can configure the client programmatically using JSON config files, Environmental variables settings, XML based configuration such has app.config or web.config files. +{description} + +You can configure the client programmatically using JSON config files, Environmental variables settings, XML-based configuration such as `app.config`, or `web.config` files. + == Configuration Basics @@ -25,9 +28,9 @@ var options = new ClusterOptions ---- -.Fluent Configuration +=== Fluent Configuration -you can also build the `Cluster Options` in a fluent way for example +You can also build the `Cluster Options` in a fluent way, for example: [source,csharp] ---- @@ -56,14 +59,13 @@ Or by using one of the static `Cluster.Connect(...)` methods: var cluster = Cluster.Connect("couchbase://localhost", options); ---- -[#dotnet-json-configuration] + == JSON Configuration In support of .NET Core, the client can now be configured using JSON config files. -NOTE: JSON configuration is only supported for versions of the SDK 2.3.0 and greater running on .NET Core 1.0 or greater. - -Below is an example of how `appsettings.json` can be coded for cluster options, note the key `ClusterOptions` is simply a name of an object and can be anything you may want it to be. +Below is an example of how `appsettings.json` can be coded for cluster options. +Note, the key `ClusterOptions` is simply a name of an object and can be anything you may want it to be. [source,csharp] ---- @@ -93,7 +95,7 @@ var settings = Configuration.GetSection("ClusterOptions"); services.Configure(settings); ---- -The options can now be made accessible through any services as below, +The options can now be made accessible through any services as below: [source,csharp] ---- @@ -104,10 +106,12 @@ public CustomService ( IOptions clusterOptions) ---- The "travel-sample" bucket is opened using any of the overridden defaults. + == Configuration Options -The following tables cover all possible configuration options and explain their usage and default values. -The tables categorize the options into groups for bootstrapping, timeout, reliability, performance, and advanced options. +The following listing covers all possible configuration options and explains their usage and default values. +Options are categorized into groups by usage. + == Security Options @@ -147,11 +151,9 @@ Cluster Option: `IgnoreRemoteCertificateNameMismatch(boolean)` + Default: `false` + -If TLS is enabled via `EnableTls`, setting this to true will disable hostname validation when authenticating -connections to Couchbase Server. -This is typically done in test or development environments where a domain name (FQDN) has not been specified -for the bootstrap server's URI, and the IP address is use to validate the certificate, which will fail with a -`RemoteCertificateNameMismatch` error. +If TLS is enabled via `EnableTls`, setting this to true will disable hostname validation when authenticating connections to Couchbase Server. +This is typically done in test or development environments where a domain name (FQDN) has not been specified for the bootstrap server's URI, +and the IP address is use to validate the certificate, which will fail with a `RemoteCertificateNameMismatch` error. Name: *Enable Certificate Revocation*:: Cluster Option: `EnableCertificateRevocation(boolean)` @@ -160,6 +162,98 @@ Default: `false` + A Boolean value that specifies whether the certificate revocation list is checked during authentication. +Name: *With Credentials*:: +Cluster Option: `WithCredentials(string, string)` ++ +Default: none ++ +Applies the credentials for authentication. +Note that this is the same as setting the `UserName` and `Password` properties. + +Name: *Enabled SSL Protocols*:: +ClusterOption: `EnabledSslProtocols(SslProtocols)` ++ +Default: `TLS1.2` and `TLS1.3` for .NET6 and greater; `TLS1.2` for earlier .NET version. ++ +Defines the possible TLS protocols to use. +The underlying OS will always pick the highest supported version. + +Name: *Enabled TLS Cipher Suites*:: ++ +Default: `EnabledTlsCipherSuites(TlsCipherSuite)` ++ +List of enabled TLS Cipher Suites. +If not set, will use default .NET Cipher Suites defined by the OS. +Supported by .NET 3.1 or greater. + +Name: *Force IP As Target Host*:: +ClusterOption: `ForceIpAsTargetHost(boolean)` ++ +Default: true ++ +If `ForceIpAsTargetHost` is true, send the IP as the target host during TLS authentication. +If `ForceIpAsTargetHost` is false, then mimic the default SDK2 behavior; +the hostname or IP as defined by the server will be sent as the target host during TLS authentication. + +Name: *Key Value Remote Certificate Validation*:: +ClusterOption: `KvCertificateCallbackValidation(RemoteCertificateValidationCallback)` ++ +Default: `null` - if `null` and certificate authentication is enabled this value will be populated internally by the default callback validation. ++ +The default `RemoteCertificateValidationCallback` called by .NET to validate the TLS/SSL certificates being used for HTTP services (Query, FTS, Analytics, etc). +If this method returns `true`, then the certificate will be accepted. +While it can be handy to simply return `true` for development against self-signed certificates, +such a shortcut should never be used against a public-facing or production system. + +Name: *HTTP Remote Certificate Validation*:: +ClusterOption: `KvCertificateCallbackValidation(RemoteCertificateValidationCallback)` ++ +Default: `null` - if `null` and certificate authentication is enabled this value will be populated internally by the default callback validation. ++ +The default `RemoteCertificateValidationCallback` called by .NET to validate the TLS/SSL certificates being used for Key/Value operations. +If this method returns `true`, then the certificate will be accepted. + +Name: *With X509 Certificate Factory:: +ClusterOption: `WithX509CertificateFactory(ICertificateFactory)` ++ +Default: `nul`l - if `null` it will be set internally by the default `CertificateFactory`. ++ +Gets or sets the `ICertificateFactory` to provide client certificates during TLS authentication. +Will set the `TlsEnabled` flag to true if called. + +Name: *X509 Certificate Factory:: +ClusterOption: `X509CertificateFactory(ICertificateFactory)` ++ +Default: `null` - if `null` it will be set internally by the default `CertificateFactory`. ++ +Gets or sets the `ICertificateFactory` to provide client certificates during TLS authentication. + +Name: *Key Value Ignore Remote Certificate Name Mismatch*:: +ClusterOption: `KvIgnoreRemoteCertificateNameMismatch(boolean)` ++ +Default: `false` ++ +Ignore `CertificateNameMismatch` and `CertificateChainMismatch` for Key/Value operations, since they happen together. +Intended for development purposes only. +Does *NOT* affect anything other than the name mismatch, such as an untrusted root or an expired certificate. + +Name: *HTTP Ignore Remote Certificate Name Mismatch*:: +ClusterOption: `HttpIgnoreRemoteCertificateNameMismatch(boolean)` ++ +Default: `false` ++ +Ignore `CertificateNameMismatch` and `CertificateChainMismatch` for HTTP services (Query, FTS, Analytics, etc), since they happen together. +Intended for development purposes only. +Does *NOT* affect anything other than the name mismatch, such as an untrusted root or an expired certificate. + +Name: *EnableCertificateRevocation*:: +ClusterOption: `EnableCertificateRevocation` ++ +Default: `false` ++ + +A `System.Boolean` value that specifies whether the certificate revocation list is checked during authentication. + == I/O Options @@ -231,6 +325,7 @@ Name: *Max HTTP Endpoints per Service per Node*:: Cluster Option: `MaxHttpConnections(int)` + Default: `5` ++ Each service (except the Key/Value service) has a separate dynamically sized pool of HTTP connections for issuing requests. This setting puts an upper bound on the number of HTTP connections in each pool. @@ -239,6 +334,7 @@ Name: *Enable Config Poll*:: Cluster Option: `EnableConfigPolling(boolean)` + Default: `true` ++ Enables Configuration `heartbeat` checks. @@ -250,6 +346,147 @@ Default: `2.5s` The interval at which the client fetches cluster topology information in order to proactively detect changes. `EnableConfigPolling` should be set to true to leverage this setting. +Name: *Enable Expect 100-Continue*:: +ClusterOption: `EnableExpect100Continue(boolean)` ++ +Default:`false` ++ + +Gets or sets a value that indicates if the `Expect` header for an HTTP request contains `Continue`. + +Name: *DNS Revolver*:: +Cluster Option: `DnsResolver(IDnsResolver)` ++ +Default: `DnsClientDnsResolver` ++ + +Provide a custom `IDnsResolver` for DNS SRV resolution. + +=== Bootstrapping Options + +Bootrapping is the initial process of the client connecting to a server cluster. + +Name: *Bootstrap Poll Interval*:: +ClusterOption: `BootstrapPollInterval(TimeSpan)` ++ +Default: `2.5s` ++ + +Used for checking that the SDK has bootstrapped and potentially retrying if not. + +Name: *Bootstrap HTTP TLS Port*:: +ClusterOption: `BootstrapHttpPortTls(int)` ++ +Default: `18091` ++ + +Port used for TLS HTTP bootstrapping fallback if other bootstrap methods are not available. +Do not change unless the Couchbase server default ports have be changed. + +Name: *Bootstrap HTTP Port*:: +ClusterOption: `BootstrapHttpPort(int)` ++ +Default: `8091` ++ + +Port used for HTTP bootstrapping fallback if other bootstrap methods are not available. +Do not change unless the Couchbase server default ports have be changed. + +=== Compression Options + +Name: *With Compression Algorithm*:: +Cluster Option:`WithCompressionAlgorithm(ICompressionAlgorithm)` ++ +Default: `null` ++ + +Provide a custom `ICompressionAlgorithm` for key/value body compression. + +Name: *Compression*:: +Cluster Option: Compression(boolean) ++ +Default: `true` - Ignored if no compression is supplied via `WithCompressionAlogrithm` ++ + +Enables compression for key/value operations. + +Name: *Compression Minimum Size*:: +Cluster Option:`CompressionMinSize(int)` ++ +Default: 32 ++ + +If compression is enabled, the minimum document size considered for compression (in bytes). +Documents smaller than this size are always sent to the server uncompressed. + +Name: *Compression Minimum Ratio*:: +Cluster Option: `CompressionMinRatio(float)` ++ +Default: `0.83f` ++ + +If compression is enabled, the minimum compression ratio to accept when sending documents to the server. +Documents which don't achieve this compression ratio are sent to the server uncompressed. ++ +1.0 means no compression was achieved. A value of 0.75 would result in documents which compress to at least +75% of their original size to be transmitted compressed. +The default is 0.83 (83%). + + +=== Performance Tuning Options + +Performance tuning options under the `ClusterOptions.Tuning` property. This section is volatile and may change in future releases. + + +Name: *Maximum Operation Builder Capacity*:: +Cluster Option: `MaximumOperationBuilderCapacity(int)` ++ +Default: `1MB` ++ + +Maximum size of a buffer used for building key/value operations to be sent to the server which will be retained for reuse. +Buffers larger than this value will be disposed. +If your application is consistently sending mutation operations larger than this value, increasing the value may improve performance at the cost of RAM utilization. + +Name: *Maximum Retained Operation Builders*:: +Cluster Option: `MaximumRetainedOperationBuilders(int)` ++ +Default: `Processor Count * 4` ++ + +Maximum number of buffers used for building key/value operations to be sent to the server which will be retained for reuse. +If your application has a very high degree of parallelism (for example, a very large number of data nodes), +increasing this number may improve performance at the cost of RAM utilization. +Defaults to 4 times the number of logical CPUs. + +Name: *Maximum In Flight Operations Per Connection*:: +Cluster Option: `MaximumInFlightOperationsPerConnection(int)` ++ +Default: `8` ++ + +Maximum number of operations which may be sent and still awaiting a response from the server per connection. +This value may need tuning on high latency connections or based on average operation response size. +Defaults to 8 operations per connection. ++ +Note that this is not directly limiting the total number of in-flight operations, +each bucket and each node gets a dedicated pool of connections that scale based on the minimum and maximum pool size. +This limit is per connection. + + +Name: *Stream HTTP Response Bodies*:: +Cluster Option: `StreamHttpResponseBodies(boolean)` ++ +Default: `true` if .NET Standard 2.1 or .NET 6 or greater, otherwise `false`. ++ + +If enabled, HTTP responses such as query responses will be streamed after response headers are received rather than waiting for the entire response body to be received. +This default to `true` on modern .NET runtimes and `false` on .NET 4.x. ++ +When enabled it becomes more important to call `IDisposable.Dispose` on result objects such as `IQueryResult{T}` and `IAnalyticsResult{T}` to ensure the underlying HTTP connection is released. +This is especially true on .NET 4.x where failure to dispose may cause issues with connection pool exhaustion. + + === Circuit Breaker Options Circuit breakers are a tool for preventing cascading failures. @@ -258,7 +495,8 @@ When a circuit is closed, requests are sent to the server as normal. If too many requests fail within a certain time window, the breaker opens the circuit, preventing requests from going through. When a circuit is open, any requests to the service immediately fail without the client even talking to the server. -After a "sleep delay" elapses, the next request is allowed to go through the to the server. This trial request is called a "canary." +After a "sleep delay" elapses, the next request is allowed to go through the to the server. +This trial request is called a "canary." Each service has an associated circuit breaker which may be configured independently of the others. The `IoConfig` builder has methods for configuring the circuit breakers of each service. @@ -405,6 +643,33 @@ Default: `75s` The management timeout is used on all cluster management APIs (BucketManager, UserManager, CollectionManager, QueryIndexManager, etc.) if not overridden by a custom timeout. The default is quite high because some operations (such as flushing a bucket, for example) might take a long time. +Name: *Config Updating Timeout*:: +ClusterOption: `ConfigUpdatingTimeout(TimeSpan)` ++ +Default: `15s` ++ + +The time to wait for a bucket re-configuration to take place after receiving a new cluster map config. + +Name: *Key Value Connect Timeout*:: +ClusterOption: `KvConnectTimeout(TimeSpan)` ++ +Default: `10s` ++ +description + +The time to wait while attempting to connect to a node’s KV service via a socket. +Initial connection, reconnecting, node added, etc. + +Name: *Key Value Range Scan Timeout*:: +ClusterOption: `KvScanTimeout(TimeSpan)` ++ +Default: `75s` ++ + +The time to wait before timing out a KV Range Scan. + + == General Options @@ -472,10 +737,22 @@ var clusterOptions = new ClusterOptions(); }); ---- +Name: *Key Value Send Queue Capacity*:: +Cluster Option: `KvSendQueueCapacity(uint)` ++ +Default: `1024` ++ + +Gets or sets the maximum number of operations that will be queued for processing per node. +If this value is exceeded, any additional operations will be put into the retry loop. + + + // section on wide area network support include::{version-common}@sdk:shared:partial$client-settings-wide-network.adoc[] + == Configuration Profiles Configuration Profiles provide predefined client settings that allow you to quickly configure an environment for common use-cases. From beaac638f46fbcb2526378b1157e2b9919c948bc Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Sat, 2 Mar 2024 10:34:42 +0000 Subject: [PATCH 15/29] tweaks --- modules/ref/pages/client-settings.adoc | 28 ++++++++++++++------------ 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/modules/ref/pages/client-settings.adoc b/modules/ref/pages/client-settings.adoc index e75408f9..d8ee13e5 100644 --- a/modules/ref/pages/client-settings.adoc +++ b/modules/ref/pages/client-settings.adoc @@ -7,7 +7,10 @@ include::project-docs:partial$attributes.adoc[] [abstract] -{description} You can configure the client programmatically using JSON config files, Environmental variables settings, XML based configuration such has app.config or web.config files. +{description} + +You can configure the client programmatically using JSON config files, Environmental variables settings, XML-based configuration such as `app.config`, or `web.config` files. + == Configuration Basics @@ -25,9 +28,9 @@ var options = new ClusterOptions ---- -.Fluent Configuration +=== Fluent Configuration -you can also build the `Cluster Options` in a fluent way for example +You can also build the `Cluster Options` in a fluent way, for example: [source,csharp] ---- @@ -56,14 +59,13 @@ Or by using one of the static `Cluster.Connect(...)` methods: var cluster = Cluster.Connect("couchbase://localhost", options); ---- -[#dotnet-json-configuration] + == JSON Configuration In support of .NET Core, the client can now be configured using JSON config files. -NOTE: JSON configuration is only supported for versions of the SDK 2.3.0 and greater running on .NET Core 1.0 or greater. - -Below is an example of how `appsettings.json` can be coded for cluster options, note the key `ClusterOptions` is simply a name of an object and can be anything you may want it to be. +Below is an example of how `appsettings.json` can be coded for cluster options. +Note, the key `ClusterOptions` is simply a name of an object and can be anything you may want it to be. [source,csharp] ---- @@ -93,7 +95,7 @@ var settings = Configuration.GetSection("ClusterOptions"); services.Configure(settings); ---- -The options can now be made accessible through any services as below, +The options can now be made accessible through any services as below: [source,csharp] ---- @@ -104,10 +106,12 @@ public CustomService ( IOptions clusterOptions) ---- The "travel-sample" bucket is opened using any of the overridden defaults. + == Configuration Options -The following tables cover all possible configuration options and explain their usage and default values. -The tables categorize the options into groups for bootstrapping, timeout, reliability, performance, and advanced options. +The following listing covers all possible configuration options and explains their usage and default values. +Options are categorized into groups by usage. + == Security Options @@ -250,6 +254,7 @@ Default: `false` A `System.Boolean` value that specifies whether the certificate revocation list is checked during authentication. + == I/O Options This section provides basic settings that will come in handy while configuring network related operations. @@ -793,6 +798,3 @@ This profile changes the default timeouts. | `ManagementTimeout` | 75s |=== - - - From ca295907a75929d75350aa44af8e423b78232db9 Mon Sep 17 00:00:00 2001 From: Richard Ponton Date: Tue, 5 Mar 2024 07:44:29 -0800 Subject: [PATCH 16/29] NCBC-3678: Docs samples for SDK 3.5 features (#321) * NCBC-3678: Docs samples for SDK 3.5 features * Scoped search examples * Vector search examples * refactored from inline examples to CSPROJ example that compiles. * NCBC-3678: Docs samples for SDK 3.5 features (RangeSan and SubDoc replica read) --- .../RangeScan/RangeScan/Program.cs | 93 +++++++ .../RangeScan/RangeScan/RangeScan.csproj | 19 ++ .../SubDocument/Program.cs | 71 ++++++ .../SubDocument/SubDocument.csproj | 14 ++ .../SearchV2Examples/Program.cs | 226 ++++++++++++++++++ .../SearchV2Examples/SearchV2Examples.csproj | 24 ++ .../pages/full-text-searching-with-sdk.adoc | 133 +++++++---- modules/howtos/pages/kv-operations.adoc | 70 ++++++ .../howtos/pages/subdocument-operations.adoc | 21 ++ 9 files changed, 626 insertions(+), 45 deletions(-) create mode 100644 modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs create mode 100644 modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/RangeScan.csproj create mode 100644 modules/howtos/examples/Couchbase.Examples.KV/SubDocument/Program.cs create mode 100644 modules/howtos/examples/Couchbase.Examples.KV/SubDocument/SubDocument.csproj create mode 100644 modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs create mode 100644 modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/SearchV2Examples.csproj diff --git a/modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs b/modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs new file mode 100644 index 00000000..00e80aae --- /dev/null +++ b/modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs @@ -0,0 +1,93 @@ +using Couchbase; +using Couchbase.KeyValue; +using Couchbase.KeyValue.RangeScan; +using Serilog; +using Serilog.Extensions.Logging; + +Serilog.Log.Logger = new LoggerConfiguration() + .Enrich.FromLogContext() + .MinimumLevel.Information() + .WriteTo.Console() + .CreateLogger(); + +var clusterOptions = new ClusterOptions() +{ + ConnectionString = "couchbase://localhost", + UserName = "Administrator", + Password = "password", + EnableDnsSrvResolution = false, +}; + +clusterOptions = clusterOptions.WithLogging(new SerilogLoggerFactory()); + +var exampleCluster = await Cluster.ConnectAsync(clusterOptions); +await exampleCluster.WaitUntilReadyAsync(TimeSpan.FromSeconds(10)); +var travelSample = await exampleCluster.BucketAsync("travel-sample"); +var inventoryScope = travelSample.Scope("inventory"); +await Task.Delay(1000); + +await RangeScanAllDocuments(inventoryScope); +await RangeScanPrefixScan(inventoryScope); + +async Task RangeScanAllDocuments(IScope scope) +{ + var collection = scope.Collection("hotel"); + // tag::rangeScanAllDocuments[] + IAsyncEnumerable results = collection.ScanAsync(new RangeScan()); + + await foreach (var scanResult in results) + { + Log.Information(scanResult.Id); + Log.Information(scanResult.ContentAs().ToString()); + } + + // alternate declaration + var scan2 = new RangeScan(from: ScanTerm.Inclusive("id001"), to: ScanTerm.Inclusive("id999")); + // end::rangeScanAllDocuments[] +} + +async Task RangeScanPrefixScan(IScope scope) +{ + var collection = scope.Collection("hotel"); + // tag::rangeScanPrefix[] + IAsyncEnumerable results = collection.ScanAsync( + new PrefixScan("alice::") + ); + + await foreach (var scanResult in results) + { + Log.Information(scanResult.Id); + } + // end::rangeScanPrefix[] +} + +async Task RangeScanSamplingScan(IScope scope) +{ + var collection = scope.Collection("hotel"); + // tag::rangeScanSample[] + IAsyncEnumerable results = collection.ScanAsync( + new SamplingScan(limit: 100) + ); + + await foreach (var scanResult in results) + { + Log.Information(scanResult.Id); + } + // end::rangeScanSample[] +} +async Task RangeScanAllDocumentIds(IScope scope) +{ + var collection = scope.Collection("hotel"); + // tag::rangeScanAllDocumentIds[] + IAsyncEnumerable results = collection.ScanAsync( + new RangeScan(), + new ScanOptions().IdsOnly(true)); + + await foreach (var scanResult in results) + { + Log.Information(scanResult.Id); + } + // end::rangeScanAllDocumentIds[] +} + +record Hotel(string name, string title, string address); diff --git a/modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/RangeScan.csproj b/modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/RangeScan.csproj new file mode 100644 index 00000000..78110fba --- /dev/null +++ b/modules/howtos/examples/Couchbase.Examples.KV/RangeScan/RangeScan/RangeScan.csproj @@ -0,0 +1,19 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + + diff --git a/modules/howtos/examples/Couchbase.Examples.KV/SubDocument/Program.cs b/modules/howtos/examples/Couchbase.Examples.KV/SubDocument/Program.cs new file mode 100644 index 00000000..ba5021b1 --- /dev/null +++ b/modules/howtos/examples/Couchbase.Examples.KV/SubDocument/Program.cs @@ -0,0 +1,71 @@ +using Couchbase; +using Couchbase.Core.Exceptions.KeyValue; +using Couchbase.KeyValue; + +var clusterOptions = new ClusterOptions() +{ + ConnectionString = "couchbase://localhost", + UserName = "Administrator", + Password = "password", + EnableDnsSrvResolution = false, +}; + +var exampleCluster = await Cluster.ConnectAsync(clusterOptions); +await exampleCluster.WaitUntilReadyAsync(TimeSpan.FromSeconds(10)); +var travelSample = await exampleCluster.BucketAsync("travel-sample"); +var inventoryScope = travelSample.Scope("inventory"); +await Task.Delay(1000); + +await LookupInAnyReplica(travelSample.DefaultCollection()); +await LookupInAllReplicas(travelSample.DefaultCollection()); + +async Task LookupInAnyReplica(ICouchbaseCollection collection) +{ + // tag::lookup-in-any-replica[] + try + { + var result = await collection.LookupInAnyReplicaAsync( + "hotel_10138", + specs => specs.Get("geo.lat") + ); + + var geoLat = result.ContentAs(0); + Console.Out.WriteLine($"getFunc: Latitude={geoLat}"); + } + catch (PathNotFoundException) + { + Console.Error.WriteLine("The version of the document" + + " on the server node that responded quickest" + + " did not have the requested field."); + } + catch (DocumentUnretrievableException) + { + Console.Error.WriteLine("Document was not present" + + " on any server node"); + } + // end::lookup-in-any-replica[] +} + +async Task LookupInAllReplicas(ICouchbaseCollection collection) +{ + // tag::lookup-in-all-replicas[] + IAsyncEnumerable result = collection.LookupInAllReplicasAsync( + "hotel_10138", + specs => specs.Get("geo.lat")); + + await foreach (var replicaResult in result) + { + try + { + var geoLat = replicaResult.ContentAs(0); + Console.Out.WriteLine($"getFunc: Latitude={geoLat}"); + } + catch (PathNotFoundException) + { + Console.Error.WriteLine("The version of the document" + + " on the server node that responded quickest" + + " did not have the requested field."); + } + } + // end::lookup-in-all-replicas[] +} \ No newline at end of file diff --git a/modules/howtos/examples/Couchbase.Examples.KV/SubDocument/SubDocument.csproj b/modules/howtos/examples/Couchbase.Examples.KV/SubDocument/SubDocument.csproj new file mode 100644 index 00000000..81184a28 --- /dev/null +++ b/modules/howtos/examples/Couchbase.Examples.KV/SubDocument/SubDocument.csproj @@ -0,0 +1,14 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + diff --git a/modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs b/modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs new file mode 100644 index 00000000..00724de6 --- /dev/null +++ b/modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs @@ -0,0 +1,226 @@ +using Couchbase; +using Couchbase.Core.Exceptions; +using Couchbase.KeyValue; +using Couchbase.Search; +using Couchbase.Search.Queries.Compound; +using Couchbase.Search.Queries.Range; +using Couchbase.Search.Queries.Simple; +using Couchbase.Search.Queries.Vector; +using Serilog; +using Serilog.Extensions.Logging; + +Serilog.Log.Logger = new LoggerConfiguration() + .Enrich.FromLogContext() + .MinimumLevel.Verbose() + .WriteTo.Console() + .CreateLogger(); + +var clusterOptions = new ClusterOptions() +{ + ConnectionString = "couchbase://localhost", + UserName = "Administrator", + Password = "password", + EnableDnsSrvResolution = false, +}; + +clusterOptions = clusterOptions.WithLogging(new SerilogLoggerFactory()); + +var exampleCluster = await Cluster.ConnectAsync(clusterOptions); +await exampleCluster.WaitUntilReadyAsync(TimeSpan.FromSeconds(10)); +var travelSample = await exampleCluster.BucketAsync("travel-sample"); +var inventoryScope = travelSample.Scope("inventory"); +await Task.Delay(1000); + +await ClusterGetAllIndexes(exampleCluster); +await ClusterSearch(exampleCluster); +await ScopedGetAllIndexes(inventoryScope); +await ScopedSearch(inventoryScope); + +async Task ScopedGetAllIndexes(IScope scope) +{ + // tag::scopedGetAllIndexes[] + Log.Information("Fetching all search indexes on given scope..."); + var searchIndexes = scope.SearchIndexes; + var allScopedIndexes = await searchIndexes.GetAllIndexesAsync(); + foreach (var idx in allScopedIndexes) + { + Serilog.Log.Information("Search Index: {idx} in scope {scope}", idx.Name, scope.Name); + } + // end::scopedGetAllIndexes[] +} + +async Task ScopedSearch(IScope scope) +{ + // Assumes the scoped index "index-hotel-description" has already been created. + // see https://docs.couchbase.com/server/7.6/fts/fts-creating-index-from-UI-classic-editor-dynamic.html + // for information on how to create a scoped index. + // tag::scopedFtsSearch[] + var searchResult = await scope.SearchAsync("index-hotel-description", + SearchRequest.Create( + new MatchQuery("swanky")), + new SearchOptions().Limit(10)); + // end::scopedFtsSearch[] + // tag::scopedEnumerateHits[] + foreach (var hit in searchResult.Hits) + { + string documentId = hit.Id; + double score = hit.Score; + Log.Information("Hit: {id}: {score}", documentId, score); + } + // end::scopedEnumerateHits[] + // tag::scopedEnumerateFacets[] + foreach (var keyValuePair in searchResult.Facets) + { + var facet = keyValuePair.Value; + var name = facet.Name; + var total = facet.Total; + Log.Information("Facet: {key}={name},{total}", keyValuePair.Key, name, total); + } + // end::scopedEnumerateFacets[] +} + +async Task ScopedDateSearch(IScope scope) +{ + // tag::scopedDateSearch[] + var searchResult = await scope.SearchAsync("index-name", + SearchRequest.Create( + new DateRangeQuery() + .Start(DateTime.Parse("2021-01-01"), inclusive: true) + .End(DateTime.Parse("2021-02-01"), inclusive: false) + ), new SearchOptions().Limit(10)); + // end::scopedDateSearch[] + foreach (var row in searchResult) + { + Log.Information("result: {row}", row.Locations?.ToString()); + } +} + +async Task ScopedConjunctionSearch(IScope scope) +{ + // tag::scopedConjunctionSearch[] + var searchResult = await scope.SearchAsync("index-name", + SearchRequest.Create( + new ConjunctionQuery( + new DateRangeQuery() + .Start(DateTime.Parse("2021-01-01"), inclusive: true) + .End(DateTime.Parse("2021-02-01"), inclusive: false), + new MatchQuery("swanky")) + ), new SearchOptions().Limit(10)); + // end::scopedConjunctionSearch[] + foreach (var row in searchResult) + { + Log.Information("result: {row}", row.Locations?.ToString()); + } +} + +async Task ScopedConsistentWithSearch(IScope scope) +{ + // tag::scopedConsistentWithSearch[] + var searchResult = await scope.SearchAsync("index-hotel-description", + SearchRequest.Create( + new MatchQuery("swanky") + ), new SearchOptions() + .Limit(10) + .ScanConsistency(SearchScanConsistency.RequestPlus) + ); + // end::scopedConsistentWithSearch[] + foreach (var row in searchResult) + { + Log.Information("result: {row}", row.Locations?.ToString()); + } +} + +async Task ClusterSearch(ICluster cluster) +{ + try + { + // tag::clusterFtsSearch[] + var searchResult = await cluster.SearchAsync( + "travel-sample.inventory.index-hotel-description", + SearchRequest.Create(new MatchQuery("swanky")), + new SearchOptions().Limit(10) + ); + // end::clusterFtsSearch[] + foreach (var row in searchResult) + { + Log.Information("result: {row}", row.Locations?.ToString()); + } + } + catch (IndexNotFoundException e) + { + Log.Error(e, $"IndexNotFoundException: {nameof(ClusterSearch)}"); + } +} + +async Task ClusterGetAllIndexes(ICluster cluster) +{ + Log.Information("Fetching all search indexes on cluster..."); + // tag::clusterGetAllIndexes[] + var searchIndexes = cluster.SearchIndexes; + var allScopedIndexes = await searchIndexes.GetAllIndexesAsync(); + foreach (var idx in allScopedIndexes) + { + Serilog.Log.Information("Search Index: {idx}", idx.Name); + } + // end::clusterGetAllIndexes[] +} + +async Task ScopedVectorQuery(IScope scope) +{ + // in actual usage, these vectors would be generated by some other AI toolkit. + float[] preGeneratedVectors = new[] { 0.001f, 0.002f, 0.003f }; + //tag::scopedVector1[] + var searchRequest = SearchRequest.Create( + VectorSearch.Create(new VectorQuery("vector_field", preGeneratedVectors)) + ); + + var searchResult = scope.SearchAsync("travel-vector-index", searchRequest, new SearchOptions()); + //end::scopedVector1[] +} + +async Task ScopedVectorQueryMultiple(IScope scope) +{ + // in actual usage, these vectors would be generated by some other AI toolkit. + float[] preGeneratedVectors = new[] { 0.001f, 0.002f, 0.003f }; + var vectorQuery = new VectorQuery("vector-field-1", preGeneratedVectors); + var anotherVectorQuery = new VectorQuery("vector-field-2", preGeneratedVectors); + //tag::scopedVector2[] + var searchRequest = SearchRequest.Create( + VectorSearch.Create(new[] + { + vectorQuery.WithOptions( + new VectorQueryOptions().WithNumCandidates(2).WithBoost(0.3f)), + anotherVectorQuery.WithOptions( + new VectorQueryOptions().WithNumCandidates(5).WithBoost(0.7f)), + }) + ); + + // or with C# record syntax + var searchRequest2 = SearchRequest.Create( + new VectorSearch(new[] + { + vectorQuery + with { Options = new VectorQueryOptions() { NumCandidates = 2, Boost = 0.3f } }, + anotherVectorQuery + with { Options = new VectorQueryOptions() { NumCandidates = 5, Boost = 0.3f } }, + }, + Options: new VectorSearchOptions(VectorQueryCombination.And) + )); + + var searchResult = scope.SearchAsync("travel-vector-index", searchRequest, new SearchOptions()); + //end::scopedVector2[] +} + +async Task ScopedVectorWithFts(IScope scope) +{ + // in actual usage, these vectors would be generated by some other AI toolkit. + float[] preGeneratedVectors = new[] { 0.001f, 0.002f, 0.003f }; + //tag::scopedVectorWithFts[] + var searchRequest = new SearchRequest( + SearchQuery: new MatchQuery("swanky"), + VectorSearch: VectorSearch.Create(new VectorQuery("vector_field", preGeneratedVectors)) + ); + + var searchResult = scope.SearchAsync("travel-index", searchRequest, new SearchOptions()); + //end::scopedVectorWithFts[] +} \ No newline at end of file diff --git a/modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/SearchV2Examples.csproj b/modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/SearchV2Examples.csproj new file mode 100644 index 00000000..02ed2a19 --- /dev/null +++ b/modules/howtos/examples/Couchbase.Examples.SearchV2/SearchV2Examples/SearchV2Examples.csproj @@ -0,0 +1,24 @@ + + + + Exe + net8.0 + enable + enable + + + + + + + + + + + + + + + diff --git a/modules/howtos/pages/full-text-searching-with-sdk.adoc b/modules/howtos/pages/full-text-searching-with-sdk.adoc index abc603ab..67d50afe 100644 --- a/modules/howtos/pages/full-text-searching-with-sdk.adoc +++ b/modules/howtos/pages/full-text-searching-with-sdk.adoc @@ -10,57 +10,61 @@ include::project-docs:partial$attributes.adoc[] -Full Text Search or FTS allows you to create, manage, and query full text indexes on JSON documents stored in Couchbase buckets. -It uses natural language processing for querying documents, provides relevance scoring on the results of your queries, and has fast indexes for querying a wide range of possible text searches. -Some of the supported query types include simple queries like Match and Term queries; range queries like Date Range and Numeric Range; and compound queries for conjunctions, disjunctions, and/or boolean queries. +Full Text Search or FTS allows you to create, manage and query full text indexes on JSON documents stored in Couchbase buckets. +It uses natural language processing for indexing and querying documents, provides relevance scoring on the results of your queries and has fast indexes for querying a wide range of possible text searches. + +Some of the supported query-types include simple queries like Match and Term queries, range queries like Date Range and Numeric Range and compound queries for conjunctions, disjunctions and/or boolean queries. + +The Full Text Search service also supports vector search from Couchbase Server 7.6 onwards. + The .NET SDK exposes an API for performing FTS queries which abstracts some of the complexity of using the underlying REST API. +== Getting Started + +After familiarizing yourself with how to create and query a Search index in the UI you can query it from the SDK. + +There are two APIs for querying search: `cluster.searchQuery()`, and `cluster.search()`. +Both are also available at the Scope level. + +The former API supports FTS queries (`SearchQuery`), while the latter additionally supports the `VectorSearch` added in 7.6. +Most of this documentation will focus on the former API, as the latter is in @Stability.Volatile status. + +We will perform an FTS query here - see the <> section for examples of that. // As of Couchbase Server 6.5, FTS... == Examples -Search queries are executed at Cluster level (not bucket or collection). +Search queries are executed at Cluster level. +As of Couchbase Server 7.6, they can also be executed at the Scope level. + Here is a simple MatchQuery that looks for the text “swanky” using a defined index: [source,csharp] ---- -var result = cluster.SearchQuery( - "travel-sample-index-hotel-description", - new MatchQuery("swanky"), - options => { - options.WithLimit(10); - } -); +// as a cluster-level search +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=clusterFtsSearch,indent=0] + +// as a scope-level search +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedFtsSearch,indent=0] ---- + + All simple query types are created in the same manner, some have additional properties, which can be seen in common query type descriptions. Couchbase FTS's xref:7.1@server:fts:fts-query-types.adoc[range of query types] enable powerful searching using multiple options, to ensure results are just within the range wanted. Here is a date range query that looks for dates between 1st January 2021 and 31st January: [source,csharp] ---- -var result = cluster.SearchQuery( - "index-name", - new DateRangeQuery() - .Start(DateTime.Parse("2021-01-01"), true) // final parameter is if the range is inclusive - .End(DateTime.Parse("2021-02-01"), false), - options => options.Limit(10) -); +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedDateSearch,indent=0] ---- A conjunction query contains multiple child queries; its result documents must satisfy all of the child queries: [source,csharp] ---- -var result = cluster.SearchQuery( - "index-name", - new ConjunctionQuery( - new DateRangeQuery() - .Start(DateTime.Parse("2021-01-01"), true) - .Start(DateTime.Parse("2021-02-01"), false), - new MatchQuery("Swanky") -); +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedConjunctionSearch,indent=0] ---- == Working with Results @@ -74,23 +78,13 @@ such as success total hits and how long the query took to execute in the cluster [source,csharp] .Iterating hits ---- -foreach (var hit in result.Hits) -{ - string documentId = hit.Id; - double score = hit.Score; - ... -} +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedEnumerateHits,indent=0] ---- [source,csharp] .Iterating facets ---- -foreach (var facet in result.Facets) -{ - var name = facet.Name; - var total = facet.Total; - ... -} +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedEnumerateFacets,indent=0] ---- @@ -101,11 +95,60 @@ FTS allows `RequestPlus` queries -- _Read-Your-Own_Writes (RYOW)_ consistency, e [source,csharp] ---- -var result = cluster.SearchQuery( - "travel-sample-index-hotel-description", - new MatchQuery("swanky"), - options => { - options.WithConsistency(ScanConsistency.RequestPlus); - } -); + +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedConsistentWithSearch,indent=0] +---- + +== Scoped vs Global Indexes +The FTS APIs exist at both the `Cluster` and `Scope` levels. + +This is because FTS supports, as of Couchbase Server 7.6, a new form of "scoped index" in addition to the traditional "global index". + +It's important to use the `Cluster.SearchAsync()` for global indexes, and `Scope.SearchAsync()` for scoped indexes. +(`Cluster.SearchQueryAsync()` is still available for compatibility with earlier versions of the SDK) + +== Vector Search +As of Couchbase Server 7.6, the FTS service supports vector search in additional to traditional full text search queries. +// todo link to the server docs when available + +==== Single vector query +In this first example we are performing a single vector query: +[source,csharp] +---- +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedVector1,indent=0] +---- + +Let's break this down. +We create a `SearchRequest`, which can contain a traditional FTS query `SearchQuery` and/or the new `VectorSearch`. +Here we are just using the latter. + +The `VectorSearch` allows us to perform one or more `VectorQuery` s. + +The `VectorQuery` itself takes the name of the document field that contains embedded vectors ("vector_field" here), plus actual vector query in the form of a `float[]`. + +(Note that Couchbase itself is not involved in generating the vectors, and these will come from an external source such as an embeddings API.) + +Finally we execute the `SearchRequest` against the FTS index "travel-vector-index", which has previously been setup to vector index the "vector_field" field. + +This happens to be a scoped index so we are using `scope.SearchAsync()`. +If it was a global index we would use `cluster.SearchAsync()` instead - see <>. + +It returns the same `SearchResult` detailed earlier. + +==== Multiple vector queries +You can run multiple vector queries together: + +[source,csharp] +---- +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedVector2,indent=0] +---- + +How the results are combined (ANDed or ORed) can be controlled with `VectorSearchOptions().WithVectorQueryCombination()`. + +==== Combining FTS and vector queries +You can combine a traditional FTS query with vector queries: + +[source,casharp] ---- +include::example$Couchbase.Examples.SearchV2/SearchV2Examples/Program.cs[tag=scopedVectorWithFts,indent=0] +---- \ No newline at end of file diff --git a/modules/howtos/pages/kv-operations.adoc b/modules/howtos/pages/kv-operations.adoc index 644c559d..c468c6af 100644 --- a/modules/howtos/pages/kv-operations.adoc +++ b/modules/howtos/pages/kv-operations.adoc @@ -215,6 +215,76 @@ Here is an example showing an upsert in the `users` collection, which lives in t include::example$KvOperations.csx[tag=named-collection-upsert,indent=0] ---- +[#kv-range-scan] +== KV Range Scan + +A range scan gives you documents from a collection, even if you don't know the document IDs. +This feature requires Couchbase Server 7.6 or newer. + +TIP: KV range scan is suitable for use cases that require relatively low concurrency and tolerate relatively high latency. +If your application does many scans at once, or requires low latency results, we recommend using {sqlpp} (with a primary index on the collection) instead of KV range scan. + + +[#kv-range-scan-range] +=== Range scan + +Here's an example of a KV range scan that gets all documents in a collection: + +.KV Range Scan for all documents in a collection +[source,java] +---- +include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanAllDocuments,indent=0] +---- +<1> The `RangeScan()` constructor has two optional nullable parameters: `from` and `to`. +If you pass null like in this example, you'll get all documents in the collection. +These parameters are for advanced use cases; you probably won't need to specify them. +Instead, it's more common to use the "prefix" scan type shown in the next example. + +[#kv-range-scan-prefix] +=== Prefix scan + +KV range scan can also give you all documents whose IDs start with the same prefix. + +Imagine you have a collection where documents are named like this: `::`. +In other words, the document ID starts with the name of the user associated with the document, followed by a delimiter, and then a UUID. +If you use this document naming scheme, you can use a prefix range scan to get all documents associated with a user. + +For example, to get all documents associated with user "alice", you would write: + +.KV Range Scan for all documents in a collection whose IDs start with "alice::" +[source,java] +---- +include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanPrefix,indent=0] +---- +<1> Note the scan type is *prefixScan*. + +[#kv-range-scan-sample] +=== Sample scan + +If you want to get random documents from a collection, use a sample scan. + +.KV Range Scan for 100 random documents +[source,java] +---- +include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanSample,indent=0] +---- +<1> In this example, no more than `100` documents are returned. + +[#kv-range-scan-only-ids] +=== Get IDs instead of full document + +If you only want the document IDs, set the `idsOnly` option to true, like this: + +.KV Range Scan for all document IDs in a collection +[source,java] +---- +include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanAllDocumentIds,indent=0] +---- +<1> The returned `ScanResult` objects throw `NoSuchElementException` if you try to access any property other than `Id`. + +Setting `IdsOnly` to true also works with the other scan types described above. + + == Additional Resources diff --git a/modules/howtos/pages/subdocument-operations.adoc b/modules/howtos/pages/subdocument-operations.adoc index b818794f..29ed046f 100644 --- a/modules/howtos/pages/subdocument-operations.adoc +++ b/modules/howtos/pages/subdocument-operations.adoc @@ -260,6 +260,27 @@ In this case, the _createPath_ option may be used. include::example$SubDocument.csx[tag=create-path,indent=0] ---- +== Reading Sub-Documents From Replicas + +Couchbase Server 7.6 and later support Sub-Doc lookup from replicas. + +The `collection.lookupInAnyReplica()` method returns the first response -- from active or replica: + +[source,java] +---- +include::example$Couchbase.Examples.KV/SubDocument/Program.cs[tag=lookup-in-any-replica,indent=0] +---- + +The `collection.LookupInAllReplicas()` fetches all available replicas (and the active copy), and returns all responses. + +[source,java] +---- +include::example$Couchbase.Examples.KV/SubDocument/Program.cs[tag=lookup-in-all-replicas,indent=0] +---- + +You may want to use `LookupInAllReplicas` to build a consensus, +but it's more likely that you'll make use of `LookupInAnyReplica` as a fallback to a `LookupIn`, when the active node times out. + == Concurrent Modifications Concurrent Sub-Document operations on different parts of a document will not conflict. From a8cfb8efc3b8765fb89e7d084b44abe619fc8a8e Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Wed, 6 Mar 2024 06:49:52 +0000 Subject: [PATCH 17/29] Java --> C# --- modules/howtos/pages/kv-operations.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/howtos/pages/kv-operations.adoc b/modules/howtos/pages/kv-operations.adoc index c468c6af..bf890a8b 100644 --- a/modules/howtos/pages/kv-operations.adoc +++ b/modules/howtos/pages/kv-operations.adoc @@ -231,7 +231,7 @@ If your application does many scans at once, or requires low latency results, we Here's an example of a KV range scan that gets all documents in a collection: .KV Range Scan for all documents in a collection -[source,java] +[source,csharp] ---- include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanAllDocuments,indent=0] ---- @@ -252,7 +252,7 @@ If you use this document naming scheme, you can use a prefix range scan to get a For example, to get all documents associated with user "alice", you would write: .KV Range Scan for all documents in a collection whose IDs start with "alice::" -[source,java] +[source,csharp] ---- include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanPrefix,indent=0] ---- @@ -264,7 +264,7 @@ include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeS If you want to get random documents from a collection, use a sample scan. .KV Range Scan for 100 random documents -[source,java] +[source,csharp] ---- include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanSample,indent=0] ---- @@ -276,7 +276,7 @@ include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeS If you only want the document IDs, set the `idsOnly` option to true, like this: .KV Range Scan for all document IDs in a collection -[source,java] +[source,csharp] ---- include::example$Couchbase.Examples.KV/RangeScan/RangeScan/Program.cs[tag=rangeScanAllDocumentIds,indent=0] ---- From b99eb1ad2e33fbfdf03167094174bf363d287586 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 7 Mar 2024 14:11:16 +0000 Subject: [PATCH 18/29] It's 3.4! --- antora.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/antora.yml b/antora.yml index 2015f634..c93358de 100644 --- a/antora.yml +++ b/antora.yml @@ -1,5 +1,5 @@ name: dotnet-sdk -version: '3.5' +version: '3.4' title: ".NET SDK" start_page: hello-world:overview.adoc nav: @@ -7,14 +7,14 @@ nav: asciidoc: attributes: server_version: '7.2' - sdk_current_version: '3.5.0' - sdk_dot_minor: 3.5 + sdk_current_version: '3.4.14' + sdk_dot_minor: 3.4 sdk_dot_major: 3.x version-server: '7.2' version-common: '7.2' name_platform: '.NET' name-sdk: '.NET SDK' - sdk_api: '3.5' + sdk_api: '3.4' sdk-api-link: https://docs.couchbase.com/sdk-api/couchbase-net-client/ sdk-gh-link: https://github.com/couchbase/couchbase-net-client/ From 8562c671e9cf7d6be2183fb719c9c2e05ebf4b1b Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 7 Mar 2024 15:06:58 +0000 Subject: [PATCH 19/29] remove dupe --- modules/project-docs/pages/compatibility.adoc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/project-docs/pages/compatibility.adoc b/modules/project-docs/pages/compatibility.adoc index a41c5463..80eda2df 100644 --- a/modules/project-docs/pages/compatibility.adoc +++ b/modules/project-docs/pages/compatibility.adoc @@ -152,11 +152,6 @@ include::hello-world:partial$supported.adoc[] | *✔* | *✔* | *✔* - -| .NET 8.0 (Long-Term Support) -| *✖* -| *✔* From 3.4.14 -| *✔* |=== From 52bfa78e8dc9cbeaa8b9e5efe8b575452a1bcaae Mon Sep 17 00:00:00 2001 From: Jeffry Morris Date: Sat, 16 Mar 2024 01:07:58 -0700 Subject: [PATCH 20/29] NCBC-3724: deprecate 3.4.10 (#329) * NCBC-3724: deprecate 3.4.10 * NCBC-3724 depreacate 3.4.10 --------- Co-authored-by: Richard Smedley --- modules/project-docs/pages/sdk-release-notes.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/project-docs/pages/sdk-release-notes.adoc b/modules/project-docs/pages/sdk-release-notes.adoc index f71071af..8a0aeded 100644 --- a/modules/project-docs/pages/sdk-release-notes.adoc +++ b/modules/project-docs/pages/sdk-release-notes.adoc @@ -257,6 +257,10 @@ The changes also help application start up speed in non-AOT cases. [#version-3-4-10] === Version 3.4.10 (03 Aug 2023) +WARNING: v3.4.10 is incompatible with Server 7.6 and later -- do not use. +This version of the SDK has been deprecated; use 3.4.11 or greater. +Details can be found in https://issues.couchbase.com/browse/NCBC-3724[NCBC-3724]. + Version 3.4.10 is the eleventh release of the 3.4 series. https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.10.zip[Download] | From 2eaa1c2fec1f2e9c3777bf199a7815f6e508bb8e Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Fri, 22 Mar 2024 14:01:00 +0000 Subject: [PATCH 21/29] CC --- LICENSE | 638 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 437 insertions(+), 201 deletions(-) diff --git a/LICENSE b/LICENSE index 261eeb9e..cbe5ad16 100644 --- a/LICENSE +++ b/LICENSE @@ -1,201 +1,437 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. +Attribution-NonCommercial-ShareAlike 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International +Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution-NonCommercial-ShareAlike 4.0 International Public License +("Public License"). To the extent this Public License may be +interpreted as a contract, You are granted the Licensed Rights in +consideration of Your acceptance of these terms and conditions, and the +Licensor grants You such rights in consideration of benefits the +Licensor receives from making the Licensed Material available under +these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. BY-NC-SA Compatible License means a license listed at + creativecommons.org/compatiblelicenses, approved by Creative + Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + e. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name + of a Creative Commons Public License. The License Elements of this + Public License are Attribution, NonCommercial, and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + i. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + k. NonCommercial means not primarily intended for or directed towards + commercial advantage or monetary compensation. For purposes of + this Public License, the exchange of the Licensed Material for + other material subject to Copyright and Similar Rights by digital + file-sharing or similar means is NonCommercial provided there is + no payment of monetary compensation in connection with the + exchange. + + l. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + m. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + n. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part, for NonCommercial purposes only; and + + b. produce, reproduce, and Share Adapted Material for + NonCommercial purposes only. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. Additional offer from the Licensor -- Adapted Material. + Every recipient of Adapted Material from You + automatically receives an offer from the Licensor to + exercise the Licensed Rights in the Adapted Material + under the conditions of the Adapter's License You apply. + + c. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties, including when + the Licensed Material is used other than for NonCommercial + purposes. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + b. ShareAlike. + + In addition to the conditions in Section 3(a), if You Share + Adapted Material You produce, the following conditions also apply. + + 1. The Adapter's License You apply must be a Creative Commons + license with the same License Elements, this version or + later, or a BY-NC-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the + Adapter's License You apply. You may satisfy this condition + in any reasonable manner based on the medium, means, and + context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms + or conditions on, or apply any Effective Technological + Measures to, Adapted Material that restrict exercise of the + rights granted under the Adapter's License You apply. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database for NonCommercial purposes + only; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material, + including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. From 7005ea836a48ed9ae08899ee8c9c80f8b4d3618b Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 28 Mar 2024 18:04:03 +0000 Subject: [PATCH 22/29] 7.6? Use 3.4.9 --- modules/project-docs/pages/compatibility.adoc | 227 +++++++++++++----- 1 file changed, 164 insertions(+), 63 deletions(-) diff --git a/modules/project-docs/pages/compatibility.adoc b/modules/project-docs/pages/compatibility.adoc index 80eda2df..e10e1ab7 100644 --- a/modules/project-docs/pages/compatibility.adoc +++ b/modules/project-docs/pages/compatibility.adoc @@ -1,61 +1,57 @@ = Compatibility -:description: Features available in different SDK versions, and compatibility between Server and SDK. \ +:description: Platform compatibility, and features available in different SDK versions, and compatibility between Server and SDK. \ Plus notes on Cloud, networks, and AWS Lambda. :page-aliases: ROOT:overview,ROOT:compatibility-versions-features,compatibility-versions-features -:page-toclevels: 2 -:page-topic-type: reference +:page-toclevels: 3 +:table-caption!: -include::partial$attributes.adoc[] [abstract] {description} -== Couchbase Version/SDK Version Matrix +The Couchbase .NET SDK is compatible with https://docs.microsoft.com/en-us/dotnet/standard/net-standard[.NET Standard] 2.0 and .NET Standard 2.1, via the currently supported Microsoft .NET SDKs. -Couchbase SDKs are tested against a variety of different environments to ensure both backward and forward compatibility with different versions of Couchbase Server. -The matrix below denotes the version of Couchbase Server, the version of the .NET SDK and whether the SDK is: -* ✖ *Unsupported*: This combination is not tested, and is not within the scope of technical support if you have purchased a support agreement. -* ◎ *Compatible*: This combination has been tested previously, and should be compatible. -This combination is not recommended by our technical support organization. -It is best to upgrade either the SDK or the Couchbase version you are using. -* ✔ *Supported*: This combination is subject to ongoing quality assurance, and is fully supported by our technical support organization. +== Platform Compatibility -.Recommended SDK per Server Version Matrix + + + +=== .NET Framework Version Compatibility [[dotnet-compatibility]] + +include::hello-world:partial$supported.adoc[] + +.Recommended .NET Versions per SDK [#table_sdk_versions] -[cols="40,20,25,20"] +[cols="40,20,25"] |=== -| | SDK 3.0, 3.1 | SDK 3.2 | SDK 3.3, 3.4 +| | SDK 3.0 - 3.3 | SDK 3.4 -| *Server 6.6* -| *✔* +| .NET 6.0 (Long-Term Support) | *✔* | *✔* -| *Server 7.0 - 7.2* -| *◎* +| .NET 7.0 +| *✖* +| *✖* + +| .NET 8.0 (Recommended, Long-Term Support) +| *✖* +| *✔* From 3.4.14 + +| .NET Framework 4.6.2+ | *✔* | *✔* |=== -Note the https://www.couchbase.com/support-policy[End of Life dates^] for Couchbase Server and SDK versions. -See the notes there for Support details. -=== Capella Compatibility -The Couchbase .NET SDK is fully compatible with Couchbase Capella, our fully-hosted database-as-a-service. -To make development easier, the SDK includes the Capella client certificate ready installed for .NET 6.0 and later clients. -However, for clients using .NET Framework, the Capella certificate must be manually installed in the local machine's certificate store, as the API necessary for in-memory certificates isn't available under the legacy framework. - -include::{version-common}@sdk:shared:partial$capella.adoc[tag=cloud] - - -== Platform Compatibility +=== OS Compatibility Microsoft's CLR eliminates many of the compatibility problems found in other languages, but occasional problems can be caused by the underlying Operating System (OS). -The Couchbase .NET SDK is tested and supported on the following platforms: +The Couchbase .NET 3.4 SDK is tested and supported on the following platforms: **** [discrete] @@ -87,8 +83,134 @@ Although installable or compilable on many other platforms, we cannot provide su AWS Amazon Graviton2, Apple M1 ARM processors, and ARMv8 on Ubuntu 20.04 (from SDK 3.4). +The .NET SDK should also be expected to run on other commonly-available GNU/Linux distributions which support an appropriate .NET Standard, but not all combinations can be tested -- notable exceptions are listed below. + +//// +==== Alpine Linux Compatibility + +The https://netty.io[Netty] I/O library used by our JVM SDKs supports native optimizations to achieve higher throughput and lower latency +-- which the SDK enables by default. +Those modules are compiled against `glibc` and Alpine Linux uses `musl` instead -- +so the {name-sdk} is unable to complete bootstrapping on this platform. + +Because Alpine Linux does not have the `glibc` support needed, +we highly recommend that you seek an alternative distribution where possible. +If that is not a option, then a possible workaround that can be applied is as follows: + +* Disable the native IO: ++ +[source,toml] +==== +ClusterEnvironment env = ClusterEnvironment.builder().ioEnvironment(IoEnvironment.enableNativeIo(false)).build(); +==== + +* Disable it in Netty itself via the following system property: +`-Dcom.couchbase.client.core.deps.io.netty.transport.noNative=true` + +The downside of these workarounds is potentially reduced performance, which can be determined through benchmarking and profiling. +//// + + + +// Network Requirements +// uncomment include after 3.5 +// include::7.5@sdk:shared:partial$network-requirements.adoc[] +// and remove below: + + +=== Network Requirements + +Couchbase SDKs are developed to be run in an environment with local area network (LAN) like throughput and latencies. +While there is no technical issue that prevents the use across a wide area network (WAN), SDKs have certain thresholds around timeouts and behaviors to recover that will not be the same once the higher latency and possible bandwidth constraints and congestion of a WAN is introduced. +Couchbase tests for correctness under LAN like conditions. +For this reason, only LAN-like network environments are officially supported. + +Couchbase does document, for purposes of convenience when developing and performing basic operational work, what may need to be tuned when network throughputs and latencies are higher. +If you encounter issues, even with these tune-ables, you should attempt the same workload from a supported, LAN-like environment. + +==== Serverless Environments + +SDK API 3.4 introduces better resilience in handling errors that may occur when running your application in serverless environments, in particular when processes are frozen or thawed, and a rebalance is required. +This means official support for AWS Lambda, Azure Functions, and GCP Functions. + +NOTE: When *DNS SRV* records are used to connect to the SDK it is possible for the underlying addresses to change (i.e. the cluster could move). +The SDK will detect this and react accordingly so that your application can continue to work correctly. + + +// above^ + + + +== Couchbase Server Compatibility + + +Couchbase SDKs are tested against a variety of different environments to ensure both backward and forward compatibility with different versions of Couchbase Server. + +=== Couchbase Version/SDK Version Matrix + +The matrix below denotes the version of Couchbase Server, the version of the Scala SDK and whether the SDK is: + +* ✖ *Unsupported*: This combination is not tested, and is not within the scope of technical support if you have purchased a support agreement. +* ◎ *Compatible*: This combination has been tested previously, and should be compatible. +This combination is not recommended by our technical support organization. +It is best to upgrade either the SDK or the Couchbase version you are using. +* ✔ *Supported*: This combination is subject to ongoing quality assurance, and is fully supported by our technical support organization. + +.Recommended SDK per Server Version Matrix +[#table_sdk_versions] +|=== +| | 3.2 | 3.3 | 3.4 + +| *Server 6.6* +| *✔* +| *✔* +| *✔* + +| *Server 7.0 - 7.2* +| *✔* +| *✔* +| *✔* + +| *Server 7.6* +| *✔* +| *✔* +| *3.4.9* ① +|=== + +<1> 3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. +For compatibility of 3.4.11 - 3.4.15, please see https://issues.couchbase.com/browse/NCBC-3716[NCBC-3716]. + + +If you are on SDK versions 3.4.11 - 3.4.15, we strongly encourage you to upgrade to .NET SDK v3.5.1+. +While these versions will continue be compatible and supported with server 7.6.0, you may encounter timeout exceptions during rebalances under KV high workload. +A workaround is to disable fast failover by setting `EnablePushConfig` to false in the `ExperimentalOptions` of the `ClusterOptions`: + ++ +[source,csharp] +---- +var options = new ClusterOptions +{ + ConnectionString = "localhost" + UserName = "Administrator", + Password = "password", +}; +options.Experiments.EnablePushConfig = false; +---- + +Note the https://www.couchbase.com/support-policy[End of Life dates^] for Couchbase Server and SDK versions. +See the notes there for Support details. + +=== Capella Compatibility + +The Couchbase Scala SDK is fully compatible with Couchbase Capella, our fully-hosted database-as-a-service. +To make development easier, the SDK includes the Capella client certificate ready installed. + +include::{version-common}@sdk:shared:partial$capella.adoc[tag=cloud] + + +=== Couchbase New Feature Availability Matrix -== Couchbase New Feature Availability Matrix .Couchbase Server and SDK Supported Version Matrix [.table-merge-cells] @@ -106,7 +228,7 @@ AWS Amazon Graviton2, Apple M1 ARM processors, and ARMv8 on Ubuntu 20.04 (from S 3+| Since 2.7 | Distributed ACID Transactions -3+| Since 3.0 & Server 6.6footnote:[3.1.4 or more recent required for 1.0.0GA; preferably, use the latest SDK release.] +3+| Since 3.0 & Server 6.6 ② | Collections | Developer Preview in 6.6, SDK 3.0 @@ -117,52 +239,31 @@ AWS Amazon Graviton2, Apple M1 ARM processors, and ARMv8 on Ubuntu 20.04 (from S 2+| Since SDK 3.2.0 | Field Level Encryption v2 -3+| Since SDK 3.1.3footnote:[Field Level Encryption distributed as separate library.] +3+| Since SDK 3.1.3 ③ | Request Tracing 3+| Since SDK 3.0.3 |=== -== .NET Framework Version Compatibility [[dotnet-compatibility]] - -include::hello-world:partial$supported.adoc[] +② 3.1.4 or more recent required for 1.0.0GA; preferably, use the latest SDK release. -.Recommended .NET Versions per SDK -[#table_sdk_versions] -[cols="40,20,25,20"] -|=== -| | SDK 3.0 - 3.3 | SDK 3.4 | SDK 3.5 +③ Field Level Encryption is distributed as a separate library. -| .NET 6.0 (Long-Term Support) -| *✔* -| *✔* -| *✔* +=== API Version -| .NET 7.0 -| *✖* -| *✖* -| *✖* +include::{version-common}@sdk:shared:partial$api-version.adoc[tag=api-version] -| .NET 8.0 (Recommended, Long-Term Support) -| *✖* -| *✔* From 3.4.14 -| *✔* -| .NET Framework 4.6.2+ -| *✔* -| *✔* -| *✔* -|=== -// TODO - any outstanding improvements touched upon in https://github.com/couchbase/docs-sdk-dotnet/pull/310 +== SDK API Stability - -include::{version-common}@sdk:shared:partial$network-requirements.adoc[] +=== Interface Stability include::{version-common}@sdk:shared:partial$interface-stability-pars.adoc[tag=interface-stability-section] -include::{version-common}@sdk:shared:partial$api-version.adoc[tag=api-version] + +=== Older SDK Versions include::{version-common}@sdk:shared:partial$archive.adoc[tag=link] From f40a021cefdf2df84ccdafe397d82e47c8b799d2 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 28 Mar 2024 18:06:08 +0000 Subject: [PATCH 23/29] remove note thatneeds 3.5 --- modules/project-docs/pages/compatibility.adoc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/modules/project-docs/pages/compatibility.adoc b/modules/project-docs/pages/compatibility.adoc index e10e1ab7..d17f9b6d 100644 --- a/modules/project-docs/pages/compatibility.adoc +++ b/modules/project-docs/pages/compatibility.adoc @@ -181,7 +181,7 @@ It is best to upgrade either the SDK or the Couchbase version you are using. Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. For compatibility of 3.4.11 - 3.4.15, please see https://issues.couchbase.com/browse/NCBC-3716[NCBC-3716]. - +//// If you are on SDK versions 3.4.11 - 3.4.15, we strongly encourage you to upgrade to .NET SDK v3.5.1+. While these versions will continue be compatible and supported with server 7.6.0, you may encounter timeout exceptions during rebalances under KV high workload. A workaround is to disable fast failover by setting `EnablePushConfig` to false in the `ExperimentalOptions` of the `ClusterOptions`: @@ -198,6 +198,9 @@ var options = new ClusterOptions options.Experiments.EnablePushConfig = false; ---- +//// + + Note the https://www.couchbase.com/support-policy[End of Life dates^] for Couchbase Server and SDK versions. See the notes there for Support details. From 36a722bc3dffd32828f33244740d2e65978f8052 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 28 Mar 2024 19:59:53 +0000 Subject: [PATCH 24/29] Remove issue link --- modules/project-docs/pages/compatibility.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/project-docs/pages/compatibility.adoc b/modules/project-docs/pages/compatibility.adoc index d17f9b6d..150f0820 100644 --- a/modules/project-docs/pages/compatibility.adoc +++ b/modules/project-docs/pages/compatibility.adoc @@ -179,7 +179,7 @@ It is best to upgrade either the SDK or the Couchbase version you are using. <1> 3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. -For compatibility of 3.4.11 - 3.4.15, please see https://issues.couchbase.com/browse/NCBC-3716[NCBC-3716]. +While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. //// If you are on SDK versions 3.4.11 - 3.4.15, we strongly encourage you to upgrade to .NET SDK v3.5.1+. From 18ff76c8f6d64ab9841e1268043dbb5bb66a3139 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 28 Mar 2024 20:01:56 +0000 Subject: [PATCH 25/29] 3.4.9 & 7.6 --- .../project-docs/pages/sdk-release-notes.adoc | 45 +++++++++++++++++-- 1 file changed, 42 insertions(+), 3 deletions(-) diff --git a/modules/project-docs/pages/sdk-release-notes.adoc b/modules/project-docs/pages/sdk-release-notes.adoc index 8a0aeded..8e59a226 100644 --- a/modules/project-docs/pages/sdk-release-notes.adoc +++ b/modules/project-docs/pages/sdk-release-notes.adoc @@ -34,6 +34,12 @@ https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.15.zip[D https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.15[API Reference] | https://www.nuget.org/packages/CouchbaseNetClient/3.4.15[Nuget] +==== Known Issues + +* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. +3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. + ==== Fixed Issues * https://issues.couchbase.com/browse/NCBC-3599[NCBC-3599]: @@ -60,6 +66,12 @@ https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.14.zip[D https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.14[API Reference] | https://www.nuget.org/packages/CouchbaseNetClient/3.4.14[Nuget] +==== Known Issues + +* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. +3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. + ==== Fixed Issues * https://issues.couchbase.com/browse/NCBC-3434[NCBC-3434]: @@ -99,6 +111,12 @@ https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.13.zip[D https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.13[API Reference] | https://www.nuget.org/packages/CouchbaseNetClient/3.4.13[Nuget] +==== Known Issues + +* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. +3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. + ==== Fixed Issues * https://issues.couchbase.com/browse/NCBC-3397[NCBC-3397]: @@ -158,6 +176,12 @@ https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.12.zip[D https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.12[API Reference] | https://www.nuget.org/packages/CouchbaseNetClient/3.4.12[Nuget] +==== Known Issues + +* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. +3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. + ==== Fixed Issues * https://issues.couchbase.com/browse/NCBC-3490[NCBC-3490]: @@ -206,8 +230,13 @@ https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.11.zip[D https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.11[API Reference] | https://www.nuget.org/packages/CouchbaseNetClient/3.4.11[Nuget] -==== Fixed Issues +==== Known Issues +* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. +3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. + +==== Fixed Issues * https://issues.couchbase.com/browse/NCBC-3446[NCBC-3446]: When passed as `readonly(true)`, Readonly Query was accepting `UPDATE` query and was updating the document in collection, when it should have failed. @@ -257,9 +286,16 @@ The changes also help application start up speed in non-AOT cases. [#version-3-4-10] === Version 3.4.10 (03 Aug 2023) -WARNING: v3.4.10 is incompatible with Server 7.6 and later -- do not use. -This version of the SDK has been deprecated; use 3.4.11 or greater. +[WARNING] +==== +v3.4.10 is incompatible with Server 7.6 and later -- do not use. +This version of the SDK has been deprecated; +3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. + +While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. Details can be found in https://issues.couchbase.com/browse/NCBC-3724[NCBC-3724]. +==== Version 3.4.10 is the eleventh release of the 3.4 series. @@ -309,6 +345,9 @@ We have removed these NuGet dependencies for the .NET 6 Target, which will reduc Version 3.4.9 is the tenth release of the 3.4 series. +3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). +Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. + https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.9.zip[Download] | https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.9[API Reference] | https://www.nuget.org/packages/CouchbaseNetClient/3.4.9[Nuget] From 32c23cca342d759a964fcb5b50621c0dc2898ea6 Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Fri, 5 Apr 2024 11:35:04 +0100 Subject: [PATCH 26/29] Format fix DOC-12030 --- modules/ref/pages/client-settings.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/ref/pages/client-settings.adoc b/modules/ref/pages/client-settings.adoc index d8ee13e5..114b9734 100644 --- a/modules/ref/pages/client-settings.adoc +++ b/modules/ref/pages/client-settings.adoc @@ -216,7 +216,7 @@ If this method returns `true`, then the certificate will be accepted. Name: *With X509 Certificate Factory:: ClusterOption: `WithX509CertificateFactory(ICertificateFactory)` + -Default: `nul`l - if `null` it will be set internally by the default `CertificateFactory`. +Default: `null` - if `null` it will be set internally by the default `CertificateFactory`. + Gets or sets the `ICertificateFactory` to provide client certificates during TLS authentication. Will set the `TlsEnabled` flag to true if called. From a28e294ccb965e0813b9e550c7612468a1393d5e Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Fri, 12 Apr 2024 15:41:01 +0100 Subject: [PATCH 27/29] Update observability-tracing.adoc DOC-10512 --- modules/howtos/pages/observability-tracing.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/howtos/pages/observability-tracing.adoc b/modules/howtos/pages/observability-tracing.adoc index dc02c384..466b53c4 100644 --- a/modules/howtos/pages/observability-tracing.adoc +++ b/modules/howtos/pages/observability-tracing.adoc @@ -74,7 +74,7 @@ so we do not provide any stability guarantees on the logging output format and i The built-in tracer is great if you do not have a centralized monitoring system, but if you already plug into the OpenTelemetry ecosystem we want to make sure to provide first-class support. -The first thing you need to do is include an andditional dependency which provides the interoperability code in your project file: +The first thing you need to do is include an additional dependency which provides the interoperability code in your project file: [source,xml] ---- @@ -88,7 +88,7 @@ You also need to include your downstream exporter of choice, in the following ex ---- -Next up, initialize the Zipkin[https://zipkin.io/pages/quickstart] tracer: +Next up, initialize the https://zipkin.io/pages/quickstart[Zipkin^] tracer: [source,csharp] ---- From 4a49dce6f950486fff25243404fe305890ba058a Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 18 Apr 2024 10:00:23 +0100 Subject: [PATCH 28/29] --> 3.5 --- .../project-docs/pages/sdk-release-notes.adoc | 2810 +---------------- 1 file changed, 4 insertions(+), 2806 deletions(-) diff --git a/modules/project-docs/pages/sdk-release-notes.adoc b/modules/project-docs/pages/sdk-release-notes.adoc index 8e59a226..07bec78c 100644 --- a/modules/project-docs/pages/sdk-release-notes.adoc +++ b/modules/project-docs/pages/sdk-release-notes.adoc @@ -1,2811 +1,9 @@ -= SDK Release Notes += Couchbase .NET SDK Release Notes and Archives :description: Release notes and download archive for the Couchbase .NET Client. -:page-topic-type: project doc +:navtitle: Release Notes +:page-topic-type: project-doc :page-aliases: relnotes-dotnet-sdk :page-toclevels: 2 :page-partial: -// tag::all[] -[abstract] -{description} - - -These pages cover the 3._x_ versions of the Couchbase .NET SDK. -For release notes, download links, and installation methods for 2.7 and earlier releases of the Couchbase .NET Client, please see the https://docs-archive.couchbase.com/dotnet-sdk/2.7/sdk-release-notes.html[2.x .NET Release Notes & Download Archive]. - -The full installation instructions that were previously on this page can now be found xref:sdk-full-installation.adoc[here]. - - - -[#latest-release] -== .NET SDK 3.4 Releases - -We always recommend using the latest version of the SDK -- it contains all of the latest security patches and support for new and upcoming features. -All patch releases for each dot minor release should be API compatible, and safe to upgrade; -any changes to expected behavior are noted in the release notes that follow. - - -[#version-3-4-15] -=== Version 3.4.15 (09 Feb 2024) - -Version 3.4.15 is the sixteenth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.15.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.15[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.15[Nuget] - -==== Known Issues - -* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. -3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). -Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3599[NCBC-3599]: -Fixed SDK bugs related to Nullability of Increment, Decrement, and related options. -* https://issues.couchbase.com/browse/NCBC-3565[NCBC-3565]: -Added error handling for "index does not exist" query error. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3579[NCBC-3579]: -Support `DocumentNotLocked` exception when `collection.Unlock()` is called on a document that is not locked. -* https://issues.couchbase.com/browse/NCBC-3606[NCBC-3606]: -Added SDK Support for Scoped Search Indexes. -* https://issues.couchbase.com/browse/NCBC-3596[NCBC-3596]: -Support added for `maxTTL` value of -1, for collection "no expiry". - - -[#version-3-4-14] -=== Version 3.4.14 (18 Jan 2024) - -Version 3.4.14 is the fifteenth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.14.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.14[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.14[Nuget] - -==== Known Issues - -* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. -3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). -Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3434[NCBC-3434]: -A regression introduced in a recent release prevented `WaitUntilReady` from pinging nodes -- -this has been fixed, and `WaitUntilReady` now correctly detects state. -// The rest of these issues need editing to make them consistent, and helpful to customers - but I'm out of time. :-/ -* https://issues.couchbase.com/browse/NCBC-3503[NCBC-3503]: -There was a possibility of `ClusterVersionProvider.GetVersionAsync` failing, if nodes have no `ManagementUri`, owing to randomized node order. -This has been fixed, and `GetRandomManagementUri()` should never now throw `NullReferenceException`. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3530[NCBC-3530]: -Made the `ConnectionString` class now accept `couchbase2` schema. -* https://issues.couchbase.com/browse/NCBC-3532[NCBC-3532]: -Added `AsReadOnly` record to Index APIs options. -* https://issues.couchbase.com/browse/NCBC-3538[NCBC-3538]: -Improved recovery time in Config Push to 300ms. -* https://issues.couchbase.com/browse/NCBC-3541[NCBC-3541]: -Added `AsReadOnly` record to Bucket Management APIs options. -* https://issues.couchbase.com/browse/NCBC-3551[NCBC-3551]: -Added `AsReadOnly` record to Collection Management APIs options. -* https://issues.couchbase.com/browse/NCBC-3568[NCBC-3568]: -Added `AsReadOnly` Record to GetAllScopesOptions. -* https://issues.couchbase.com/browse/NCBC-3516[NCBC-3516]: -Made fallback usage of `DefaultSerializer` trimmable. -* https://issues.couchbase.com/browse/NCBC-3518[NCBC-3518]: -Removed internal transcoder dependencies on `DefaultSerializer`. - - -[#version-3-4-13] -=== Version 3.4.13 (09 Nov 2023) - -Version 3.4.13 is the fourteenth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.13.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.13[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.13[Nuget] - -==== Known Issues - -* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. -3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). -Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3397[NCBC-3397]: -`IOperation.Elapsed` was not correctly counting duration between retries -- -the stopwatch field of `IOperation/OperationBase` is stopped in `HandleOperationCompleted()` and never re-started. -This has now been fixed, and the `Elapsed` field of `OperationBase` now correctly increments with the stopwatch time after each retry cycle. -* https://issues.couchbase.com/browse/NCBC-3498[NCBC-3498]: -Added code documentation to `PersistentList` as the internals use reference comparisons, but there is no guarantee that internally the document might be reloaded by the database. -The documention instructs users to override the `Object.Equals` method on their POCOs so that that values of the objects will be compared and not the objects' reference. -* https://issues.couchbase.com/browse/NCBC-3510[NCBC-3510]: -Fixed a regression in Config Push Notification / Faster Failover performance. -Config Push notifications are now handled by a single thread per node in a LIFO manner, and skip out of date push notifications, -as well as providing more logging around config updates to help troubleshoot in the future. -Additionally, `GetClusterConfig` asks for the old version, not the pushed version. -* https://issues.couchbase.com/browse/NCBC-3526[NCBC-3526]: -The Search Service's `NumericRangeQuery`'s `MaxInclusive` property was defaulting to `false`. -It now defaults to `true`, in line with the https://github.com/couchbaselabs/sdk-rfcs/blob/master/rfc/0052-sdk3-full-text-search.md#numericrangequery[rfc]. -* https://issues.couchbase.com/browse/NCBC-3543[NCBC-3543]: -`DefaultSerializer` will now correctly handle Unicode surrogate pairs on buffer boundaries. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3472[NCBC-3472]: -Support added to bucket settings for xref:7.2@server:learn:data/change-history.adoc#understanding-change-history[change history] feature. -* https://issues.couchbase.com/browse/NCBC-3502[NCBC-3502], https://issues.couchbase.com/browse/NCBC-3506[NCBC-3506]: -Merging `couchbase-net-stellar` into `couchbase-net-client`, for upcoming Cloud Native Gateway support. -* https://issues.couchbase.com/browse/NCBC-3481[NCBC-3481]: -The legacy `Enum.GetValues(Type)` overload is not AOT-compatible. -Added conditional compilation to use the Enum.GetValues() overload on .NET 6 and later. -* https://issues.couchbase.com/browse/NCBC-3487[NCBC-3487]: -Reduced reliance on `SerializeWithFallback`, which is incompatible with trimming and `NativeAOT`. -* https://issues.couchbase.com/browse/NCBC-3488[NCBC-3488]: -Delaying creation of `CollectionQueryIndexManager`, which will allow it to be left off the DI container, and trimmed out of the output executable if unused. -* https://issues.couchbase.com/browse/NCBC-3489[NCBC-3489]: -Implemented an in-flight operation limit to provide backpressure. -The previous design allowed a single connection from the connection pool to collect a large number of in-flight operations, rather than ensuring a more even spread of operations across connections in the pool. -This potentially allowed small operation may be blocked waiting for large operation to pass over the network socket. -A more even spread of operations doesn't guarantee this will be the case, but does make it more likely. -* https://issues.couchbase.com/browse/NCBC-3508[NCBC-3508]: -Support HTTP response streaming in legacy .NET runtimes -** .NET 4 consumers may opt-in to HTTP response streaming so long as they ensure they properly dispose of any returned `XXXResult` objects rather than leaving them dangling and potentially causing a connection leak. -If they do choose this behavior then `System.IOException` cases previously addressed by https://issues.couchbase.com/browse/NCBC-3433[NCBC-3433] should not occur due to the new pattern for disposing of `HttpClient`. -** .NET 6 and newer consumers may now choose to opt-out of HTTP response streaming if desired. -* https://issues.couchbase.com/browse/NCBC-3539[NCBC-3539]: -`System.Text.Json` is now used to deserialize document expiry -- for improved performance and compatiblity with trimming and `NativeAOT`. -* https://issues.couchbase.com/browse/NCBC-3545[NCBC-3545]: -Fixes a regression introduced in 3.4.12 where a `ClusterNode` might be disposed and then reused, which causes an exception to be raised. -This issue is raised if the cluster is configured to use Alternate Addressing, but not DNS-SRV. - - -[#version-3-4-12] -=== Version 3.4.12 (04 Oct 2023) - -Version 3.4.12 is the thirteenth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.12.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.12[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.12[Nuget] - -==== Known Issues - -* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. -3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). -Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3490[NCBC-3490]: -When a request includes a CAS, `MutateIn` should now throw a `CasMismatch` exception if the status is `KeyExists`. -Otherwise, for `KeyExists`, it will continue to throw `DocumentExistsException`. -* https://issues.couchbase.com/browse/NCBC-3493[NCBC-3493]: -When a Private Link is enabled, the SDK was not properly using the provided config and all of the VBuckets were mapped to the same node. -This could cause a recurring `KvNotMyVBucket`, which would eventually become an `AmbiguousTimeoutException` thrown to the user. -This behavior has now been fixed -- -changes have been made so that `NetworkResolution` is propagated to `BucketConfig`, duplicate nodes not added to nodes list, and entries in `LookupDictionary` are only made for nodes with actual ports. -* https://issues.couchbase.com/browse/NCBC-3496[NCBC-3496]: -`WaitUntilReady` should now use the cluster map and not the `ServiceType` enum by default -- removing spurious error messages about services which are not being used. -* https://issues.couchbase.com/browse/NCBC-3455[NCBC-3455]: -During a `MultiLookup`, the SDK should now correctly throw `DocumentUnretrievableException` in `LookupInAnyReplica`, for key not found. -* https://issues.couchbase.com/browse/NCBC-3465[NCBC-3465]: -Exist specs in `LookupInResults` was not returning `ContentAs` -- -it now returns bool Exist value serialized as `T` when calling `LookupinResult.ContentAs()`, as per RFC. -* https://issues.couchbase.com/browse/NCBC-3473[NCBC-3473]: -`GetInAnyReplica` could fail when it should have been successful, throwing `DocumentUnretrievable` -- -it should now return the first _successful_ operation (unless all fail). -* https://issues.couchbase.com/browse/NCBC-3484[NCBC-3484], https://issues.couchbase.com/browse/NCBC-3485[NCBC-3485], https://issues.couchbase.com/browse/NCBC-3486[NCBC-3486]: -Several bugs in LookupInAny and LookupInAllReplicas have been fixed. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3494[NCBC-3494]: -Added a client-side check for `TooManySpecs` in `LookupIn`. -* https://issues.couchbase.com/browse/NCBC-3387[NCBC-3387]: -Removed internal keword from `ICollectionQueryIndexManager`, facilitatiing better testing. -* https://issues.couchbase.com/browse/NCBC-3479[NCBC-3479]: -Added trimming and AOT annotations to Analytics and Search clients. -* https://issues.couchbase.com/browse/NCBC-3492[NCBC-3492]: -When an `EConfigOnly (0xd)` response is received, the SDK assumes that this _may_ mean a stale config, and so fetches a new config and publishes it for processing. -* https://issues.couchbase.com/browse/NCBC-3495[NCBC-3495]: -Moved `LookupInAllReplicasAsync` and `LookupInAnyReplicaAsync` into `ICouchbaseCollection`. -* https://issues.couchbase.com/browse/NCBC-3497[NCBC-3497]: -Added additional DEBUG logging `ConnectionFactory.CreateAndConnectAsync`, to aid TLS troubleshooting. - - -[#version-3-4-11] -=== Version 3.4.11 (12 Sept 2023) - -Version 3.4.11 is the twelfth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.11.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.11[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.11[Nuget] - -==== Known Issues - -* While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. -3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). -Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3446[NCBC-3446]: -When passed as `readonly(true)`, Readonly Query was accepting `UPDATE` query and was updating the document in collection, when it should have failed. -This should no longer occur. -* https://issues.couchbase.com/browse/NCBC-3448[NCBC-3448]: -`IndexNotFoundException` was not raised when `QueryIndexManager.watchIndex` was called with a non-existent index -- -this has been fixed, and the correct exception should now be thrown. -* https://issues.couchbase.com/browse/NCBC-3460[NCBC-3460]: -Fixed a bug where a null reference exception was sometimes occurring when bootstrapping a Memcached bucket. -* https://issues.couchbase.com/browse/NCBC-3467[NCBC-3467]: -Fixed a regression in lambda-based sub doc API, due to `LookupInResult` changes. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3449[NCBC-3449]: -The SDK was throwing a `NullReferenceException` for the `ITypeSerializer` when setting a Transcoder in the Options due to erroneous logic in `CouchbaseCollection`. -Transcoders are now used for deserialization, and RawBinary/RawString Transcoders now initialise the `DefaultSerializer` when instantiated (like for JsonTranscoder) which, -along with changed logic in `CouchbaseCollection` when returning `LookupInResults`, -means that this no longer occurs. -* https://issues.couchbase.com/browse/NCBC-3466[NCBC-3466]: -Improvements for internal testing. -* https://issues.couchbase.com/browse/NCBC-3482[NCBC-3482]: -Faster Failover/Push config is now ensabled by default. -* https://issues.couchbase.com/browse/NCBC-3130[NCBC-3130]: -For improved performance and trimmability, -`OrphanReporter` has been rewritten to serialize POCOs using a `JsonSerializerContext` rather than using LINQ objects from Newtonsoft. -* https://issues.couchbase.com/browse/NCBC-3402[NCBC-3402]: -Improved trimming support for internal DI. -* https://issues.couchbase.com/browse/NCBC-3404[NCBC-3404]: -Replaced `Newtonsoft.Json` with `System.Text.Json`, using source generated `JsonSerializerContext`, for Eventing management. -This is now compatible with trimming and AOT compilation, -and should also provide performance benefits. -Use System.Text.Json for Eventing Management -* https://issues.couchbase.com/browse/NCBC-3405[NCBC-3405]: -Added trimming annotations to `LoggingMeter`. -* https://issues.couchbase.com/browse/NCBC-3420[NCBC-3420]: -The `DefaultSerializer` was used to deserialize query plans -- -for consistency, this now uses `System.Text.Json`. -* https://issues.couchbase.com/browse/NCBC-3453[NCBC-3453]: -Reduced the default value for the `IdleHttpConnectionTimeout` client setting to 1 second. -The previous default (4.5 seconds) was too close to the 5-second server-side timeout, and could lead to spurious request failures. -* https://issues.couchbase.com/browse/NCBC-3471[NCBC-3471]: -Microsoft DI Extensions (`Couchbase.Extensions.DependencyInjection`) are now more compatible with trimming and AOT compilation. -The changes also help application start up speed in non-AOT cases. - - -[#version-3-4-10] -=== Version 3.4.10 (03 Aug 2023) - -[WARNING] -==== -v3.4.10 is incompatible with Server 7.6 and later -- do not use. -This version of the SDK has been deprecated; -3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). -Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. - -While 3.4.11 - 3.4.15 will continue be compatible and supported with server 7.6.0, you may encounter performance issues during rebalances under high KV workload. -Details can be found in https://issues.couchbase.com/browse/NCBC-3724[NCBC-3724]. -==== - -Version 3.4.10 is the eleventh release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.10.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.10[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.10[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3424[NCBC-3424]: -Future server versions will add an extra item to the features list returned, which effects the parsing of the body. -This change prepares for the effects of those flexible framing extras. -* https://issues.couchbase.com/browse/NCBC-3445[NCBC-3445]: -At some point, `SubDocMultiPathFailureDeleted` was added as a special case of `SubDocMultiPathFailure`, but from an SDK point of view they should be handled them similarly. -This change ensures that when doing a `LookupIn` against a Tombstone with `AccessDeleted` flag set, `SubDocMultiPathFailureDeleted` response status should not throw, and should be treated the same as `SubDocMultiPathFailure`. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3423[NCBC-3423]: -Added `GetClusterConfigWithKnownVersion` support to Hello. -* https://issues.couchbase.com/browse/NCBC-3425[NCBC-3425]: -Added a `HELLO` flag called `DedupeNotMyVbucketClustermap`. -* https://issues.couchbase.com/browse/NCBC-3427[NCBC-3427]: -Added `SnappyEverywhere` flag support, in preparation for the .NET SDK supporting Compression. -* https://issues.couchbase.com/browse/NCBC-3428[NCBC-3428]: -Added `ClustermapChangeNotificationBrief` flag support to subscribe to configuration notifications, where available. -* https://issues.couchbase.com/browse/NCBC-3429[NCBC-3429]: -Added support for Duplex mode flag to Hello, for Unordered Execution. -* https://issues.couchbase.com/browse/NCBC-3430[NCBC-3430]: -Added `ClustermapChangeNotification` flag support. -// I think the below was closed with no fix necessary - let me know if I'm wrong and it should be uncommented. -// * https://issues.couchbase.com/browse/NCBC-3278[NCBC-3278]: -// Improve error message when Uri is null when creating scope -* https://issues.couchbase.com/browse/NCBC-3421[NCBC-3421]: -Deserializing K/V operations with the `DefaultSerializer` was allocating an excessive number of buffers for each operation. -This change introduces a reusable pool of text readers which reads directly from the memory buffer without stream-related overhead or intermediate buffers. -This results in a performance gain and a significant reduction in heap allocations when deserializing from a memory buffer. -* https://issues.couchbase.com/browse/NCBC-3432[NCBC-3432]: -Added additional logging at the IO level to capture more details of exceptions thrown when sockets are opened. -* https://issues.couchbase.com/browse/NCBC-3438[NCBC-3438]: -Several of the listed dependencies for the .NET 6 target were unnecessary, as those packages are now included in the .NET framework and we're not targeting a higher version. -We have removed these NuGet dependencies for the .NET 6 Target, which will reduce restore time and size for consumers. - - -[#version-3-4-9] -=== Version 3.4.9 (20 July 2023) - -Version 3.4.9 is the tenth release of the 3.4 series. - -3.4.9 is the recommended version to use with Server 7.6 (and newer instances of Capella, using 7.6). -Although it does not contain new APIs, such as vector search and support for 7.6 feature set, it is most compatible with Server 7.6.0. until SDK 3.5.x is released in the near future. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.9.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.9[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.9[Nuget] - -==== Fixed Issues - - * https://issues.couchbase.com/browse/NCBC-3367[NCBC-3367]: -The SDK was returning `QueryIndexes` with null values for Bucket/Scope/Collection names (BucketName should return the Keyspace value when null). -Added BucketName field with backing field for conditionally returning either BucketNameField or Keyspace. - * https://issues.couchbase.com/browse/NCBC-3417[NCBC-3417]: -`MutateIn` was modifying global Transcoder setting; nothing registered as a Singleton should be mutable and changes have been made to ensure that this can no longer happen. - * https://issues.couchbase.com/browse/NCBC-3433[NCBC-3433]: -Fixed regression in 3.4.8 which could cause `IOException` if Query has no content. - -==== New Features and Behavioral Changes - - * https://issues.couchbase.com/browse/NCBC-3412[NCBC-3412]: Support Query with Read from Replica - * https://issues.couchbase.com/browse/NCBC-3418[NCBC-3418]: Experimental support for HTTP2 when using the Query service - * https://issues.couchbase.com/browse/NCBC-3351[NCBC-3351]: SDKs must encode URIs - * https://issues.couchbase.com/browse/NCBC-3437[NCBC-3437]: Add .NET 4.8 back to .NET SDK unit and integration tests - * https://issues.couchbase.com/browse/NCBC-3384[NCBC-3384]: Resolve all compiler warnings - * https://issues.couchbase.com/browse/NCBC-3386[NCBC-3386]: Add conditional support for TLS 1.3 for .NET 6.0 and higher - * https://issues.couchbase.com/browse/NCBC-3401[NCBC-3401]: Scan: Implement latest RFC revision (#9) - * https://issues.couchbase.com/browse/NCBC-3403[NCBC-3403]: Improve memory usage of SearchClient - - -[#version-3-4-8] -=== Version 3.4.8 (12 June 2023) - -Version 3.4.8 is the ninth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.8.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.8[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.8[Nuget] - - - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3392[NCBC-3392]: -Scan: -`RangeScanCreate` operation did not receive the `MutationTokens` from the `ScanOptions`, as `ConsistentWit` was not sent in RangeScanCreate packets. -This has been remedied, and `MutationState` tokens are now sent in `RangeScanCreate` packets. -* https://issues.couchbase.com/browse/NCBC-3395[NCBC-3395]: -Scan: Sampling Scan Limit parameter must be < 0. -An `InvalidArgumentException` is now thrown when creating a `SamplingScan` with Limit < 0. -* https://issues.couchbase.com/browse/NCBC-3399[NCBC-3399]: -Fixed edge case in bootstrapping around NRE in `PruneNodes`. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3391[NCBC-3391]: -Scan: Implemented `PrefixScan` helper method. - - -[#version-3-4-7] -=== Version 3.4.7 (07 June 2023) - -Version 3.4.7 is the eighth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.7.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.7[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.7[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3350[NCBC-3350]: -`NotMyVBucket` will no longer result in `TaskCancellationException`. -* https://issues.couchbase.com/browse/NCBC-3376[NCBC-3376]: -Correct timeout response will now be returned during a rebalance. -* https://issues.couchbase.com/browse/NCBC-3379[NCBC-3379]: -OpenTelemetry tracing was losing track of the parent span in cases where the parent span was not sampled, resulting in orphaned spans and increased trace volume. -By capturing the `ExecutionContext`, if any, when queuing operations on the `ChannelConnectionPool`, and sending the operations on the captured context, the spans are now correctly sampled. -* https://issues.couchbase.com/browse/NCBC-3380[NCBC-3380]: -When `IOperation.ExtractBody` is called it should always dispose of the returned IMemoryOwner, generally with a using statement; . -Failure to do so will cause the buffer to be garbage collected rather than returned to the ArrayPool -- which can lead to memory holes and decreased GC efficiency. -This has no been fixed, and should no longer occur. -* https://issues.couchbase.com/browse/NCBC-3382[NCBC-3382]: -Streaming support now working correctly for Analytics, Query, and Views. -* https://issues.couchbase.com/browse/NCBC-3383[NCBC-3383]: -Couchbase.ServiceNotAvailableException: Service n1ql is either not configured or cannot be reached. -* https://issues.couchbase.com/browse/NCBC-3390[NCBC-3390]: -Get Cluster Map operations were linked to the bootstrap trace, cusing erroneous large traces. -A check has been added which fixes this. -* https://issues.couchbase.com/browse/NCBC-3392[NCBC-3392]: -Scan: Use `ConsistentWith` MutationTokens for `RangeScanCreate` Operation. -* https://issues.couchbase.com/browse/NCBC-3393[NCBC-3393]: -Fixed regression where `OperationCanceledException` continues after rebalance completes. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3391[NCBC-3391]: -Scan: Implemented `PrefixScan` helper method. -* https://issues.couchbase.com/browse/NCBC-2394[NCBC-2394]: -Query 4040 is now handled like 4050, _et al_ -- -e.g. prepared statement cache for it is removed and transparent reprepare is performed. -* https://issues.couchbase.com/browse/NCBC-3354[NCBC-3354]: -Changed logging to use `LoggerMessage` in Channel classes. -Added `ChannelConnectionEvent` in LoggingEvents. -* https://issues.couchbase.com/browse/NCBC-3378[NCBC-3378]: -Improve `GET_CID` use in `CouchbaseBucket`. -* https://issues.couchbase.com/browse/NCBC-3381[NCBC-3381]: -Removed `ClusterNodesChanged` and `VBucketMapChanged` (which are only used internally) from `BucketConfig`. - - -[#version-3-4-6] -=== Version 3.4.6 (12 May 2023) - -Version 3.4.6 is the seventh release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.6.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.6[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.6[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3300[NCBC-3300]: -SamplingScan: Fixed bug in limiting option -* https://issues.couchbase.com/browse/NCBC-3301[NCBC-3301]: -SamplingScan: Fixed bug where requesting too few documents returned incorrect responses. -* https://issues.couchbase.com/browse/NCBC-3345[NCBC-3345]: -In the latest development server versions, 0xD is occasionally returned by the server. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3273[NCBC-3273]: -Added SDK Support for Native KV Range Scans. -* https://issues.couchbase.com/browse/NCBC-3364[NCBC-3364]: -Improved hot-path performance in `ClusterContext.GetOrCreateBucketAsync`. - - -[#version-3-4-5] -=== Version 3.4.5 (20 April 2023) - -Version 3.4.5 is the sixth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.5.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.5[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.5[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3334[NCBC-3334]: -`KvNotMyVBucket` errors after add node + rebalance. -* https://issues.couchbase.com/browse/NCBC-3337[NCBC-3337]: -NullReferenceException when bootstrapping against a non-existent bucket. -* https://issues.couchbase.com/browse/NCBC-3347[NCBC-3347]: -IGetResult shouldn't have an internal Status property. -* https://issues.couchbase.com/browse/NCBC-3360[NCBC-3360]: -Fix QueryContext bug in QueryIndexManager. -* https://issues.couchbase.com/browse/NCBC-3362[NCBC-3362]: -SDK writes to _default collection when intended collection is dropped. -* https://issues.couchbase.com/browse/NCBC-3363[NCBC-3363]: -SubDoc SuccessDeleted not treated as Success. -* https://issues.couchbase.com/browse/NCBC-3365[NCBC-3365]: -Change Search Metadata setters from internal to public. -* https://issues.couchbase.com/browse/NCBC-3369[NCBC-3369]: -Ensure ClusterNode list matches Cluster config after rebalance up/down. -* https://issues.couchbase.com/browse/NCBC-3372[NCBC-3372]: -Removed/rebalanced out node continues to be hit with http requests. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3220[NCBC-3220]: -Properly map server query timeout while streaming (1080). -* https://issues.couchbase.com/browse/NCBC-3308[NCBC-3308]: -Scan: Refactor sorting/merging into non-blocking implementation. -* https://issues.couchbase.com/browse/NCBC-3332[NCBC-3332]: -Protostellar: Implement KV SubDoc. -* https://issues.couchbase.com/browse/NCBC-3355[NCBC-3355]: -Update FIT performer. -* https://issues.couchbase.com/browse/NCBC-3274[NCBC-3274]: -Add public API for KV Range Scan. -* https://issues.couchbase.com/browse/NCBC-3370[NCBC-3370]: -Lock on sync object instead of nodes list. - - -[#version-3-4-4] -=== Version 3.4.4 (10 March 2023) - -Version 3.4.4 is the fifth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.4.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.4[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.4[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3340[NCBC-3340]: -When an op timed out, the socket connection was closed and then recreated. -With a large number of unexpected timeouts, many sockets could be left in `TIME_WAIT`. -Making `ChannelConnectionProcessor` reuse connections after timeout should reduce the number of file descripters and local ports left open. -* https://issues.couchbase.com/browse/NCBC-3356[NCBC-3356]: -Cluster level `query_context`, which is not supported by Server versions earlier than 7.0, has been removed for these versions. -* https://issues.couchbase.com/browse/NCBC-3343[NCBC-3343]: -Fixed a bug where `SelectBucket` may not be called on the internal node used as the bootstrapping endpoint. -This resulted in a `BucketNotConnected` error for certain ops -- which will now no longer occur. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3309[NCBC-3309]: -Handled `query_context` changes by adding to every index manager request. -* https://issues.couchbase.com/browse/NCBC-3348[NCBC-3348]: -When ConnectionString hosts are null, the SDK now throws an exception, with a more explicit error message. -* https://issues.couchbase.com/browse/NCBC-3353[NCBC-3353]: -Removed build targets for out-of-support versions of .NET Framework. - - -[#version-3-4-3] -=== Version 3.4.3 (08 February 2023) - -Version 3.4.3 is the fourth release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.3.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.3[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.3[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3316[NCBC-3316]: -Scan: Refactored operation parsing, so `RangeScanContinue.OnNext()` doesn't get called after the first batch of a partition has been consumed. -* https://issues.couchbase.com/browse/NCBC-3329[NCBC-3329]: -`NamedBucketProxyGenerator` and `NamedCollectionProxyGenerator` caches were not thread-safe during start up. -This applies primarily to unit testing scenarios -- most MVC applications were not affected, as it doesn't affect anything once the DI container is configured, because startup DI registration is single-threaded. -* https://issues.couchbase.com/browse/NCBC-3331[NCBC-3331]: -Retrying Named Prepared Queries from the SDK -- added an example of a custom `RetryStrategy` for the case where you do not want the named prepared statement to be retried, and want a fast-fail in that specific case and tests for named parameters. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-1999[NCBC-1999]: -Added a `TryGetAsync` method to handle the case where `KeyNotFound` is returned by the server -- for improved performance over throwing -an exception. -* https://issues.couchbase.com/browse/NCBC-3293[NCBC-3293]: -Handle case where a response contains a document that exceeds 8120b [_sic_] -- provided a test to show that large documents are correctly parsed -and returned to the caller. -* https://issues.couchbase.com/browse/NCBC-3307[NCBC-3307]: -Scan: Implemented `BatchByteLimit`, `BatchItemLimit`, and `BatchTimeLimit`. -* https://issues.couchbase.com/browse/NCBC-3318[NCBC-3318]: -Protostellar: Exposed KV operation option values publicly, via read-only record copy. -* https://issues.couchbase.com/browse/NCBC-3326[NCBC-3326]: -Encode Duration was tracked twice for the Threshold Tracing -- as `RequestSpan` was disposed more than once. -This has now been fixed, and the correct value should be returned. - - -[#version-3-4-2] -=== Version 3.4.2 (13 January 2023) - -Version 3.4.2 is the third release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.2.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.2[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.2[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3269[NCBC-3269]: InternalServerFailureException error message caught in SDK Query Response -* https://issues.couchbase.com/browse/NCBC-3297[NCBC-3297]: KV Range Scan breaks with NCBC-2167 -* https://issues.couchbase.com/browse/NCBC-3305[NCBC-3305]: Pickup latest range scan RFC changes -* https://issues.couchbase.com/browse/NCBC-3310[NCBC-3310]: Scan: Fix RangeScanContinue parsing offset -* https://issues.couchbase.com/browse/NCBC-3313[NCBC-3313]: Sub-Document LookupInAsync.Exists throws SubdocException when path not found - - -[#version-3-4-1] -=== Version 3.4.1 (09 December 2022) - -Version 3.4.1 is the second release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.1.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.1[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.1[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3204[NCBC-3204]: CombinationTest failure: Test_GetAndLockAsync_Locked -* https://issues.couchbase.com/browse/NCBC-3283[NCBC-3283]: Search: Min function throws an exception if the argument is > 0 -* https://issues.couchbase.com/browse/NCBC-3295[NCBC-3295]: KeyNotFound / DocumentNotFound should not trigger the Circuit Breaker -* https://issues.couchbase.com/browse/NCBC-3296[NCBC-3296]: PopulateCID caches Exceptions forever -* https://issues.couchbase.com/browse/NCBC-3298[NCBC-3298]: "couchbases://" Does not automatically enable TLS in SDK 3.4 -* https://issues.couchbase.com/browse/NCBC-3304[NCBC-3304]: ObjectDisposedException on GET command during rebalance - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-2167[NCBC-2167]: Refactor operation callback handling and exception mapping - - -[#version-3-4-0] -=== Version 3.4.0 (10 November 2022) - -Version 3.4.0 is the first release of the 3.4 series. - -https://packages.couchbase.com/clients/net/3.4/Couchbase-Net-Client-3.4.0.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.4.0[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.4.0[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3246[NCBC-3246]: EndpointDiagnostics.State always returns "Authenticating" for KV and not implemented per RFC -* https://issues.couchbase.com/browse/NCBC-3266[NCBC-3266]: A timeout may have a status of "success" -* https://issues.couchbase.com/browse/NCBC-3281[NCBC-3281]: Erroneous time reported in timeout log message. -* https://issues.couchbase.com/browse/NCBC-3286[NCBC-3286]: RetryHandler does not apply backoff when a request is not AlwaysRetry. - -==== New Features and Behavioral Changes -* https://issues.couchbase.com/browse/NCBC-3271[NCBC-3271]: Error Message for Bucket Hibernation - - - -== .NET SDK 3.3 Releases - - -[#version-3-3-6] -=== Version 3.3.6 (06 October 2022) - -Version 3.3.6 is the seventh release of the 3.3 series. - -https://packages.couchbase.com/clients/net/3.3/Couchbase-Net-Client-3.3.6.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.3.6[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.3.6[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3265[NCBC-3265]: -Ensure SDK can bootstrap from a non-data-service node. -* https://issues.couchbase.com/browse/NCBC-3270[NCBC-3270]: -Make `Increment` and `Decrement` take unsigned long delta, per the RFC. - -==== New Features and Behavioral Changes -* https://issues.couchbase.com/browse/NCBC-3258[NCBC-3258]: -Changed `QueryRequest` from /query to /query/service. -* https://issues.couchbase.com/browse/NCBC-3263[NCBC-3263]: -Support For Configuration Profiles added. -* https://issues.couchbase.com/browse/NCBC-2953[NCBC-2953]: -Support for Serverless/Lambda Execution Environments. -* https://issues.couchbase.com/browse/NCBC-3261[NCBC-3261]: -Where possible, we now use `ArrayPool` instead of `MemoryPool`. -* https://issues.couchbase.com/browse/NCBC-3264[NCBC-3264]: -Improved performance of lambda processing for subdoc operations. -* https://issues.couchbase.com/browse/NCBC-3267[NCBC-3267]: -When creating snapshot packages in Jenkins, the latest tag is now always used as a base for the snapshot name. -* https://issues.couchbase.com/browse/NCBC-3268[NCBC-3268]: -`Session -State` GA readiness. - - -[#version-3-3-5] -=== Version 3.3.5 (16 September 2022) - -Version 3.3.5 is the sixth release of the 3.3 series. - -https://packages.couchbase.com/clients/net/3.3/Couchbase-Net-Client-3.3.5.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.3.5[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.3.5[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3256[NCBC-3256]: -Fixed issue where `Search.MetaData.TimeTook` was being parsed as ticks, not nanoseconds. -* https://issues.couchbase.com/browse/NCBC-3257[NCBC-3257]: -Fixed a bug where operations failed on memcached bucket types. - - -[#version-3-3-4] -=== Version 3.3.4 (02 August 2022) - -Version 3.3.4 is the fifth release of the 3.3 series. - -https://packages.couchbase.com/clients/net/3.3/Couchbase-Net-Client-3.3.4.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.3.4[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.3.4[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3248[NCBC-3248]: -Fixed issue where bootstrap did not continue after an `AuthenticationFailureException`. -* https://issues.couchbase.com/browse/NCBC-3252[NCBC-3252]: -Fixed issue where the wrong error message was returned when bootstrapping a bucket. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3193[NCBC-3193]: -Removed erroneous `InvalidArgumentException` when TLS is enabled with defaults. -* https://issues.couchbase.com/browse/NCBC-3253[NCBC-3253]: -This fixes an issue in Couchbase Server 6.5 FTS which fails when values of 0 are provided for "fuzziness" or "prefix_length". - - -[#version-3-3-3] -=== Version 3.3.3 (11 July 2022) - -Version 3.3.3 is the fourth release of the 3.3 series. - -https://packages.couchbase.com/clients/net/3.3/Couchbase-Net-Client-3.3.3.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.3.3[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.3.3[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3010[NCBC-3010]: -`BucketNotFoundException` incorrectly raised when there is no database running. -* https://issues.couchbase.com/browse/NCBC-3191[NCBC-3191]: -`EventingFunctionManager` throws wrong exception for compilation failure. -* https://issues.couchbase.com/browse/NCBC-3214[NCBC-3214]: -Fixed NuGet packaging issues causing problems with dependencies for some users. -* https://issues.couchbase.com/browse/NCBC-3231[NCBC-3231]: -MutateIn throws `CAS` error instead of `KeyExists` when doc exists and `StoreSemantics.Insert`. -* https://issues.couchbase.com/browse/NCBC-3239[NCBC-3239]: -`NullReferenceException` when bootstrapping fails and a mangement API call is made. -* https://issues.couchbase.com/browse/NCBC-3240[NCBC-3240]: -`WaitUntilReadyAsync` fails when it cannot connect to a cluster before timeout. -* https://issues.couchbase.com/browse/NCBC-3241[NCBC-3241]: -`QueryIndexManager` throws generic exception as opposed to `IndexNotFoundException`. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3166[NCBC-3166]: -Added performance best practices in API Docs. -* https://issues.couchbase.com/browse/NCBC-3224[NCBC-3224]: -Flagged `ErrorContext` as uncommitted. -* https://issues.couchbase.com/browse/NCBC-3242[NCBC-3242]: -Updated `Newtonsoft.JSON` to version `13.0.1` or later. -* https://issues.couchbase.com/browse/NCBC-2953[NCBC-2953]: -Added support for Serverless/Lambda Execution Environments - - -[#version-3-3-2] -=== Version 3.3.2 (16 June 2022) - -Version 3.3.2 is the third release of the 3.3 series. - -https://packages.couchbase.com/clients/net/3.3/Couchbase-Net-Client-3.3.2.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.3.2[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.3.2[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3067[NCBC-3067]: -GetAndLockAsync times out instead of throwing DocumentLockedException. -* https://issues.couchbase.com/browse/NCBC-3195[NCBC-3195]: -N1QL queries with the default serializer don't read DateTimeOffset correctly. -* https://issues.couchbase.com/browse/NCBC-3197[NCBC-3197]: -FailFast Retry Strategy May Result in Infinite Processing Loop for Query, Views, Analytics, Search requests. -* https://issues.couchbase.com/browse/NCBC-3198[NCBC-3198]: -Blocked Task when Helo is called on a nonresponsive socket. -* https://issues.couchbase.com/browse/NCBC-3199[NCBC-3199]: -Timeout log message uses misleading Operation.Timeout. -* https://issues.couchbase.com/browse/NCBC-3200[NCBC-3200]: -Unlock returns DocumentLockedException. -* https://issues.couchbase.com/browse/NCBC-3201[NCBC-3201]: -Remove bootstrap endpoint comparison from network resolution. -* https://issues.couchbase.com/browse/NCBC-3203[NCBC-3203]: -NotMyVbucket exception while in mixed mode (CB 6.5 & 7.X). -* https://issues.couchbase.com/browse/NCBC-3205[NCBC-3205]: -A locked status is mapped to temporary failure. -* https://issues.couchbase.com/browse/NCBC-3206[NCBC-3206]: -DI provider caches bad bootstrap results. -* https://issues.couchbase.com/browse/NCBC-3216[NCBC-3216]: -LoggingMeterReport can crash the process in the timer. -* https://issues.couchbase.com/browse/NCBC-3217[NCBC-3217]: -InternalSerializationContext throws a NotSupportedException when the object graph contains JObject. -* https://issues.couchbase.com/browse/NCBC-3218[NCBC-3218]: -Redacted<T> doesn't close tags properly. -* https://issues.couchbase.com/browse/NCBC-3225[NCBC-3225]: -QueryOptions.MaxServerParallelism should be serialized as a string. -* https://issues.couchbase.com/browse/NCBC-3226[NCBC-3226]: -Opaque is written to packet in NBO making WireShark tracing difficult. -* https://issues.couchbase.com/browse/NCBC-3227[NCBC-3227]: -Opaque is reused during retries making debugging difficult. -* https://issues.couchbase.com/browse/NCBC-3232[NCBC-3232]: -Ensure collections are enabled for all connections. -* https://issues.couchbase.com/browse/NCBC-3236[NCBC-3236]: -Issues with KV and NMVB against pre 6.5 cluster. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-1973[NCBC-1973]: -.NET Doc on Error Handling for SDK 3 v1. -* https://issues.couchbase.com/browse/NCBC-3186[NCBC-3186]: -Review .NET SDK Snippets in VSCode. -* https://issues.couchbase.com/browse/NCBC-3189[NCBC-3189]: -Mark IEventingFunctionManager as Uncommitted. -* https://issues.couchbase.com/browse/NCBC-3202[NCBC-3202]: -Dead Link in Repo. -* https://issues.couchbase.com/browse/NCBC-3223[NCBC-3223]: -Flag RetryReason as Volatile. -* https://issues.couchbase.com/browse/NCBC-3002[NCBC-3002]: -Validate: Document accessed after Locking should raise DocumentLockedException or Timeout?. -* https://issues.couchbase.com/browse/NCBC-3028[NCBC-3028]: -Upgrade App.Metrics to mitigate security scan warnings. -* https://issues.couchbase.com/browse/NCBC-3038[NCBC-3038]: -Add retry reasons to ErrorContext. -* https://issues.couchbase.com/browse/NCBC-3078[NCBC-3078]: -Mark synchronous methods in data structures as obsolete. -* https://issues.couchbase.com/browse/NCBC-3168[NCBC-3168]: -Add exception to debug log in CircuitBreaker. -* https://issues.couchbase.com/browse/NCBC-3188[NCBC-3188]: -Add retry reasons to ErrorContext for UnAmbiguousTimeouts. -* https://issues.couchbase.com/browse/NCBC-3207[NCBC-3207]: -Remove dependency on Crc32.NET in Transactions. -* https://issues.couchbase.com/browse/NCBC-3208[NCBC-3208]: -Review all SDK and verify if new SQL++ Feature introduced in 7.1.1(Include MISSING) will work as expected without any change in the code. -* https://issues.couchbase.com/browse/NCBC-3228[NCBC-3228]: -Make BestEffortRetryStrategy.RetryAfter virtual so it can be overridden. -* https://issues.couchbase.com/browse/NCBC-3229[NCBC-3229]: -Add 30s lock limit for GetAndLock API docs. -* https://issues.couchbase.com/browse/NCBC-3152[NCBC-3152]: -Improved code documention for KV API. - - -[#version-3-3-1] -=== Version 3.3.1 (03 May 2022) - -Version 3.3.1 is the second release of the 3.3 series. - -https://packages.couchbase.com/clients/net/3.3/Couchbase-Net-Client-3.3.1.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.3.1[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.3.1[Nuget] - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3192[NCBC-3192]: -Fixed erroneous `InvalidArgumentException` with default TLS settings. - - -=== Version 3.3.0 (27 April 2022) - -WARNING: This version introduces an issue, https://issues.couchbase.com/browse/NCBC-3192[NCBC-3192], which impacts TLS/SSL. -Please use <> instead. - -Version 3.3.0 is the first release of the 3.3 series (delisted from NuGet 4/28/2022). - -https://packages.couchbase.com/clients/net/3.3/Couchbase-Net-Client-3.3.0.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.3.0[API Reference] -// This has been pulled down due to issue NCBC-3192. -// https://www.nuget.org/packages/CouchbaseNetClient/3.3.0[Nuget] - -==== Special Note - -* During a rebalance upgrade from 6.x (or any earlier version) to 7x, in mixed mode (where you are communicating with Couchbase Server whilst some but not all nodes are upgraded), there is a known issue where data may be written to the wrong location. -The solution is to either upgrade to 3.2.9 or greater, or to pause application processing so there are no writes until you have upgraded all nodes. -If you encounter a similar situation during migration and need help with mitigation, please contact our support team. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2847[NCBC-2847], -https://issues.couchbase.com/browse/NCBC-3123[NCBC-3123], -https://issues.couchbase.com/browse/NCBC-3115[NCBC-3115], -https://issues.couchbase.com/browse/NCBC-3124[NCBC-3124], -https://issues.couchbase.com/browse/NCBC-3151[NCBC-3151], -https://issues.couchbase.com/browse/NCBC-3179[NCBC-3179], -https://issues.couchbase.com/browse/NCBC-3000[NCBC-3000]: -Made it simpler to diagnose failures by ensuring that various exceptions including `AuthenticationFailureException`, `BucketNotFoundException`, `EventingFunctionNotFoundException`, FTS exceptions, `ScopeNotFoundException`, `BucketExistsException`, `AuthenticationFailedException` are correctly thrown. - - -* https://issues.couchbase.com/browse/NCBC-3164[NCBC-3164], -https://issues.couchbase.com/browse/NCBC-3177[NCBC-3177]: -Fix bugs where NullReferenceException were thrown in -SendAsync (because the OperationBuilder has not been set for a NOOP) -and rebalancing (when the cluster map was missing an alternate address). - -* https://issues.couchbase.com/browse/NCBC-3190[NCBC-3190]: -Fixed bug where CreateDataverseAsync failed when passed an empty TimeSpan. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3173[NCBC-3173], -https://issues.couchbase.com/browse/NCBC-3182[NCBC-3182]: -Bundle Capella CA cert with SDK, and use it by default. -(Note: fix is .NET 5+ only) - -* https://issues.couchbase.com/browse/NCBC-2870[NCBC-2870]: -Added OpenTelemetry 1.2.0 AggregatingMeter Otel integration. - -* https://issues.couchbase.com/browse/NCBC-3082[NCBC-3082]: -Support parameterized N1QL queries using string interpolation in .NET 6 - -* https://issues.couchbase.com/browse/NCBC-3180[NCBC-3180]: -Fixed `GetAllIndexes` response on default collection. - -* https://issues.couchbase.com/browse/NCBC-3043[NCBC-3043]: -Made `ChannelConnectionPool` the default. -This was added in 3.1.2, and is now the default, replacing `DataFlowConnectionPool`. -(To revert to the previous connection pool set `ClusterOptions.Experiments.ChannelConnectionPools` to false.) - -* https://issues.couchbase.com/browse/NCBC-3079[NCBC-3079]: -Improved logging performance in hot paths. - -* https://issues.couchbase.com/browse/NCBC-3126[NCBC-3126]: -Reduce heap allocations deserializing vBucket maps. - -* https://issues.couchbase.com/browse/NCBC-3132[NCBC-3132], -https://issues.couchbase.com/browse/NCBC-3134[NCBC-3134], -https://issues.couchbase.com/browse/NCBC-3137[NCBC-3137]: -Switched to `System.Text.Json `for exception error contexts, `OperationSpec.ToString`, `ClusterVersionProvider` - -* https://issues.couchbase.com/browse/NCBC-3138[NCBC-3138]: -Support both Newtonsoft and System.Text.Json` for DiagnosticReport - - -== .NET SDK 3.2 Releases - - -=== Version 3.2.9 (4 April 2022) - -Version 3.2.9 is the ninth release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.9.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.9[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.9[Nuget] - -==== Special Note - -* During a rebalance upgrade from 6.x (or any earlier version) to 7x, in mixed mode (where you are communicating with Couchbase Server whilst some but not all nodes are upgraded), there is a known issue where data may be written to the wrong location. -The solution is to either upgrade to 3.2.9, or to pause application processing so there are no writes until you have upgraded all nodes. -If you encounter a similar situation during migration and need help with mitigation, please contact our support team. - -* Between bug fixes and performance improvements, the `ChannelConnectionPool` will be made the default in a future release. -Give it a try now with `ClusterOptions.Experiments.ChannelConnectionPools = true;` - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3174[NCBC-3174]: Out of Retries misclassified as Operation Timed Out - -* https://issues.couchbase.com/browse/NCBC-3176[NCBC-3176]: ExponentialBackoff only ever increases globally - -* https://issues.couchbase.com/browse/NCBC-2994[NCBC-2994]: Trace listener leaks spans when an exception is thrown - -* https://issues.couchbase.com/browse/NCBC-3076[NCBC-3076]: NullReferenceException when tracing span has no parent - -* https://issues.couchbase.com/browse/NCBC-3111[NCBC-3111]: PingReport output should not include last_activity_us - -* https://issues.couchbase.com/browse/NCBC-3122[NCBC-3122]: Duplicate view exception types for DesignDocumentNotFound - -* https://issues.couchbase.com/browse/NCBC-3127[NCBC-3127]: Search query ConsistentWith uses bucket name instead of index name for scan vector key - -* https://issues.couchbase.com/browse/NCBC-3149[NCBC-3149]: Synchronize bucket creation to avoid Object Disposed Exceptions - -* https://issues.couchbase.com/browse/NCBC-3160[NCBC-3160]: Wrong host was used for lookup - -* https://issues.couchbase.com/browse/NCBC-3163[NCBC-3163]: Bucket name escaping in QueryIndexManager.GetAllIndexesAsync - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -* https://issues.couchbase.com/browse/NCBC-3172[NCBC-3172]: .NET SDK fails to connect to correct node in custom port (cluster_run) multi-node setup - -==== New Features and Behavioral Changes -* https://issues.couchbase.com/browse/NCBC-3099[NCBC-3099]: Clean up uses of ToString() on primitives to be sure we use InvariantCulture. - -* https://issues.couchbase.com/browse/NCBC-3125[NCBC-3125]: Use System.Text.Json for bucket management - -* https://issues.couchbase.com/browse/NCBC-3133[NCBC-3133]: Use System.Text.Json to serialize OperationResult and OperationResult.ToString() - -* https://issues.couchbase.com/browse/NCBC-3150[NCBC-3150]: Improve error messages in views and FTS - -* https://issues.couchbase.com/browse/NCBC-3168[NCBC-3168]: Add exception to debug log in CircuitBreaker - -=== Version 3.2.8 (2 March 2022) - -Version 3.2.8 is the eighth release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.8.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.8[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.8[Nuget] - -NOTE: .NET Core 2.1 support has been dropped from the SDK, as of 3.2.5. -This corresponds to Microsoft's decision to EOL .NET Core 2.1 on August 21, 2021. - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3091[NCBC-3091]: -NRE GetDocumentFromReplicaAsync when EndPoint is null v3.2.X - -* https://issues.couchbase.com/browse/NCBC-3110[NCBC-3110]: -PingReport does not honor token or default timeout - -* https://issues.couchbase.com/browse/NCBC-3114[NCBC-3114]: -Json Converters not used for some EventingFunctionSetting fields - -* https://issues.couchbase.com/browse/NCBC-3119[NCBC-3119]: -MutateIn does not use registered ITranscoder or ITypeSerializer - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3103[NCBC-3103]: -Integrate Transactions into couchbase-net-client repo - -* https://issues.couchbase.com/browse/NCBC-3105[NCBC-3105]: -Build and package Couchbase.Transactions with CouchbaseNetClient - -* https://issues.couchbase.com/browse/NCBC-2176[NCBC-2176]: -3.0 API Migration guide - -* https://issues.couchbase.com/browse/NCBC-2711[NCBC-2711]: -Build DocFx site in Jenkins during release pipeline. - -* https://issues.couchbase.com/browse/NCBC-3112[NCBC-3112]: -Update integration tests to work with System.Text.Json - -* https://issues.couchbase.com/browse/NCBC-3012[NCBC-3012]: -Review GitHub protocol security and replace git:// - -* https://issues.couchbase.com/browse/NCBC-3017[NCBC-3017]: -Expose key/value metrics for instrumentation and observability - -* https://issues.couchbase.com/browse/NCBC-3060[NCBC-3060]: -Reduce heap allocations for ClusterNode.SendAsync - -* https://issues.couchbase.com/browse/NCBC-3081[NCBC-3081]: -Reuse CancellationTokenSources which have not timed out - -* https://issues.couchbase.com/browse/NCBC-3113[NCBC-3113]: -Update DataStructures to be compatible with System.Text.Json - -* https://issues.couchbase.com/browse/NCBC-3120[NCBC-3120]: -Use System.Text.Json to serialize QueryOptions - - -=== Version 3.2.7 (1 February 2022) - -Version 3.2.7 is the seventh release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.7.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.7[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.7[Nuget] - -NOTE: .NET Core 2.1 support has been dropped from the SDK, as of 3.2.5. -This corresponds to Microsoft's decision to EOL .NET Core 2.1 on August 21, 2021. - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-3085[NCBC-3085]: -Fixed potential issue with `Random.Next` returning only zero, -by using `RandomNumberGenerator.GetInt32` if available. - -* https://issues.couchbase.com/browse/NCBC-3086[NCBC-3086]: -Improved error handling in QueryIndexManager. - -* https://issues.couchbase.com/browse/NCBC-3090[NCBC-3090]: -Fixed TaskCancellationException in EventingFunctionManager. - -* https://issues.couchbase.com/browse/NCBC-3092[NCBC-3092]: -Resolve DNS for each connection rather than node bootstrap. - -* https://issues.couchbase.com/browse/NCBC-3095[NCBC-3095]: -Modified to shutdown the Bootstrapper loop on Dispose, -avoiding an indefinite loop. - -* https://issues.couchbase.com/browse/NCBC-3096[NCBC-3096]: -Cleaned up `CancellationTokenSource` handling in ConfigHandler. - -* https://issues.couchbase.com/browse/NCBC-3100[NCBC-3100]: -Included `LastDispatchedFrom` and `LastDispatchedTo` in `IErrorContext` implementations. - -* https://issues.couchbase.com/browse/NCBC-3102[NCBC-3102]: -Fixed a bug where the `RemoteHost` tag was assigned the value of LocalHost -when an Orphaned report is generated. - -* https://issues.couchbase.com/browse/NCBC-3107[NCBC-3107]: -Escape keyspace values with backticks only if missing, -fixing an error where `IQueryIndexManager` didn't accept some bucket names. - -* https://issues.couchbase.com/browse/NCBC-3109[NCBC-3109]: -Fixed issue with Quota Limited Exceptions not being thrown for some Management apis. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-2964[NCBC-2964]: -Added `QueryOptions.PreserveExpiry` - -* https://issues.couchbase.com/browse/NCBC-2973[NCBC-2973]: -Enhanced Index Management API with ability to manage indexes for a collection or scope. - -* https://issues.couchbase.com/browse/NCBC-3035[NCBC-3035]: -Improved performance of EnumExtensions method calls. - -* https://issues.couchbase.com/browse/NCBC-3036[NCBC-3036]: -Added tracing spans for improved Observability of compression/decompression performance. - -* https://issues.couchbase.com/browse/NCBC-3059[NCBC-3059]: -Reduced heap allocations surrounding OperationCancellationRegistration. - -* https://issues.couchbase.com/browse/NCBC-3063[NCBC-3063]: -Replaced Stopwatch in AsyncState with a lightweight approach. - -* https://issues.couchbase.com/browse/NCBC-3089[NCBC-3089]: -Added clone method to QueryOptions to avoid reuse and potential threading issues. - -* https://issues.couchbase.com/browse/NCBC-3097[NCBC-3097]: -Reduced risk of odd behaviors during connection pool scale down with use of `TaskCreationOptions.RunContinuationsAsynchronously`. - - -=== Version 3.2.6 (12 January 2022) - -Version 3.2.6 is the sixth release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.6.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.6[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.6[Nuget] - -NOTE: .NET Core 2.1 support has been dropped from the SDK, as of 3.2.5. -This corresponds to Microsoft's decision to EOL .NET Core 2.1 on August 21, 2021. - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2647[NCBC-2647]: -`CreatePrimaryIndexAsync` throws exceptions / ignores `IgnoreIfExists`. - -* https://issues.couchbase.com/browse/NCBC-2829[NCBC-2829]: -NoOp operations can fail with an `ObjectDisposedException` on MultiplexingConnection. - -* https://issues.couchbase.com/browse/NCBC-2977[NCBC-2977]: -When you cannot connect to a bucket you may recieve a Memcached bucket error. - -* https://issues.couchbase.com/browse/NCBC-2980[NCBC-2980]: -Threshold Logging report is missing server duration(s). - -* https://issues.couchbase.com/browse/NCBC-2981[NCBC-2981]: -Threshold Logging report is missing timeout. - -* https://issues.couchbase.com/browse/NCBC-2999[NCBC-2999]: -Subdocument Operation `LookupInAsync` must throw `PathNotFoundException`. - -* https://issues.couchbase.com/browse/NCBC-3008[NCBC-3008]: -`RequestTooBigException` should be `ValueTooLargeException`. - -* https://issues.couchbase.com/browse/NCBC-3047[NCBC-3047]: -Tracing is not stopped when the cluster is disposed. - -* https://issues.couchbase.com/browse/NCBC-3050[NCBC-3050]: -Exception iterating over a DataStructures dictionary. - -* https://issues.couchbase.com/browse/NCBC-3057[NCBC-3057]: -Incorrect and inefficient db.couchbase.service span tags. - -* https://issues.couchbase.com/browse/NCBC-3061[NCBC-3061]: -PersistentDictionary should use a replace operation when setting `Item: key`. - -* https://issues.couchbase.com/browse/NCBC-3062[NCBC-3062]: -Don't set `MaxIdleTime` on `ServicePoint` in .NET Core 3.1. - -* https://issues.couchbase.com/browse/NCBC-3072[NCBC-3072]: -`CollectionManager.GetAllScopesAsync` throws on success. - -* https://issues.couchbase.com/browse/NCBC-3073[NCBC-3073]: -PersistentDictionary. TryGetValue does not properly map path not found error. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-3029[NCBC-3029]: -Create basic implementation of `SystemTextJsonSerializer`. - -* https://issues.couchbase.com/browse/NCBC-3066[NCBC-3066]: -Develop Key/Value API tests. - -* https://issues.couchbase.com/browse/NCBC-3069[NCBC-3069]: -Add project with basic tests. - -* https://issues.couchbase.com/browse/NCBC-3001[NCBC-3001]: -log message formatting opCode and endpoint parameters are swapped. - -* https://issues.couchbase.com/browse/NCBC-3037[NCBC-3037]: -Add additional unit testing to Rate Limiting code. - -* https://issues.couchbase.com/browse/NCBC-3056[NCBC-3056]: -Ignore null reference exception in global config resolution is server version is earlier than 6.5. - -* https://issues.couchbase.com/browse/NCBC-2692[NCBC-2692]: -Management APIs should provide detailed responses to errors (ban `EnsureStatusCode`). - -* https://issues.couchbase.com/browse/NCBC-2937[NCBC-2937]: -Support for .NET 6.0. - -* https://issues.couchbase.com/browse/NCBC-2946[NCBC-2946]: -Bucket Management API -- Add Custom Conflict Resolution to the enumeration for Conflict Resolution Type. - -* https://issues.couchbase.com/browse/NCBC-2947[NCBC-2947]: -ARM -- Support for Apple Silicon. - -* https://issues.couchbase.com/browse/NCBC-2950[NCBC-2950]: -Extend FTS options to set IncludeLocations and Operator. - -* https://issues.couchbase.com/browse/NCBC-2956[NCBC-2956]: -Support for AWS AWS Graviton2. - -* https://issues.couchbase.com/browse/NCBC-2971[NCBC-2971]: -Bucket Management API -- Add Storage Option. - -* https://issues.couchbase.com/browse/NCBC-3003[NCBC-3003]: InternalServerFailureException. - -* https://issues.couchbase.com/browse/NCBC-3033[NCBC-3033]: -Remove finalizer from OperationBase. - -* https://issues.couchbase.com/browse/NCBC-3046[NCBC-3046]: -Reduce tracing related heap allocations. - -* https://issues.couchbase.com/browse/NCBC-3049[NCBC-3049]: -Sporadic logging failures in unit tests. - -* https://issues.couchbase.com/browse/NCBC-3053[NCBC-3053]: -Add lambda to options in `Cluster.ConnectAsync` overload. - -* https://issues.couchbase.com/browse/NCBC-3064[NCBC-3064]: -Construct Activity objects using parent `ActivityContext`. - -* https://issues.couchbase.com/browse/NCBC-3070[NCBC-3070]: -Add API documentation to source files in Sub-Doc API. - -* https://issues.couchbase.com/browse/NCBC-3080[NCBC-3080]: -Use C# LangVersion 10. - - -=== Version 3.2.5 (10 December 2021) - -Version 3.2.5 is the fifth release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.5.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.5[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.5[Nuget] - -NOTE: .NET Core 2.1 support has been dropped from the SDK, as of 3.2.5. -This corresponds to Microsoft's decision to EOL .NET Core 2.1 on August 21, 2021. - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: -Fixed TimeoutExceptions after rebound in Failover/Eject tests. - -* https://issues.couchbase.com/browse/NCBC-2983[NCBC-2983]: -Allowed query timeouts to exceed 100ms. - -* https://issues.couchbase.com/browse/NCBC-2991[NCBC-2991]: -Fixed compatibility with DI NET 6.0 - added support for named bucket/collection DI. - -* https://issues.couchbase.com/browse/NCBC-2993[NCBC-2993]: -Rewrote CancellationTokenPair to dispose the linked CancellationTokenSource during GC, avoiding memory leaks. - -* https://issues.couchbase.com/browse/NCBC-2995[NCBC-2995]: -Fixed slow memory leak in OrphanReporter. - -* https://issues.couchbase.com/browse/NCBC-3005[NCBC-3005]: -Fixed GetCidByName failure with "Not connected to any bucket", by ensuring the operation is routed to KV node. - -* https://issues.couchbase.com/browse/NCBC-3007[NCBC-3007]: -Improved logging around connection pool scale down, for deeper inspection of DataFlowConnectionPool behavior. - -* https://issues.couchbase.com/browse/NCBC-3009[NCBC-3009]: -Addressed sync-over-async deadlocks. - -* https://issues.couchbase.com/browse/NCBC-3013[NCBC-3013]: -Keep connections alive after send is canceled. -This fixes issue where canceling K/V operations while waiting on network send killed the connection. - -* https://issues.couchbase.com/browse/NCBC-3018[NCBC-3018]: -Fix background worker edge case where error "Comparing the same configs is not allowed" was hit. - -* https://issues.couchbase.com/browse/NCBC-3021[NCBC-3021]: -Fixed regression with legacy Memcached buckets. - -* https://issues.couchbase.com/browse/NCBC-3045[NCBC-3045]: -Fixed Fix WaitUntilReadyAsync for FTS. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-3041[NCBC-3041]; -https://issues.couchbase.com/browse/NCBC-2996[NCBC-2996]; -https://issues.couchbase.com/browse/NCBC-3031[NCBC-3031]: -Work on updating .NET targets. -Removed unneeded .netstandard2.0 target from DI project. -Made code changes to prepare for .NET 6. -Added .NET 5 Target. - -* https://issues.couchbase.com/browse/NCBC-2948[NCBC-2948]: -Added special error handling for rate and quota limits. - -* https://issues.couchbase.com/browse/NCBC-2600[NCBC-2600]: -Set default query HTTP Idle timeout to 4.5s, to avoid premature IOException when connecting with default values. - -* https://issues.couchbase.com/browse/NCBC-3004[NCBC-3004]: -Added log warning when socket disconnects from cluster - -* https://issues.couchbase.com/browse/NCBC-3019[NCBC-3019]: -Enabled SSL cipher configuration. - -* https://issues.couchbase.com/browse/NCBC-3020[NCBC-3020]: -Added support for custom deserializers for GET projections. - -* https://issues.couchbase.com/browse/NCBC-3022[NCBC-3022]: -Improved lock contention getting collection CIDs. - -* https://issues.couchbase.com/browse/NCBC-3023[NCBC-3023]: -Enabled nullable annotations to serializer/transcoder. - -* https://issues.couchbase.com/browse/NCBC-3025[NCBC-3025]: -Cleaned up project files and NuGet dependencies. - -* https://issues.couchbase.com/browse/NCBC-3034[NCBC-3034]: -Reduced blocking in async methods in data structures, resulting in more efficient thread utilization. - -* https://issues.couchbase.com/browse/NCBC-3044[NCBC-3044]: -Fixes to problematic OpenTelemetry tracing registration. -A consumer may now register with an OpenTelemetry provider which -is being managed outside the SDK. - - -=== Version 3.2.4 (2 November 2021) - -Version 3.2.4 is the fourth release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.4.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.4[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.4[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: -TimeoutExceptions continue after rebound in Failover/Eject tests. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2974[NCBC-2974]: -When `GetCid` failed, an infinite loop could be triggered, causing the `CidLock` to time out. -The regression that caused this in the previous release has now been fixed. - -* https://issues.couchbase.com/browse/NCBC-2989[NCBC-2989]: -Fixed side effects related to singleton `CouchbaseHttpClient`. -Now each consuming service can safely manipulate the `HttpClient`'s timeout and connection ID headers and such without affecting other services. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2979[NCBC-2979]: -Added support for Error Map v2. - -* https://issues.couchbase.com/browse/NCBC-2987[NCBC-2987]: -Updated NuGet package info. - -* https://issues.couchbase.com/browse/NCBC-2477[NCBC-2477]: -Replaced `HttpClientHandler` with `SocketsHttpHandler`. - -* https://issues.couchbase.com/browse/NCBC-2859[NCBC-2859]: -Completed Field Level Encryption implementation, adding RSA support for legacy upgrade scenarios. - -* https://issues.couchbase.com/browse/NCBC-2865[NCBC-2865]: -Added new `revEpoch` field, allowing server to provide higher level guidance for current, correct bucket configuration. - -* https://issues.couchbase.com/browse/NCBC-2992[NCBC-2992]: -Renamed `BucketBase.BucketConfig` to `BucketBase.CurrentConfig` for clarity. -Renamed `BucketConfigExtensions.IsNewer()` to `BucketConfigExtensions.IsNewerThan()`. - - -=== Version 3.2.3 (6 October 2021) - -Version 3.2.3 is the third release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.3.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.3[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.3[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: -TimeoutExceptions continue after rebound in Failover/Eject tests. - -==== Fixed Issues -* https://issues.couchbase.com/browse/NCBC-2965[NCBC-2965]: -Don't capture ExecutionContext for long-running tasks/timers, as this could cause memory leaks. -* https://issues.couchbase.com/browse/NCBC-2966[NCBC-2966]: -Allow ILoggerFactory from the DI container to be overridden. -* https://issues.couchbase.com/browse/NCBC-2967[NCBC-2967]: -Rewrite OrphanReporter to avoid blocking calls. -* https://issues.couchbase.com/browse/NCBC-2968[NCBC-2968]: -Use correct service type name in query context. -* https://issues.couchbase.com/browse/NCBC-2969[NCBC-2969]: -Fix auto-repair of the ChannelConnectionPool after a node outage. - -==== New Features and Behavioral Changes. -* https://issues.couchbase.com/browse/NCBC-2949[NCBC-2949]: -Improve client side error message when TLS is enforced on the server side -* https://issues.couchbase.com/browse/NCBC-2961[NCBC-2961]: -Optimize performance of the internal EscapeIfRequired routine. -* https://issues.couchbase.com/browse/NCBC-2963[NCBC-2963]: -Support Dependency Injection of Named Scopes/Collections. -* https://issues.couchbase.com/browse/NCBC-2970[NCBC-2970]: -Optimize performance of queuing operation completion by more than 50% by using `UnsafeQueueUserWorkItem`. -* https://issues.couchbase.com/browse/NCBC-2962[NCBC-2962]: -Add Lambda overloads for Query and Analytics at the Scope level. - -=== Version 3.2.2 (15 September 2021) - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.2.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.2[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.2[Nuget] - -This is a re-release of 3.2.1 with exactly the same commits due to a packaging bug in 3.2.1. The only difference is the version and package fix. - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - - -=== Version 3.2.1 (9 September 2021) DO NOT USE - USE 3.2.2 INSTEAD - -Version 3.2.1 is the second release of the 3.2 series. - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.1.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.1[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.1[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: -TimeoutExceptions continue after rebound in Failover/Eject tests. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2697[NCBC-2697]: -The Eventing Service can now be managed from the SDK. Users can create, delete, publish, pause, and select Eventing Functions. - -* https://issues.couchbase.com/browse/NCBC-2959[NCBC-2959]: -By default SDK3 sends the IP as the target host during TLS/SSL authentication -- -unlike SDK2 which sends either the hostname or IP address, depending on the returned server configuration. -A new flag, `ForceIpAsTargetHost`, has been introduced to allow SDK3 to mimic SDK2 behavior. - - -=== Version 3.2.0 (26 July 2021) - -Version 3.2.0 is the first release of the 3.2 series, featuring collections and scopes - -https://packages.couchbase.com/clients/net/3.2/Couchbase-Net-Client-3.2.0.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.2.0[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.2.0[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: -TimeoutExceptions continue after rebound in Failover/Eject tests. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2660[NCBC-2660]: -After a failure that causes the circuit breaker to open, such as full send queue, new operation will immediately fail with CircuitBreakerException. The retry orchestrator now retries in this situation, preventing silent failure. -* https://issues.couchbase.com/browse/NCBC-2730[NCBC-2730]: -Expose Partition Information in Query Management API. -* https://issues.couchbase.com/browse/NCBC-2841[NCBC-2841]: -Construct `query_context` in Analytics queries correctly, fixing a bug with datasets that required escaping with backticks. -* https://issues.couchbase.com/browse/NCBC-2853[NCBC-2853]: After a `not_my_vbucket` exception during a rebalance, use a Fast-forward map, if available, to locate the correct vbucket. -* https://issues.couchbase.com/browse/NCBC-2880[NCBC-2880]: -Analytics fix and refactor to improve testability. -* https://issues.couchbase.com/browse/NCBC-2890[NCBC-2890]: -Enable and collect server duration for tracing. -* https://issues.couchbase.com/browse/NCBC-2891[NCBC-2891]: -Fixes a bug where the CID for the default Scope/Collection was not passed to some 7.0beta server versions. -* https://issues.couchbase.com/browse/NCBC-2894[NCBC-2894]: -Remove unsupported CAS setting from Increment/DecrementOptions -* https://issues.couchbase.com/browse/NCBC-2929[NCBC-2929], -https://issues.couchbase.com/browse/NCBC-2899[NCBC-2899]: -Correct Logging Meter emit_interval to output every 600 seconds. -* https://issues.couchbase.com/browse/NCBC-2903[NCBC-2903]: -Remove reference to AggregatingMeter, which has been superseded by LoggingMeter. -* https://issues.couchbase.com/browse/NCBC-2900[NCBC-2900], -https://issues.couchbase.com/browse/NCBC-2902[NCBC-2902], -https://issues.couchbase.com/browse/NCBC-2904[NCBC-2904]: -Align LoggingMeter Output Format with RFC, adding percentile values and setting JSON output to terse by default, instead of pretty. -* https://issues.couchbase.com/browse/NCBC-2905[NCBC-2905], -https://issues.couchbase.com/browse/NCBC-2906[NCBC-2906], -https://issues.couchbase.com/browse/NCBC-2907[NCBC-2907], -https://issues.couchbase.com/browse/NCBC-2908[NCBC-2908]: -Align ThresholdLoggingTracer Output with RFC, and enable by default. -Now correctly omits null fields in JSON output, includes timeout. -* https://issues.couchbase.com/browse/NCBC-2916[NCBC-2916]: -Add "operation" property to allow LoggingMeterReport output to be split by opcode. -* https://issues.couchbase.com/browse/NCBC-2928[NCBC-2928]: -Align Threshold Logger output with KV Tracer Output spec. -* https://issues.couchbase.com/browse/NCBC-2921[NCBC-2921]: -Fix a bug where the quota.rawRAM size may over/under flow the Int32 size of the BucketSettings.RamQuotaMB field when the JSON is parsed. -* https://issues.couchbase.com/browse/NCBC-2924[NCBC-2924]: -Fix a bug where Date Time Offsets were always coverted to local time zone, by passing DateParseHandling from SerializerSettings to the DefaultStreamingJsonReader. -* https://issues.couchbase.com/browse/NCBC-2927[NCBC-2927]: -Requests and responses will be handled in an Out-of-Order manner by default. -* https://issues.couchbase.com/browse/NCBC-2930[NCBC-2930]: -Update Collection and Scope error parsing -* https://issues.couchbase.com/browse/NCBC-2931[NCBC-2931]: -Fixes a bug where when the Collection id changes, those changes were not picked up causing an operation timeout. -* https://issues.couchbase.com/browse/NCBC-2933[NCBC-2933], -https://issues.couchbase.com/browse/NCBC-2934[NCBC-2934]: -Unit Test improvements and fixes to Jenkins Pipeline. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2869[NCBC-2869]: -Provide OpenTelemetry tracing module, allowing export via any of the OpenTelemetry exporters such as ZipKin, Jaeger, etc. -* https://issues.couchbase.com/browse/NCBC-2893[NCBC-2893]: -Allow a parent span to added to the options for each service or operation for tracing. -* https://issues.couchbase.com/browse/NCBC-2856[NCBC-2856], -https://issues.couchbase.com/browse/NCBC-2923[NCBC-2923]: -Add Orphaned Response Logging to SDK. -* https://issues.couchbase.com/browse/NCBC-2911[NCBC-2911]: -Travel Sample App added, with examples of Collections and Scopes across Query, KV, and Search. -* https://issues.couchbase.com/browse/NCBC-2926[NCBC-2926]: -Add license to footer of all files in Couchbase project -* https://issues.couchbase.com/browse/NCBC-2574[NCBC-2574], -https://issues.couchbase.com/browse/NCBC-2575[NCBC-2575]: -Analytics management: manage Remote Links, support compound dataverse names. -* https://issues.couchbase.com/browse/NCBC-2581[NCBC-2581], -https://issues.couchbase.com/browse/NCBC-2800[NCBC-2800]: -Provide tracing for the .NET SDK based upon RFC 67 Extended SDK Observability. -Implements Threshold Logger, LoggingMeter for latency metrics. -* https://issues.couchbase.com/browse/NCBC-2585[NCBC-2585], -https://issues.couchbase.com/browse/NCBC-2717[NCBC-2717]: -Add build Support for .NET 5.0 and Ubuntu 20.04 LTS -* https://issues.couchbase.com/browse/NCBC-2892[NCBC-2892], -https://issues.couchbase.com/browse/NCBC-2886[NCBC-2886], -https://issues.couchbase.com/browse/NCBC-2889[NCBC-2889]: -Update and correct links for 3.2.0 release. -* https://issues.couchbase.com/browse/NCBC-2699[NCBC-2699], -https://issues.couchbase.com/browse/NCBC-2777[NCBC-2777]: -Provide a framework for client-side encryption of sensitive fields in JSON documents using Field Level Encryption. -* https://issues.couchbase.com/browse/NCBC-2790[NCBC-2790]: -Replace, Upsert and MutateIn support `PersistTtl` in servers >= 7.0 which keeps subsequent calls from modifying the original TTL value on update. -* https://issues.couchbase.com/browse/NCBC-2807[NCBC-2807]: -Deprecate Collection Manager `GetScope()` in favour of `GetAllScopes()` -* https://issues.couchbase.com/browse/NCBC-2846[NCBC-2846]: -Distinguish between CAS mismatch and DML failure on query error. -* https://issues.couchbase.com/browse/NCBC-2912[NCBC-2912], -https://issues.couchbase.com/browse/NCBC-2917[NCBC-2917]: -Ensure that a server response 13014 is also recognized as an authentication failure by the query parser. -* https://issues.couchbase.com/browse/NCBC-2932[NCBC-2932]: -Add Cause field on Query.Error for Transactions Query support. - - -== .NET SDK 3.1 Releases - - -=== Version 3.1.7 (02 June 2021) - -Version 3.1.7 is the eighth release of the 3.1 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.1/Couchbase-Net-Client-3.1.7.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.7[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.7[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: -TimeoutExceptions continue after rebound in Failover/Eject tests. -* https://issues.couchbase.com/browse/NCBC-2891[NCBC-2891]: -Send 0x0 for default scope/collections for certain Server 7.0 beta versions. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2879[NCBC-2879]: -Combi test failure fixed by only running tests with `CollectionTests.CollectionIdChanged_RetriesAuto` on servers which support collections and the newer management URI structure. -* https://issues.couchbase.com/browse/NCBC-2888[NCBC-2888]: -Converting null literal or possible null value to non-nullable type -- a rare compile time error for certain environments fixed by using `var` instead of `TValue`. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2698[NCBC-2698]: -Added FTS Support for Collections. -* https://issues.couchbase.com/browse/NCBC-2881[NCBC-2881]: -Use Hello to determine if collections are available now no longer leaves exception in DEBUG level log. -* https://issues.couchbase.com/browse/NCBC-2887[NCBC-2887]: -Previously the CID value of 0 could be appended to the key if the default scope/collection was being used. -Now, this is checked for, and we don't send the CID with the key in this case, as it is not required by the server. - - -=== Version 3.1.6 (24 May 2021) - -Version 3.1.6 is the seveneth release of the 3.1 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.1/Couchbase-Net-Client-3.1.6.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.6[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.6[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: -TimeoutExceptions continue after rebound in Failover/Eject tests. - -==== Fixed Issues -* https://issues.couchbase.com/browse/NCBC-2881[NCBC-2881]: -The SDK now uses Hello to determine if collections are available, giving improved accuracy over the heuristic method. -* https://issues.couchbase.com/browse/NCBC-2877[NCBC-2877]: -Collection GIT_CID Eaccess error fix. - - -=== Version 3.1.5 (13 May 2021) - -Version 3.1.5 is the sixth release of the 3.1 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.1/Couchbase-Net-Client-3.1.5.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.5[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.5[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: TimeoutExceptions continue after rebound in Failover/Eject tests - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2551[NCBC-2551]: -GetAllBucketsAsync always throws ArgumentNullException -* https://issues.couchbase.com/browse/NCBC-2860[NCBC-2860]: -Configuration revisions should be parsed and compared with 64-bit precision. -* https://issues.couchbase.com/browse/NCBC-2864[NCBC-2864]: -Unknown default collection regression -* https://issues.couchbase.com/browse/NCBC-2867[NCBC-2867]: -ConfigHandler dead locks in K8 when delete pod is used -* https://issues.couchbase.com/browse/NCBC-2871[NCBC-2871]: -NRE in BucketManager and UserManager part 2 -* https://issues.couchbase.com/browse/NCBC-2876[NCBC-2876]: -Upserting to <7.0 clusters does not upsert the content - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2862[NCBC-2862]: -Log message on timeout appears to lack instance -* https://issues.couchbase.com/browse/NCBC-2866[NCBC-2866]: -Exception: Non-default Scopes and Collections not supported on this server version. -* https://issues.couchbase.com/browse/NCBC-2839[NCBC-2839]: -SDK API changes due to protocol level changes to get_collection_id -* https://issues.couchbase.com/browse/NCBC-2858[NCBC-2858]: -Move collection id fetch into the operation call on the collection - - -=== Version 3.1.4 (8 April 2021) - -Version 3.1.4 is the fifth release of the 3.1 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.1/Couchbase-Net-Client-3.1.4.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.4[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.4[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2851[NCBC-2851]: TimeoutExceptions continue after rebound in Failover/Eject tests - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2720[NCBC-2720]: Change QueryMetrics Property from ElaspedTime to ElapsedTime -* https://issues.couchbase.com/browse/NCBC-2831[NCBC-2831]: MutateIn is not throwing and classifying sub-doc errors correctly. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2828[NCBC-2828]: Cleanup sub-doc operation public API surface -* https://issues.couchbase.com/browse/NCBC-2842[NCBC-2842]: Add Couchbase.Core.Exceptions.TimeoutException -* https://issues.couchbase.com/browse/NCBC-2843[NCBC-2843]: K/V CancellationToken expiration does not include IErrorContext -* https://issues.couchbase.com/browse/NCBC-2844[NCBC-2844]: Make Query.ReadOnly obsolete and replace w/QueryOptions.Readonly -* https://issues.couchbase.com/browse/NCBC-2845[NCBC-2845]: Allow default IRetryStrategy to be overridden - - -=== Version 3.1.3 (3 March 2021) - -Version 3.1.3 is the fourth release of the 3.1 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.1/Couchbase-Net-Client-3.1.3.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.3[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.3[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2801[NCBC-2801]: -`NodeAdapter` incorrectly shows N1QL service is not available. -* https://issues.couchbase.com/browse/NCBC-2817[NCBC-2817]: -`LookupInAsync` and `MutateInAsync` builder extensions should accept null options. -* https://issues.couchbase.com/browse/NCBC-2823[NCBC-2823]: -Make `ClusterOptions.NetworkResolution` read/write. -* https://issues.couchbase.com/browse/NCBC-2826[NCBC-2826]: -Collection Id outdated exception on K-V ops. -* https://issues.couchbase.com/browse/NCBC-2827[NCBC-2827]: -`GET_CID` and `GET_SID` do not correctly retry if Scope/Collection not found. -* https://issues.couchbase.com/browse/NCBC-2811[NCBC-2811]: -Cache default scope/collection allocation. -* https://issues.couchbase.com/browse/NCBC-2812[NCBC-2812]: -Throw `UnsupportedException` if non-default scopes/cols are used in pre-7.0 clusters. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-2813[NCBC-2813]: -Cleanup `IOperation` and `OperationBase` code. -* https://issues.couchbase.com/browse/NCBC-2815[NCBC-2815]: -Replace `AsyncMutex` with `SemaphoreSlim`. -* https://issues.couchbase.com/browse/NCBC-2818[NCBC-2818]: -Queue operation completions on the global queue. -* https://issues.couchbase.com/browse/NCBC-2819[NCBC-2819]: -Enable `NetworkResolution` via the connection string. -* https://issues.couchbase.com/browse/NCBC-2833[NCBC-2833]: -Remove Type parameter from `UnlockAsync`. - - -=== Version 3.1.2 (4 February 2021) - -Version 3.1.2 is the third release of the 3.1 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.1/Couchbase-Net-Client-3.1.2.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.2[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.2[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -// There is no writer bandwidth available this week to make these issue comments more meaningful to the reader... -// Perhaps engineering could help? -// Look at any other SDK release note set for examples. ;) - -* https://issues.couchbase.com/browse/NCBC-2763[NCBC-2763]: -MutationToken throwing ArgumentNullException on static initialization. -* https://issues.couchbase.com/browse/NCBC-2766[NCBC-2766]: -CreateScopeAsync not creating collections in ScopeSpec. -* https://issues.couchbase.com/browse/NCBC-2767[NCBC-2767]: -ScopeNotFoundException when trying to get Scope after creating it. -* https://issues.couchbase.com/browse/NCBC-2784[NCBC-2784]: -Getting a collection right after creating it throws CollectionNotFoundException. -* https://issues.couchbase.com/browse/NCBC-2794[NCBC-2794]: -PackageIconUrl is still being used and blocks package creation. -* https://issues.couchbase.com/browse/NCBC-2797[NCBC-2797]: -Hot upgrade failure from 6.6.0 to 6.6.1 using SDK v3.1.2. -* https://issues.couchbase.com/browse/NCBC-2798[NCBC-2798]: -ThrowIfBootstrapFailed called twice in GetAsync. -* https://issues.couchbase.com/browse/NCBC-2804[NCBC-2804]: -Non-JSON transcoders cannot be mixed with requests for document expiry. -* https://issues.couchbase.com/browse/NCBC-2810[NCBC-2810]: -On pre-7.0 clusters default scopes/collections may not load. - -==== New Features and Behavioral Changes - -* https://issues.couchbase.com/browse/NCBC-2791[NCBC-2791]: -GetResult uses AddMilliseconds instead of AddSeconds for expiry. -* https://issues.couchbase.com/browse/NCBC-2796[NCBC-2796]: -SUBDOC_MULTI_PATH_FAILURE_DELETED throwing PathInvalid. -* https://issues.couchbase.com/browse/NCBC-2770[NCBC-2770]: -Add experimental connection pool based on System.Threading.Channels. -* https://issues.couchbase.com/browse/NCBC-2772[NCBC-2772]: -Cleanup key/value cancellation token and timeout handling. -* https://issues.couchbase.com/browse/NCBC-2776[NCBC-2776]: -Change SlicedMemoryOwner to a structure. -* https://issues.couchbase.com/browse/NCBC-2789[NCBC-2789]: -Unable to override the remote name mismatch error with custom validation. -* https://issues.couchbase.com/browse/NCBC-2793[NCBC-2793]: -Address misc compiler warnings. -* https://issues.couchbase.com/browse/NCBC-2802[NCBC-2802]: -Port sub-doc lambda extensions from SDK 2.x. -* https://issues.couchbase.com/browse/NCBC-2805[NCBC-2805]: -Optimize in-flight operation cleanup method. -* https://issues.couchbase.com/browse/NCBC-2808[NCBC-2808]: -Use ValueTask and IValueTaskSource for OperationBase.Completed. -* https://issues.couchbase.com/browse/NCBC-2809[NCBC-2809]: -Use ValueTask for new ScopeAsync/CollectionAsync methods. - - -=== Version 3.1.1 (13 January 2021) - -Version 3.1.1 is the second release of the 3.1 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.1/Couchbase-Net-Client-3.1.1.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.1[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.1[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2565[NCBC-2565]: -WaitUntilReady failure for 6.5. -* https://issues.couchbase.com/browse/NCBC-2660[NCBC-2660], -https://issues.couchbase.com/browse/NCBC-2935[NCBC-2935]: -Operations are now retried if they hit an open circuit breaker. -* https://issues.couchbase.com/browse/NCBC-2693[NCBC-2693]: -MutationToken.GetHashCode() implementation looks suspect. -* https://issues.couchbase.com/browse/NCBC-2694[NCBC-2694]: -Removed unnecessary linked CancellationToken. -* https://issues.couchbase.com/browse/NCBC-2726[NCBC-2726]: -Cannot read empty response bodies. -* https://issues.couchbase.com/browse/NCBC-2741[NCBC-2741]: -If the send queue is full when requeuing after connection cleanup, the operation is dropped. -* https://issues.couchbase.com/browse/NCBC-2746[NCBC-2746]: -using mutate in to update an existing value to null causes an IllegalArgumentException. -* https://issues.couchbase.com/browse/NCBC-2751[NCBC-2751]: -Use ConfigureAwait(false) on awaited task in DnsClientDnsResolver. -* https://issues.couchbase.com/browse/NCBC-2756[NCBC-2756]: -Do not allow empty hosts in ConnectionString. -* https://issues.couchbase.com/browse/NCBC-2760[NCBC-2760]: -MultiMutation duplicates specs on Retry, causing SUBDOC_INVALID_COMBO. -* https://issues.couchbase.com/browse/NCBC-2761[NCBC-2761]: -MutateIn is not setting Cas, ignoring MutateInOptions.CasValue, resulting in a default of 0 which always overwrites. -* https://issues.couchbase.com/browse/NCBC-2762[NCBC-2762]: -Threshold trace logging leaks memory. -* https://issues.couchbase.com/browse/NCBC-2764[NCBC-2764]: -Expiration of TimeSpan.Zero is being sent to server as 1 second expiration. -* https://issues.couchbase.com/browse/NCBC-2778[NCBC-2778]: -Throw CasMismatchException when CAS mismatch occurs. -* https://issues.couchbase.com/browse/NCBC-2780[NCBC-2780]: -Fix unit tests relying on obsolete Expiry method. -* https://issues.couchbase.com/browse/NCBC-2781[NCBC-2781]: -Make replica commands use CancellationToken. -* https://issues.couchbase.com/browse/NCBC-2782[NCBC-2782]: -Replica methods randomly completed with NotMyVBucket. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2716[NCBC-2716]: -Collections Analytics Test Changes. -* https://issues.couchbase.com/browse/NCBC-2747[NCBC-2747]: -Add KvSendQueueCapacity to ClusterOptions for tuning. -* https://issues.couchbase.com/browse/NCBC-2748[NCBC-2748]: -netcore3.0 target id deprecated and cannot be used with `dotnet pack`. -* https://issues.couchbase.com/browse/NCBC-2785[NCBC-2785]: -ArgumentOutOfRangeException if GetResult.Expiry called on GET operation. -* https://issues.couchbase.com/browse/NCBC-2788[NCBC-2788]: -`UserManagerTests.Test_UserInheritsCollectionAwareRoles` fails in combi tests. -* https://issues.couchbase.com/browse/NCBC-2653[NCBC-2653]: -Unnecessary allocation in classes implementing IOperation. -* https://issues.couchbase.com/browse/NCBC-2661[NCBC-2661]: -CouchbaseBucket is doing ad hoc retrying if CollectionOutdatedException. -* https://issues.couchbase.com/browse/NCBC-2677[NCBC-2677]: -Docs: Threshold Logging and Orphan Response Logging. -* https://issues.couchbase.com/browse/NCBC-2722[NCBC-2722]: -Improve performance of `WriteKey` using `stackalloc`. -* https://issues.couchbase.com/browse/NCBC-2723[NCBC-2723]: -Reduce async/await around circuit breakers on K/V ops. -* https://issues.couchbase.com/browse/NCBC-2724[NCBC-2724]: -Reduce task continuations related to K/V timeouts. -* https://issues.couchbase.com/browse/NCBC-2725[NCBC-2725]: -Improve logic around ITypeTranscoder instantiations. -* https://issues.couchbase.com/browse/NCBC-2727[NCBC-2727]: -Improve log redaction performance. -* https://issues.couchbase.com/browse/NCBC-2728[NCBC-2728]: -Improve LEB128 encoding performance. -* https://issues.couchbase.com/browse/NCBC-2729[NCBC-2729]: -Reduce task continuations on k/v GET operations. -* https://issues.couchbase.com/browse/NCBC-2731[NCBC-2731]: -Reduce JSON serialization heap allocations. -* https://issues.couchbase.com/browse/NCBC-2732[NCBC-2732]: -ConfigHandler processing is blocking a thread from the thread pool. -* https://issues.couchbase.com/browse/NCBC-2733[NCBC-2733]: -Improve efficiency of ErrorCode lookup in ErrorMap. -* https://issues.couchbase.com/browse/NCBC-2734[NCBC-2734]: -Improve CancellationTokenSource handling in RetryOrchestrator. -* https://issues.couchbase.com/browse/NCBC-2735[NCBC-2735]: -Optimize OperationBuilder performance. -* https://issues.couchbase.com/browse/NCBC-2736[NCBC-2736]: -Optimize key/value operation flag handling. -* https://issues.couchbase.com/browse/NCBC-2737[NCBC-2737]: -Use a static client description for spans. -* https://issues.couchbase.com/browse/NCBC-2738[NCBC-2738]: -Improve performance building connection tags for K/V operation spans. -* https://issues.couchbase.com/browse/NCBC-2740[NCBC-2740]: -Optimize performance when request tracing is disabled. -* https://issues.couchbase.com/browse/NCBC-2742[NCBC-2742]: -Reduce debug logging heap allocations on critical K/V path. -* https://issues.couchbase.com/browse/NCBC-2743[NCBC-2743]: -Reduce Task ContingentProperties heap allocations. -* https://issues.couchbase.com/browse/NCBC-2744[NCBC-2744]: -Enable reporting of test results in Jenkins. -* https://issues.couchbase.com/browse/NCBC-2745[NCBC-2745]: -Reduce lambda-related heap allocations for K/V operation completions. -* https://issues.couchbase.com/browse/NCBC-2749[NCBC-2749]: -Use Stopwatch to track connection idle time. -* https://issues.couchbase.com/browse/NCBC-2750[NCBC-2750]: -Use spans in MultiplexingConnection.ParseReceivedData. -* https://issues.couchbase.com/browse/NCBC-2752[NCBC-2752]: -Improve ToTtl performance. -* https://issues.couchbase.com/browse/NCBC-2753[NCBC-2753]: -Allow BucketBase.RetryAsync to be inlined. -* https://issues.couchbase.com/browse/NCBC-2754[NCBC-2754]: -Use Span<byte> for VBucketKeyMapper.GetIndex -* https://issues.couchbase.com/browse/NCBC-2755[NCBC-2755]: -Use ThrowHelper to improve inlining. -* https://issues.couchbase.com/browse/NCBC-2757[NCBC-2757]: -SkipLocalsInit when writing document keys to operations. -* https://issues.couchbase.com/browse/NCBC-2758[NCBC-2758]: -Use .NET provided encoding of strings to spans when available. -* https://issues.couchbase.com/browse/NCBC-2765[NCBC-2765]: -Improve buffer handling in MultiplexingConnection receive. -* https://issues.couchbase.com/browse/NCBC-2768[NCBC-2768]: -Improve precision of UnixMillisecondsConverter. -* https://issues.couchbase.com/browse/NCBC-2769[NCBC-2769]: -Avoid heap allocations for default K/V operations. -* https://issues.couchbase.com/browse/NCBC-2773[NCBC-2773]: -Simplify AsyncState handling of Opaque. -* https://issues.couchbase.com/browse/NCBC-2774[NCBC-2774]: -Make OperationBuilderPool tunable. -* https://issues.couchbase.com/browse/NCBC-2775[NCBC-2775]: -Improve array handling performance throughout the SDK. - - -=== Version 3.1.0 (2 December 2020) - -This is the first GA release of the 3.1 series, bringing enhancements and bugfixes over the 3.0 releases, -and adding features to support Couchbase Server 6.6. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.1.0.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.1.0[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.1.0[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2643[NCBC-2643]: -`DataFlowConnectionPool` was creating unbounded connections in certain situations, such as pinging for a buckets which had not yet been created. -This fix resolves the issue, although the number of connections will go up still but then trend back down, as they are in a `TIME_WAIT` state and it takes a little time for them to be reclaimed. -* https://issues.couchbase.com/browse/NCBC-2660[NCBC-2660]: -Operations were not retried if they hit an open circuit breaker (`CircuitBreakerException`); -the retry orchestrator will now retry these failures. -* https://issues.couchbase.com/browse/NCBC-2686[NCBC-2686]: -Facet result missing fields added to Search. -* https://issues.couchbase.com/browse/NCBC-2705[NCBC-2705]: -`RawBinaryTranscoder` was using invalid DataFormat. -It will now simply pass the body of the packet back to the consumer as it should. -* https://issues.couchbase.com/browse/NCBC-2706[NCBC-2706]: -A JSON string stored in Couchbase was generating an error when read as a string via `result.ContentAs()`. -The packet is now converted into a UTF8 string if the type of T is a string in `JsonTranscoder`, -so if you write a POCO to Couchbase reading it as a string now works as expected. -* https://issues.couchbase.com/browse/NCBC-2708[NCBC-2708]: -Sub-Document API Transcoder `InvalidOperationExceptions` are no longer thrown when a DataFormat mismatch occurs. - - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2386[NCBC-2386]: -Non-JSON & transcoders code samples added to developer documentation. -* https://issues.couchbase.com/browse/NCBC-2418[NCBC-2418]: -`maxTTL` can now be set via the `CollectionSpec.MaxExpiry` property. -* https://issues.couchbase.com/browse/NCBC-2572[NCBC-2572]: -Durability can now be set on the bucket, for Couchbase Server 6.6 and up. -* https://issues.couchbase.com/browse/NCBC-2589[NCBC-2589]: -Document Expiry Duration works as expected with offsets and with absolute time stamps. -* https://issues.couchbase.com/browse/NCBC-2622[NCBC-2622]: -GetResult.expiry() is deprecated. -Please use `GetResult.ExpiryTime` over `Expiry` as it accurately depicts the `TTL` of the document. -* https://issues.couchbase.com/browse/NCBC-2627[NCBC-2627], https://issues.couchbase.com/browse/NCBC-2631[NCBC-2631]: -FTS _Score_ parameter added to allow avoidance of scoring from Server 6.6. -* https://issues.couchbase.com/browse/NCBC-2679[NCBC-2679]: -A better opcode is used for basic Get scenarios, which will allow the server to return compressed documents once compression support is added to the .NET SDK. -* https://issues.couchbase.com/browse/NCBC-2709[NCBC-2709]: -A minor optimization in all key-value operations following improved performance of bootstrap test. -* https://issues.couchbase.com/browse/NCBC-2715[NCBC-2715]: -Added `InterfaceStabilityAttribute` for API interface stability. - - -== .NET SDK 3.0 Releases - -=== Version 3.0.7 (3 November 2020) - -Version 3.0.7 is the eighth release of the 3.0 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.7.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.7[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.7[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2641[NCBC-2641]: -ConfigHandler has already been started. -* https://issues.couchbase.com/browse/NCBC-2651[NCBC-2651]: -IncrementOptions and DecrementOptions are missing Expiry. -* https://issues.couchbase.com/browse/NCBC-2655[NCBC-2655]: -Bucket WaitUntilReadyAsync running into NullReferenceException. -* https://issues.couchbase.com/browse/NCBC-2656[NCBC-2656]: -Serialization/Transcoding Errors Are Unhandled. -* https://issues.couchbase.com/browse/NCBC-2660[NCBC-2660]: -Operations are not retried if they hit an open circuit breaker. -* https://issues.couchbase.com/browse/NCBC-2669[NCBC-2669]: -Upsert/Insert null with MutateIn fails with Invalid arguments (0x0004). -* https://issues.couchbase.com/browse/NCBC-2685[NCBC-2685]: -AccessDeleted not supported properly on MutateIn. - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2670[NCBC-2670]: -Collections - RBAC Collections - .net tests -* https://issues.couchbase.com/browse/NCBC-2569[NCBC-2569]: -.NET Logging page -* https://issues.couchbase.com/browse/NCBC-2580[NCBC-2580]: -Add Ephemeral Bucket Management Support -* https://issues.couchbase.com/browse/NCBC-2664[NCBC-2664]: -Operations are silently ignored if the send queue is full -* https://issues.couchbase.com/browse/NCBC-2668[NCBC-2668]: -Add RawBinaryTranscoder -* https://issues.couchbase.com/browse/NCBC-2675[NCBC-2675]: -Optimize VBucketKeyMapper.GetIndex -* https://issues.couchbase.com/browse/NCBC-2680[NCBC-2680]: -Share ServerFeatures on IConnection -* https://issues.couchbase.com/browse/NCBC-2688[NCBC-2688]: -Make synchronous Analytics query methods obsolete - - -=== Version 3.0.6 (13 October 2020) -Version 3.0.6 is the seventh release of the 3.0 series, bringing enhancements and bugfixes over the last stable release. - - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.6.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.6[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.6[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2187[NCBC-2187]: -CollectionManager - 400: Not allowed on this version of cluster (verify). -* https://issues.couchbase.com/browse/NCBC-2604[NCBC-2604]: -exception.IsRetryable() in docs. -* https://issues.couchbase.com/browse/NCBC-2619[NCBC-2619]: -Update KV samples. -* https://issues.couchbase.com/browse/NCBC-2638[NCBC-2638]: -Intermittent InvalidOperationException in Dependency Injection. -* https://issues.couchbase.com/browse/NCBC-2639[NCBC-2639]: -Upsert-and-remove doesn't work. -* https://issues.couchbase.com/browse/NCBC-2652[NCBC-2652]: -Operations gets stuck in retry loop until timeout. -* https://issues.couchbase.com/browse/NCBC-2657[NCBC-2657]: -Exceptions Aren't Thrown For N1QL Errors After Results. -* https://issues.couchbase.com/browse/NCBC-2659[NCBC-2659]: -Fix strong naming for Couchbase.Extensions.DependencyInjection. -* https://issues.couchbase.com/browse/NCBC-2662[NCBC-2662]: -Correct DI security for named buckets on .NET Core. -* https://issues.couchbase.com/browse/NCBC-2671[NCBC-2671]: -KV Throughput drop after failover-rebalance - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2033[NCBC-2033]: -3.0 API Query snippets in concept doc. -* https://issues.couchbase.com/browse/NCBC-2321[NCBC-2321]: -Update documents to SDK 3.0 Beta interface. -* https://issues.couchbase.com/browse/NCBC-2472[NCBC-2472]: -Ensure connection string supports options table defined in RFC. -* https://issues.couchbase.com/browse/NCBC-2298[NCBC-2298]: -CancellationToken and CancellationTokenSource management needed. -* https://issues.couchbase.com/browse/NCBC-2557[NCBC-2557]: -Improve cancellation and timeouts. -* https://issues.couchbase.com/browse/NCBC-2573[NCBC-2573]: -Add support for CreateAsDeleted. -* https://issues.couchbase.com/browse/NCBC-2576[NCBC-2576]: -Geopolygon search support. -* https://issues.couchbase.com/browse/NCBC-2577[NCBC-2577]: -Add Options To Use FTS Hints (Flex Index). - - -=== Version 3.0.5 (1 September 2020) - -Version 3.0.5 is the sixth release of the 3.0 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.5.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.5[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.5[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2504[NCBC-2504]: -Intermittent ViewQuery failures after rebound Rb2OutEpt-HYBRID -* https://issues.couchbase.com/browse/NCBC-2559[NCBC-2559]: -Test_BootStrap_Error_Propagates_To_View_Operations fails w/BucketNotFoundException -* https://issues.couchbase.com/browse/NCBC-2561[NCBC-2561]: -CreateAndDropIndex and Test_QueryManager conflict -* https://issues.couchbase.com/browse/NCBC-2625[NCBC-2625]: -Ensure new NodeAdapter is assigned to ClusterNode on change -* https://issues.couchbase.com/browse/NCBC-2634[NCBC-2634]: -Expiry returned with entire document when ContentAs invoked -* https://issues.couchbase.com/browse/NCBC-2405[NCBC-2405]: -SDK3 DOC on User Auth options -* https://issues.couchbase.com/browse/NCBC-2541[NCBC-2541]: -WaitUntilReady() doc code sample -* https://issues.couchbase.com/browse/NCBC-2603[NCBC-2603]: -Missing snippets & sections in Managing Connections doc -* https://issues.couchbase.com/browse/NCBC-2623[NCBC-2623]: -Implement Threshold Logging features of RTO -* https://issues.couchbase.com/browse/NCBC-2636[NCBC-2636]: -Test max limitations of collections and scopes -* https://issues.couchbase.com/browse/NCBC-2637[NCBC-2637]: -Split Couchbase.IntegrationTests into seperate projects for Management and main API -* https://issues.couchbase.com/browse/NCBC-2427[NCBC-2427]: -Verify that out-of-order K/V request/responses are supported -* https://issues.couchbase.com/browse/NCBC-2584[NCBC-2584]: -Add N1QL Support for Collections -* https://issues.couchbase.com/browse/NCBC-2630[NCBC-2630]: -Enhance User Management for Collections/RBAC - - -=== Version 3.0.4 (5 August 2020) - -Version 3.0.4 is the fifth release of the 3.0 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.4.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.4[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.4[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2187[NCBC-2187]: -CollectionManager -- 400: Not allowed on this version of cluster. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2605[NCBC-2605]: -Expiration less than 1000ms creates a doc with an infinite lifespan -* https://issues.couchbase.com/browse/NCBC-2608[NCBC-2608]: -Connection fails if first node in connection string array is unavailable. -* https://issues.couchbase.com/browse/NCBC-2620[NCBC-2620]: -Expiry not being set by MutateIn -* https://issues.couchbase.com/browse/NCBC-2621[NCBC-2621]: -Ensure the CName field is set per operation -* https://issues.couchbase.com/browse/NCBC-2601[NCBC-2601]: -SUBDOC_XATTR_INVALID_FLAG_COMBO when mixing MutationMacro and XAttr - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2441[NCBC-2441]: -Implement tracing using OpenTelemetry for FTS -* https://issues.couchbase.com/browse/NCBC-2442[NCBC-2442]: -Implement tracing using OpenTelemetry for KV -* https://issues.couchbase.com/browse/NCBC-2443[NCBC-2443]: -Implement tracing using OpenTelemetry for Analytics -* https://issues.couchbase.com/browse/NCBC-2444[NCBC-2444]: -Implement tracing using OpenTelemetry for Views -* https://issues.couchbase.com/browse/NCBC-2579[NCBC-2579]: -Implement tracing of spans for all services towards Response Time Observability for SDK 3.0 -* https://issues.couchbase.com/browse/NCBC-2583[NCBC-2583]: -Add support for looking up certificates via Cert Store -* https://issues.couchbase.com/browse/NCBC-2602[NCBC-2602]: -Add Support for MutateIn.SetDocument -* https://issues.couchbase.com/browse/NCBC-2609[NCBC-2609]: -Add PublicKey to AssemblyInfo for DI when building release packages -* https://issues.couchbase.com/browse/NCBC-2617[NCBC-2617]: -When signing make friend assemblies use public key - - -=== Version 3.0.3 (14 July 2020) - -Version 3.0.3 is the fourth release of the 3.0 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.3.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.3[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.3[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2187[NCBC-2187]: -CollectionManager -- 400: Not allowed on this version of cluster. - -==== Fixed Issues - -* https://issues.couchbase.com/browse/NCBC-2588[NCBC-2588]: -LookupIn should re-order subdoc requests so that XATTRs come first. -* https://issues.couchbase.com/browse/NCBC-2450[NCBC-2450]: -KV failure after removing entry point node for pre-MH server -* https://issues.couchbase.com/browse/NCBC-2501[NCBC-2501]: -latency detected in FoEptRb-SubDoc after rebound never recovers -* https://issues.couchbase.com/browse/NCBC-2502[NCBC-2502]: -latency detected in FoEptEject-SUBDOC after rebound never recovers -* https://issues.couchbase.com/browse/NCBC-2503[NCBC-2503]: -Latency detected for FoRbAnalytics-CBAS after rebound never recovers -* https://issues.couchbase.com/browse/NCBC-2545[NCBC-2545]: -Hello World example in the docs repo doesn't build. -* https://issues.couchbase.com/browse/NCBC-2553[NCBC-2553]: -Remove authzid from Sasl Negotiation -* https://issues.couchbase.com/browse/NCBC-2563[NCBC-2563]: -StreamingQueryResult fails to populate errors on InternalServerError -* https://issues.couchbase.com/browse/NCBC-2587[NCBC-2587]: -LookupInSpecBuilder allows only a single XATTR per request. -* https://issues.couchbase.com/browse/NCBC-2592[NCBC-2592]: -Fix custom circuit breaker not being injected -* https://issues.couchbase.com/browse/NCBC-1836[NCBC-1836]: -CAS samples - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2542[NCBC-2542]: -OpenTelemetry tracing extension -* https://issues.couchbase.com/browse/NCBC-2593[NCBC-2593]: -Update install and start docs to reflect .NET Standard/Core support -* https://issues.couchbase.com/browse/NCBC-2594[NCBC-2594]: -Update version number on release notes -* https://issues.couchbase.com/browse/NCBC-2595[NCBC-2595]: -Indent code on error handling page so that it is readable. -* https://issues.couchbase.com/browse/NCBC-2227[NCBC-2227]: -Author Managing Connections documentation -* https://issues.couchbase.com/browse/NCBC-2170[NCBC-2170]: -Implement tracing using OpenTelemetry for Query -* https://issues.couchbase.com/browse/NCBC-2519[NCBC-2519]: -Review docs for update items, identify/file issues -* https://issues.couchbase.com/browse/NCBC-2598[NCBC-2598]: -Misc SDK improvements for Transactions -* https://issues.couchbase.com/browse/NCBC-2591[NCBC-2591]: -Allow registration of custom services - - -=== Version 3.0.2 (20 June 2020) - -Version 3.0.2 is the third release of the 3.0 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.2.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.2[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.2[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2187[NCBC-2187]: -CollectionManager -- 400: Not allowed on this version of cluster. - -==== Fixed Issues -* https://issues.couchbase.com/browse/NCBC-2436[NCBC-2436]: -User connstr example in migration guide -* https://issues.couchbase.com/browse/NCBC-2459[NCBC-2459]: -Remove QueryOptions from StartUsing.cs in docs -* https://issues.couchbase.com/browse/NCBC-2487[NCBC-2487]: -NRE when bootstrapping - BucketConfigExtensions.ReplacePlaceholderWithBootstrapHost -* https://issues.couchbase.com/browse/NCBC-2506[NCBC-2506]: -Connection attempt failed / timeout exception with Cloud and .NET SDK 3.0.1 -* https://issues.couchbase.com/browse/NCBC-2508[NCBC-2508]: -Alternate Addresses are not handled correctly in sdk3 -* https://issues.couchbase.com/browse/NCBC-2512[NCBC-2512]: -Additional debug logging and improvements -* https://issues.couchbase.com/browse/NCBC-2525[NCBC-2525]: -Connection pool does not scale up to minimum connections after a temporary network failure. -* https://issues.couchbase.com/browse/NCBC-2526[NCBC-2526]: -requests wait forever while cluster is unreachable -* https://issues.couchbase.com/browse/NCBC-2537[NCBC-2537]: -Orphaned nodes when bootstrapping with a Memcached and a Couchbase bucket -* https://issues.couchbase.com/browse/NCBC-2538[NCBC-2538]: -Analytics failures after failover/rebalance of the ept node -* https://issues.couchbase.com/browse/NCBC-2540[NCBC-2540]: -Enumerating query results from SELECT RAW queries throws an exception -* https://issues.couchbase.com/browse/NCBC-2546[NCBC-2546]: -Retry all exceptions with the IRetriable marker interface -* https://issues.couchbase.com/browse/NCBC-2548[NCBC-2548]: -Ensure all operations attempt retrys when NMVB status is returned by server -* https://issues.couchbase.com/browse/NCBC-2549[NCBC-2549]: -Subdoc failures after restarting CB server -* https://issues.couchbase.com/browse/NCBC-2552[NCBC-2552]: -Intermittent cluster connection failures with CB Server <6.5 -* https://issues.couchbase.com/browse/NCBC-2555[NCBC-2555]: -Memcached and SSL results in "The handshake failed due to an unexpected packet format." -* https://issues.couchbase.com/browse/NCBC-2556[NCBC-2556]: -Capture thrown exception and log the error when bootstrapping -* https://issues.couchbase.com/browse/NCBC-2558[NCBC-2558]: -Couchbase.Extensions.DependencyInjection Failing On .NET Core 3.1 - -==== New Features and Behavioral Changes. -* https://issues.couchbase.com/browse/NCBC-2202[NCBC-2202]: -Integration tests need to configure tests to run based on server version -* https://issues.couchbase.com/browse/NCBC-2237[NCBC-2237]: -PLAIN must not be enabled by default on non-tls connections -* https://issues.couchbase.com/browse/NCBC-2404[NCBC-2404]: -ConnectAsync throws ArgumentNullException when cluster cannot be reached -* https://issues.couchbase.com/browse/NCBC-2530[NCBC-2530]: -Provide navigation properties to get from ICouchbaseCollection back to ICluster -* https://issues.couchbase.com/browse/NCBC-2533[NCBC-2533]: -Provide access to ITypeSerializer on ICluster for Linq2Couchbase -* https://issues.couchbase.com/browse/NCBC-2544[NCBC-2544]: -Add additional DEBUG logging info and ContextIds -* https://issues.couchbase.com/browse/NCBC-2463[NCBC-2463]: -Document documentation .NET -* https://issues.couchbase.com/browse/NCBC-2469[NCBC-2469]: -Make nightly Jenkins builds work -* https://issues.couchbase.com/browse/NCBC-2495[NCBC-2495]: -Update NuGet API Key in deployment pipeline on Jenkins -* https://issues.couchbase.com/browse/NCBC-2509[NCBC-2509]: -CreateAndConnectAsync ONLY creates CouchbaseBuckets (not MemCache or Ephemeral) -* https://issues.couchbase.com/browse/NCBC-2517[NCBC-2517]: -DependencyInjection project refactoring -* https://issues.couchbase.com/browse/NCBC-2523[NCBC-2523]: -Port ClusterVersion from sdk2 to sdk3 -* https://issues.couchbase.com/browse/NCBC-2527[NCBC-2527]: -Update DnsClient to 1.3.2 -* https://issues.couchbase.com/browse/NCBC-2529[NCBC-2529]: -CB Cloud: non-KV nodes fail when used for bootstraping -* https://issues.couchbase.com/browse/NCBC-2534[NCBC-2534]: -.NET Collections Functional Testing -* https://issues.couchbase.com/browse/NCBC-2539[NCBC-2539]: -Port UnixMillisecondsConverter from sdk2 to sdk3 -* https://issues.couchbase.com/browse/NCBC-2482[NCBC-2482]: -Couchbase.IntegrationTests.Services.Search.SearchIndexManagerTests.TestSearchManager -* https://issues.couchbase.com/browse/NCBC-2483[NCBC-2483]: -Couchbase.IntegrationTests.UserManagerTests.Test_UserManager -* https://issues.couchbase.com/browse/NCBC-2484[NCBC-2484]: -Couchbase.IntegrationTests.BucketManagerTests.Test_BucketManager -* https://issues.couchbase.com/browse/NCBC-2485[NCBC-2485]: -Couchbase.IntegrationTests.Diagnostics.PingReportTests.Can_Get_PingReport_With_ReportId -* https://issues.couchbase.com/browse/NCBC-2486[NCBC-2486]: -Couchbase.IntegrationTests.CollectionManagerTests.Test_CollectionManager -* https://issues.couchbase.com/browse/NCBC-2489[NCBC-2489]: -Couchbase.IntegrationTests.ClusterTests.Test_Open_More_Than_One_Bucket -* https://issues.couchbase.com/browse/NCBC-2490[NCBC-2490]: -Couchbase.ServiceNotAvailableException : Service views not available. -* https://issues.couchbase.com/browse/NCBC-2518[NCBC-2518]: -HttpStreamingConfigListener should continue running after all streams break. -* https://issues.couchbase.com/browse/NCBC-2524[NCBC-2524]: -Couchbase.IntegrationTests.ClusterTests.Test_WaitUntilReadyAsync -* https://issues.couchbase.com/browse/NCBC-2531[NCBC-2531]: -Implement OpenTelemetry Stub in CouchbaseNetClient -* https://issues.couchbase.com/browse/NCBC-2532[NCBC-2532]: -Remove existing OpenTracing dependency - - -=== Version 3.0.1 (13 May 2020) - -Version 3.0.1 is the second release of the 3.0 series, bringing enhancements and bugfixes over the last stable release. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.1.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.1[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.1[Nuget] - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2187[NCBC-2187]: -CollectionManager -- 400: Not allowed on this version of cluster. - -==== Fixed Issues -* https://issues.couchbase.com/browse/NCBC-2033[NCBC-2033]: -3.0 API Query snippets in concept doc -* https://issues.couchbase.com/browse/NCBC-2204[NCBC-2204]: -Improve exception when bootstrapping fails -* https://issues.couchbase.com/browse/NCBC-2301[NCBC-2301]: -3.0 Logging / Collecting Info page -* https://issues.couchbase.com/browse/NCBC-2303[NCBC-2303]: -Client Settings page for SDK 3.0 -* https://issues.couchbase.com/browse/NCBC-2388[NCBC-2388]: -Ensure that prepared statements that are previously created are not retried -* https://issues.couchbase.com/browse/NCBC-2435[NCBC-2435]: -Connstr not taking username properly -* https://issues.couchbase.com/browse/NCBC-2439[NCBC-2439]: -improve formatting on exception context -* https://issues.couchbase.com/browse/NCBC-2451[NCBC-2451]: -QueryPreparedStatementFailure in situational tests with MH -* https://issues.couchbase.com/browse/NCBC-2454[NCBC-2454]: -EndPoint may be null during SendAsync -* https://issues.couchbase.com/browse/NCBC-2456[NCBC-2456]: -Transient NodeNotAvailableException rebalance under kv load -* https://issues.couchbase.com/browse/NCBC-2458[NCBC-2458]: -QueryAsync(String statement) does not exist -* https://issues.couchbase.com/browse/NCBC-2460[NCBC-2460]: -.NET Core App 3.x targets require consumers add reference to Microsoft.Bcl.AsyncInterfaces -* https://issues.couchbase.com/browse/NCBC-2462[NCBC-2462]: -ConnectAsync is failing "Cannot resolve DNS for localhost" -* https://issues.couchbase.com/browse/NCBC-2466[NCBC-2466]: -Ensure TaskCancelationExceptions are rethrown -* https://issues.couchbase.com/browse/NCBC-2467[NCBC-2467]: -CLONE - Ensure TaskCancelationExceptions are rethrown -* https://issues.couchbase.com/browse/NCBC-2468[NCBC-2468]: -System.ArgumentException: ReadResult does not contain valid MutationToken -* https://issues.couchbase.com/browse/NCBC-2473[NCBC-2473]: -Incorrect Verbiage for NuGet Package -* https://issues.couchbase.com/browse/NCBC-2475[NCBC-2475]: -GetNodes() sometimes returns no results, incorrectly. -* https://issues.couchbase.com/browse/NCBC-2479[NCBC-2479]: -Point config.json for combination tests back at localhost -* https://issues.couchbase.com/browse/NCBC-2480[NCBC-2480]: -SocketException: Cannot bind to address in SslConnectionTests -* https://issues.couchbase.com/browse/NCBC-2481[NCBC-2481]: -KV operations don't respect IgnoreCertificateNameMismatch -* https://issues.couchbase.com/browse/NCBC-2488[NCBC-2488]: -Couchbase.IntegrationTests.BootstrapFailedTests.Test_BootStrap_Error_Propagates_To_View_Operations [FAIL] -* https://issues.couchbase.com/browse/NCBC-2493[NCBC-2493]: -Improve error logging and handling for Query -* https://issues.couchbase.com/browse/NCBC-2497[NCBC-2497]: -SetKeepAlive fails on Windows - -==== New Features and Behavioral Changes. - -* https://issues.couchbase.com/browse/NCBC-2304[NCBC-2304]: -Managing Connections - SDK3 -* https://issues.couchbase.com/browse/NCBC-2464[NCBC-2464]: -Build/deploy the .NET Dependency Injection extension for SDK 3.0 -* https://issues.couchbase.com/browse/NCBC-2478[NCBC-2478]: -Cluster.ConnectAsync throws PlatformNotSupportedException -* https://issues.couchbase.com/browse/NCBC-2492[NCBC-2492]: -Log warning when TCPKeepAlive cannot be enabled -* https://issues.couchbase.com/browse/NCBC-2494[NCBC-2494]: -Fix TCPKeepAlive to work on non Windows Platform - - -=== Version 3.0.0 (31 March 2020) - -This is the first GA release of the third generation .NET SDK. - -https://packages.couchbase.com/clients/net/3.0/Couchbase-Net-Client-3.0.0.zip[Download] | -https://docs.couchbase.com/sdk-api/couchbase-net-client-3.0.0[API Reference] | -https://www.nuget.org/packages/CouchbaseNetClient/3.0.0[Nuget] - -This is the first GA release of the third generation .NET SDK. - -This release features significant changes to the API, simplifies the programming model, adds support for newer Durability Requirements and enables simple extension for features coming in future Couchbase Server releases. -See the xref:project-docs:migrating-sdk-code-to-3.n.adoc[Migration Guide] for help with migrating from .NET SDK 2.x. - - -==== Known Issues - -* https://issues.couchbase.com/browse/NCBC-3171[NCBC-3171]: Documents may be written to the wrong location in a mixed-mode cluster set-up. -See the <> for more details. -* https://issues.couchbase.com/browse/NCBC-2187[NCBC-2187]: -CollectionManager -- 400: Not allowed on this version of cluster. - -==== Fixed Issues -* https://issues.couchbase.com/browse/NCBC-2149[NCBC-2149]: -ConfigConext throws NullReferenceException when processing new cluster maps -* https://issues.couchbase.com/browse/NCBC-2153[NCBC-2153]: -Fix failing integration tests for SDK3 -* https://issues.couchbase.com/browse/NCBC-2166[NCBC-2166]: -Authentication Errors after adding nodes to cluster -* https://issues.couchbase.com/browse/NCBC-2168[NCBC-2168]: -QueryException does not provide textual details coming from the server -* https://issues.couchbase.com/browse/NCBC-2199[NCBC-2199]: -Missing string interpolation sign in CouchbaseBucket -* https://issues.couchbase.com/browse/NCBC-2213[NCBC-2213]: -N1QL situational test failure - Rb1SwapQuery -* https://issues.couchbase.com/browse/NCBC-2214[NCBC-2214]: -N1QL situational test failure - SvcRestartQuery -* https://issues.couchbase.com/browse/NCBC-2217[NCBC-2217]: -Deserialization issues with GetAsync -* https://issues.couchbase.com/browse/NCBC-2219[NCBC-2219]: -Cluster instantiation using ClusterOptions ignores WithServers servers -* https://issues.couchbase.com/browse/NCBC-2222[NCBC-2222]: -AuthenticationFailure thrown when accessing bucket while combination testing -* https://issues.couchbase.com/browse/NCBC-2230[NCBC-2230]: -QueryException missing XxxxContext -* https://issues.couchbase.com/browse/NCBC-2241[NCBC-2241]: -Defer bootstrapping errors on buckets to first operation -* https://issues.couchbase.com/browse/NCBC-2266[NCBC-2266]: -UserManager#AvailableRolesAsync must be called getRoles -* https://issues.couchbase.com/browse/NCBC-2268[NCBC-2268]: -CollectionManager does not align with RFC -* https://issues.couchbase.com/browse/NCBC-2273[NCBC-2273]: -Incorrect ScopeMissingException -* https://issues.couchbase.com/browse/NCBC-2274[NCBC-2274]: -Can't connect to two buckets from one cluster object -* https://issues.couchbase.com/browse/NCBC-2277[NCBC-2277]: -SearchOptions does not map query parameters -* https://issues.couchbase.com/browse/NCBC-2282[NCBC-2282]: -fix test and implementation of positional params -* https://issues.couchbase.com/browse/NCBC-2286[NCBC-2286]: -Make all options have no "With" prefix -* https://issues.couchbase.com/browse/NCBC-2288[NCBC-2288]: -MutateIn ContentAs() functionality missing -* https://issues.couchbase.com/browse/NCBC-2290[NCBC-2290]: - Add Timeout to all options classes in BucketManager -* https://issues.couchbase.com/browse/NCBC-2306[NCBC-2306]: -Match RFC requirement for Rows property for query services -* https://issues.couchbase.com/browse/NCBC-2307[NCBC-2307]: -Cannot query using any type other than dynamic -* https://issues.couchbase.com/browse/NCBC-2308[NCBC-2308]: -N1QL query situational failure -* https://issues.couchbase.com/browse/NCBC-2309[NCBC-2309]: -Hybrid/view query errors with situational testing -* https://issues.couchbase.com/browse/NCBC-2316[NCBC-2316]: -Ensure view request get default timeout if not supplied -* https://issues.couchbase.com/browse/NCBC-2324[NCBC-2324]: -Random KeyNotFoundException in LogManagerTests.Test_LogLevel_Debug -* https://issues.couchbase.com/browse/NCBC-2350[NCBC-2350]: -SearchOptions.Raw is unused, and throws an NRE -* https://issues.couchbase.com/browse/NCBC-2351[NCBC-2351]: -View timeout is not applied to view query string -* https://issues.couchbase.com/browse/NCBC-2352[NCBC-2352]: -Cleanup Service Exceptions Hiding Context -* https://issues.couchbase.com/browse/NCBC-2353[NCBC-2353]: -Cleanup .NET SDK 3 Build Warnings -* https://issues.couchbase.com/browse/NCBC-2354[NCBC-2354]: -Most Integration Tests Failing -* https://issues.couchbase.com/browse/NCBC-2365[NCBC-2365]: -Ensure Exists checks if deleted is true then exists returns false -* https://issues.couchbase.com/browse/NCBC-2366[NCBC-2366]: -AnalyticsManager does not exist -* https://issues.couchbase.com/browse/NCBC-2367[NCBC-2367]: -Methods in ClusterNode have unused "connections" parameter -* https://issues.couchbase.com/browse/NCBC-2369[NCBC-2369]: -Ping diagnostics are not accurately reporting ping times -* https://issues.couchbase.com/browse/NCBC-2372[NCBC-2372]: -NRE thrown while initializing cluster -* https://issues.couchbase.com/browse/NCBC-2384[NCBC-2384]: -SSL connections cannot find node for K/V operations -* https://issues.couchbase.com/browse/NCBC-2389[NCBC-2389]: -ClusterNode must be associated with a bucket once a bucket has been opened -* https://issues.couchbase.com/browse/NCBC-2397[NCBC-2397]: -OPS pulses between zero and the expected performance -* https://issues.couchbase.com/browse/NCBC-2402[NCBC-2402]: -Add ConfigureAwait(false) to all asynchronous code -* https://issues.couchbase.com/browse/NCBC-2407[NCBC-2407]: -Couchbase.ServiceNotAvailableException: Service n1ql not available -* https://issues.couchbase.com/browse/NCBC-2416[NCBC-2416]: -ViewQuery failure/hanging -* https://issues.couchbase.com/browse/NCBC-2421[NCBC-2421]: -Remove default to NotBounded in FTS -* https://issues.couchbase.com/browse/NCBC-2422[NCBC-2422]: -Error replacing dead connections on N1QL Failover rebalance -* https://issues.couchbase.com/browse/NCBC-2426[NCBC-2426]: -Service Restart failure - replacing dead connections failure -* https://issues.couchbase.com/browse/NCBC-2429[NCBC-2429]: -Should be MaxHttpConnections instead of MaxHttpConnection -* https://issues.couchbase.com/browse/NCBC-2446[NCBC-2446]: -Ensure bootstrapping continues after BucketNotConnected on pre-6.5 servers -* https://issues.couchbase.com/browse/NCBC-2448[NCBC-2448]: -unpublish concurrent document mutations -* https://issues.couchbase.com/browse/NCBC-2183[NCBC-2183]: -Exists must use "getMeta" (0xa0) instead of Observe -* https://issues.couchbase.com/browse/NCBC-2410[NCBC-2410]: -LookupInResult has NotImplementedException for some methods -* https://issues.couchbase.com/browse/NCBC-2412[NCBC-2412]: -Cluster.AnaytlicsIndexes throws NotImplementedException -* https://issues.couchbase.com/browse/NCBC-2414[NCBC-2414]: -Connection terminated when packet exceeds NetworkStream buffer size -* https://issues.couchbase.com/browse/NCBC-2415[NCBC-2415]: -error CS0649: Field 'SubDocSingularBase.CurrentSpec' is null -* https://issues.couchbase.com/browse/NCBC-2430[NCBC-2430]: -HttpMaxConnections renaming breaks DI unit tests -* https://issues.couchbase.com/browse/NCBC-2431[NCBC-2431]: -Failed DNS resolution throws NullReferenceException -* https://issues.couchbase.com/browse/NCBC-2433[NCBC-2433]: -Fix failing tests involving MaxHttpConnection -* https://issues.couchbase.com/browse/NCBC-2305[NCBC-2305]: -RequestId, ClientContextId, and Signature Lost After N1QL Query Enumeration -* https://issues.couchbase.com/browse/NCBC-2358[NCBC-2358]: -Timeout is not written to the packet when using Durability - -==== New Features and Behavioral Changes. -* https://issues.couchbase.com/browse/NCBC-2315[NCBC-2315]: -Improve logging for each service request -* https://issues.couchbase.com/browse/NCBC-2325[NCBC-2325]: -Add SCRAM-SHA Sasl Authentication -* https://issues.couchbase.com/browse/NCBC-1863[NCBC-1863]: -Add Flushing or Deleting a Collection logic -* https://issues.couchbase.com/browse/NCBC-1870[NCBC-1870]: -Support Log Redaction -* https://issues.couchbase.com/browse/NCBC-1915[NCBC-1915]: -Add new consistency API to SDK 3.0 -* https://issues.couchbase.com/browse/NCBC-2151[NCBC-2151]: -Migrating from SDK 2 to 3.0 -* https://issues.couchbase.com/browse/NCBC-2169[NCBC-2169]: -Migrating from SDK 2 to 3.0 -* https://issues.couchbase.com/browse/NCBC-2209[NCBC-2209]: - Add Converters/Transcoders per RFC -* https://issues.couchbase.com/browse/NCBC-2220[NCBC-2220]: -Ensure ClusterOptions properties are integrated into SDK -* https://issues.couchbase.com/browse/NCBC-2234[NCBC-2234]: -Mark all ErrorContexts as Uncomitted -* https://issues.couchbase.com/browse/NCBC-2302[NCBC-2302]: -Getting Started Tidy Up -* https://issues.couchbase.com/browse/NCBC-2413[NCBC-2413]: -Add XxxErrorContext information to K/V -* https://issues.couchbase.com/browse/NCBC-2417[NCBC-2417]: -Remove all Singular Sub-Document classes -* https://issues.couchbase.com/browse/NCBC-1799[NCBC-1799]: -Analytics client needs to support streaming results -* https://issues.couchbase.com/browse/NCBC-1989[NCBC-1989]: -Add connection pooling -* https://issues.couchbase.com/browse/NCBC-2244[NCBC-2244]: -WaitUntilReady not available at the cluster and bucket levels -* https://issues.couchbase.com/browse/NCBC-2245[NCBC-2245]: -Cluster-level ping missing -* https://issues.couchbase.com/browse/NCBC-2260[NCBC-2260]: -Tighten OperationSpec for lookupIn and mutateIn -* https://issues.couchbase.com/browse/NCBC-2293[NCBC-2293]: -Remove deprecated ErrorAttribute enum -* https://issues.couchbase.com/browse/NCBC-2297[NCBC-2297]: -Decrease API surface surrounding K/V operations/connections -* https://issues.couchbase.com/browse/NCBC-2299[NCBC-2299]: -Implement non-streaming fallback for N1QL queries -* https://issues.couchbase.com/browse/NCBC-2300[NCBC-2300]: -Support custom stream deserializers for view queries -* https://issues.couchbase.com/browse/NCBC-2310[NCBC-2310]: -Make IQueryResult implementations internal -* https://issues.couchbase.com/browse/NCBC-2312[NCBC-2312]: -Make IServiceResult.RetryReason read only -* https://issues.couchbase.com/browse/NCBC-2313[NCBC-2313]: -Align StreamAlreadyReadException with other Couchbase exceptions -* https://issues.couchbase.com/browse/NCBC-2314[NCBC-2314]: -Implement non-streaming fallback for view queries -* https://issues.couchbase.com/browse/NCBC-2318[NCBC-2318]: -Refactor view queries to be strongly typed -* https://issues.couchbase.com/browse/NCBC-2319[NCBC-2319]: -Implement non-streaming fallback for analytics queries -* https://issues.couchbase.com/browse/NCBC-2320[NCBC-2320]: -Cleanup K/V classes in root namespace -* https://issues.couchbase.com/browse/NCBC-2322[NCBC-2322]: -Enable symbol packages and SourceLink for debugging -* https://issues.couchbase.com/browse/NCBC-2323[NCBC-2323]: -Enable C# 8 nullable ref types for buckets/scopes/collections -* https://issues.couchbase.com/browse/NCBC-2327[NCBC-2327]: -Create Lightweight DI system for Couchbase SDK -* https://issues.couchbase.com/browse/NCBC-2328[NCBC-2328]: -Update Cluster and Bucket to use DI for Logging -* https://issues.couchbase.com/browse/NCBC-2329[NCBC-2329]: -Update RetryOrchestrator to use DI for logging -* https://issues.couchbase.com/browse/NCBC-2330[NCBC-2330]: -Make transaction/serializer/mapper configurable via DI -* https://issues.couchbase.com/browse/NCBC-2331[NCBC-2331]: -Use DI for Scope and Collection logging -* https://issues.couchbase.com/browse/NCBC-2332[NCBC-2332]: -Remove default constructor added to BucketBase (CS8618 warning) -* https://issues.couchbase.com/browse/NCBC-2334[NCBC-2334]: -All integration tests fail, cannot bootstrap -* https://issues.couchbase.com/browse/NCBC-2336[NCBC-2336]: -Use DI for CouchbaseHttpClient -* https://issues.couchbase.com/browse/NCBC-2337[NCBC-2337]: -Remove ClusterContext requirement from service clients -* https://issues.couchbase.com/browse/NCBC-2338[NCBC-2338]: -Use DI for service clients and their loggers -* https://issues.couchbase.com/browse/NCBC-2340[NCBC-2340]: -Use DI for logging in configuration handlers -* https://issues.couchbase.com/browse/NCBC-2341[NCBC-2341]: -Use DI for OrphanedResponseLogger logging -* https://issues.couchbase.com/browse/NCBC-2343[NCBC-2343]: -Use DI for logging in data structures -* https://issues.couchbase.com/browse/NCBC-2344[NCBC-2344]: -Use DI for logging in managers -* https://issues.couchbase.com/browse/NCBC-2345[NCBC-2345]: -Use DI for logging in DNS resolver -* https://issues.couchbase.com/browse/NCBC-2346[NCBC-2346]: -Use DI for logging in GetResult -* https://issues.couchbase.com/browse/NCBC-2347[NCBC-2347]: -Use DI for logging in QueryUriTesters -* https://issues.couchbase.com/browse/NCBC-2348[NCBC-2348]: -Use DI for VBucket and ErrorMap logging -* https://issues.couchbase.com/browse/NCBC-2349[NCBC-2349]: -Enable Nullable Ref Types in ClusterOptions -* https://issues.couchbase.com/browse/NCBC-2355[NCBC-2355]: -Support deserialization of ClusterOptions from configuration -* https://issues.couchbase.com/browse/NCBC-2356[NCBC-2356]: -Move content services directory to root in Couchbase.UnitTests -* https://issues.couchbase.com/browse/NCBC-2357[NCBC-2357]: -Enable nullable ref types for XxxOptions classes -* https://issues.couchbase.com/browse/NCBC-2359[NCBC-2359]: -Use DNS resolver for IP address resolution -* https://issues.couchbase.com/browse/NCBC-2360[NCBC-2360]: -Use DNS resolver in Ketama key mapper and ClusterContext -* https://issues.couchbase.com/browse/NCBC-2362[NCBC-2362]: -Make ConfigChanged handling async -* https://issues.couchbase.com/browse/NCBC-2363[NCBC-2363]: -Use DNS resolver for VBucketServerMap.IPEndPoints -* https://issues.couchbase.com/browse/NCBC-2364[NCBC-2364]: -Enable null reference types for K/V specs/results -* https://issues.couchbase.com/browse/NCBC-2368[NCBC-2368]: -Remove Servers From ClusterOptions -* https://issues.couchbase.com/browse/NCBC-2370[NCBC-2370]: -Support custom port numbers in ConnectionString -* https://issues.couchbase.com/browse/NCBC-2371[NCBC-2371]: -Make BucketConfig and other config serialization classes internal -* https://issues.couchbase.com/browse/NCBC-2373[NCBC-2373]: -Implement abstraction layer for connection pool implementations -* https://issues.couchbase.com/browse/NCBC-2374[NCBC-2374]: -Replace TKey with string parameter in persistent collections -* https://issues.couchbase.com/browse/NCBC-2376[NCBC-2376]: -Cleanup BootstrapUri on ClusterNode -* https://issues.couchbase.com/browse/NCBC-2377[NCBC-2377]: -Implement auto scaling on connection pools -* https://issues.couchbase.com/browse/NCBC-2378[NCBC-2378]: -Add log redaction to DataFlowConnectionPool -* https://issues.couchbase.com/browse/NCBC-2379[NCBC-2379]: -Respect couchbases scheme for DNS SRV lookup -* https://issues.couchbase.com/browse/NCBC-2380[NCBC-2380]: -ClusterOptions MgmtPort and EnableTls cleanup -* https://issues.couchbase.com/browse/NCBC-2381[NCBC-2381]: -Cleanup IConnection interface -* https://issues.couchbase.com/browse/NCBC-2382[NCBC-2382]: -Support multiplexing on SslConnection -* https://issues.couchbase.com/browse/NCBC-2383[NCBC-2383]: -NodeAdapter is null on non-bootstrap nodes -* https://issues.couchbase.com/browse/NCBC-2387[NCBC-2387]: -Reduce heap allocations related to K/V operation response handling -* https://issues.couchbase.com/browse/NCBC-2391[NCBC-2391]: -Include XML documentation in NuGet package -* https://issues.couchbase.com/browse/NCBC-2392[NCBC-2392]: -Reduce heap allocations around MultiplexingConnection async state -* https://issues.couchbase.com/browse/NCBC-2393[NCBC-2393]: -Align QueryScanConsistency with the RFC -* https://issues.couchbase.com/browse/NCBC-2398[NCBC-2398]: -Change ICollection interface to ICouchbaseCollection interface -* https://issues.couchbase.com/browse/NCBC-2399[NCBC-2399]: -Add bootstrap service -* https://issues.couchbase.com/browse/NCBC-2408[NCBC-2408]: -Add BucketContext or equivalent for cohesion and less coupling -* https://issues.couchbase.com/browse/NCBC-2409[NCBC-2409]: -Route nodes into service specific CouchbaseNodeCollections -* https://issues.couchbase.com/browse/NCBC-2425[NCBC-2425]: -Reduce heap allocations calling BucketAsync - - -=== Pre-releases - -Numerous _Alpha_ and _Beta_ releases were made in the run-up to the 3.0 release, and although unsupported, the release notes and download links are retained for archive purposes xref:3.0-pre-release-notes.adoc[here]. -// https://docs-archive.couchbase.com/dotnet-sdk/3.0/project-docs/3.0-pre-release-notes.html -// Full link once 3.0 goes to archive - -== Older Releases - -Although https://www.couchbase.com/support-policy/enterprise-software[no longer supported], documentation for older releases continues to be available in our https://docs-archive.couchbase.com/home/index.html[docs archive]. -// end::all[] +include::3.5@dotnet-sdk:project-docs:page$sdk-release-notes.adoc[tag=all] From ca2dbe4ef6447e2fbc67b74b8aa5e6fa9ab7eb3d Mon Sep 17 00:00:00 2001 From: Richard Smedley Date: Thu, 18 Apr 2024 10:03:46 +0100 Subject: [PATCH 29/29] Removed unnecessary nav-title attribute --- modules/project-docs/pages/sdk-release-notes.adoc | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/project-docs/pages/sdk-release-notes.adoc b/modules/project-docs/pages/sdk-release-notes.adoc index 07bec78c..17111a1a 100644 --- a/modules/project-docs/pages/sdk-release-notes.adoc +++ b/modules/project-docs/pages/sdk-release-notes.adoc @@ -1,6 +1,5 @@ = Couchbase .NET SDK Release Notes and Archives :description: Release notes and download archive for the Couchbase .NET Client. -:navtitle: Release Notes :page-topic-type: project-doc :page-aliases: relnotes-dotnet-sdk :page-toclevels: 2