Release notes

Release notes

Release notes for Couchbase .NET SDK version 2.0, the official SDK for creating applications using Couchbase Server with Microsoft .NET languages.

These Release Notes cover the following releases:

Version 2.0.3 (10 March 2015)

Version 2.0.3 is a bug fix and maintenance release to version 2.0.2 of the .NET. SDK.

In this release

  • Async/Await methods have been added to the BucketManager and ClusterManager classes.
  • The ClusterHelper now correctly uses the password within the ClientConfiguration .
  • The operation lifespan is now configurable. The default is 15000 milliseconds.

Missing features

The most notable missing feature is async/await for memcached operations, which has been rescheduled for 2.1.0. This is in development and was not ready for testing.

Known issues

  • NCBC-783 : During rebalance scenarios, latency as high as ~3 seconds might be encountered if the workflow is hybrid (views and key-value). This was discovered in testing and will be resolved in a subsequent release.
  • On Windows 2012, in certain situations the client might experience port exhaustion and related performance issues. If this happens, you will receive errors in your log similar to this: System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted . There is a workaround at https://msdn.microsoft.com/en-us/library/aa560610(v=bts.20).aspx .

List of select JIRA tickets in this release

Bugs:

  • [ NCBC-802 ] - ConnectionTimeout should be SendTimeout in Configuration .
  • [ NCBC-818 ] - If ClientConfiguration contains password, ClusterHelper must honor it.
  • [ NCBC-824 ] - Authentication exception when opening memcached bucket with password from ClientConfiguration .

Improvements:

  • [ NCBC-801 ] - Add asynchronous versions of all methods to BucketManager and ClusterManager .
  • [ NCBC-811 ] - Make operation lifespan configurable.
  • [ NCBC-816 ] - Make .NET Prepared statement API similar to Java SDK.

Version 2.0.2 (10 February 2015)

Version 2.0.2 is a bug fix and stabilization release of the Couchbase .NET SDK 2.0. Notably, it contains support for N1QL DP4.

In this release

  • Support for N1QL DP4. Note that DP3 and DP4 are incompatible releases from an API perspective.
  • Changes to View API: Key is now dynamic.
  • Logging: the SDK has been updated from Common.Logging 2.0 to 3.0.
  • ClusterHelper now has two new methods for managing buckets: GetBucket() and GetBucket(name, pass) .
  • ICluster has a new method for determining if a bucket reference is open: IsOpen(bucketName) .
  • Socket connection timeout is now configurable via ClientConfiguration.ConnectTimeout . This is the time the client will allow for a connection to op before timing out.
  • Many bug fixes and minor improvements.

Missing features

The most notable missing feature is async/await, which has been rescheduled for 2.1.0.

Known issues

  • NCBC-783 : During rebalance scenarios, latency as high as ~3 seconds might be encountered if the workflow is hybrid (views and key-value). This was discovered in testing and will be resolved in a subsequent release.
  • On Windows 2012, in certain situations the client might experience port exhaustion and related performance issues. If this happens, you will receive errors in your log similar to this: System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted . There is a workaround at There is a workaround at https://msdn.microsoft.com/en-us/library/aa560610(v=bts.20).aspx .

List of select JIRA tickets in this release

Technical tasks:

  • [ NCBC-757 ] - Create separate branch for N1QL DP4
  • [ NCBC-758 ] - Refactor QueryClient to support N1QL DP4 REST API
  • [ NCBC-759 ] - Create N1QlQuery to support N1QL DP4 REST API
  • [ NCBC-767 ] - Add support for Prepared Statements

Bugs:

  • [ NCBC-754 ] - Test ClusterControllerTests.ShouldLoadConfigInfoFromHttpProvider is failing and does not following naming conventions
  • [ NCBC-778 ] - When stored with 1.3.X legacy flags, byte arrays are improperly converted to JSON in 2.0
  • [ NCBC-785 ] - Get and GetDocument performance is slow when reading large documents or values ~50kb
  • [ NCBC-791 ] - Get<T>(list) throws ArgumentException when keys are empty
  • [ NCBC-792 ] - Make BucketManager:GetDesignDocuments(bool) obsolete
  • [ NCBC-793 ] - Make configuration thread for HttpStreamingProvider a background thread
  • [ NCBC-794 ] - Client cannot send documents larger than the buffer_size*max_size
  • [ NCBC-797 ] - Client throws Newtonsoft.Json.JsonSerializationException on Mono during bootstrapping
  • [ NCBC-799 ] - ServerUnavailableException at Couchbase.CouchbaseBucket.CreateQuery after failover a node
  • [ NCBC-800 ] - Fix Query parameters encoding and test
  • [ NCBC-804 ] - remove the "coming soon" sections of the documentation
  • [ NCBC-806 ] - SvcRestart test: Client configuration is not updating even when warmup completed on nodes
  • [ NCBC-807 ] - ops/sec drop to 0 during rebalance on 2.5 CB
  • [ NCBC-810 ] - Ensure NodeAdapter list uses order of ServersList for VBucket mapping

Improvements:

  • [ NCBC-738 ] - unnecessary boxing added in NCBC-722
  • [ NCBC-749 ] - Update Common.Logging to version 3.0 & Log4Net to 1.2.13.0
  • [ NCBC-774 ] - Ensure .NET SDK CAS behavior is consistent with Java SDK 2.0
  • [ NCBC-784 ] - ensure ClusterInfo is always reachable by retrieving it via ClusterManager

Tasks:

  • [ NCBC-619 ] - Make Socket connection timeout configurable
  • [ NCBC-657 ] - Provide documentation in readme.md for running unit tests
  • [ NCBC-786 ] - Add GetBucket(bucketName) and GetBucket(bucketName, password) to ClusterHelper
  • [ NCBC-787 ] - Logging Documentation References Deprecated Common.Logging.Log4Net NuGet Package
  • [ NCBC-788 ] - Fix "Common.Logging.LogManager.GetCurrentClassLogger()' is obsolete" compiler warning
  • [ NCBC-789 ] - Add IsOpen(bucketName) to ICluster
  • [ NCBC-795 ] - Error in bulk operations sample code

Version 2.0.1 (12 January 2015)

Version 2.0.1 is a bug fix and stabilization release of the Couchbase .NET SDK 2.0. This release includes all new developer documentation, API reference, NuGet packages, and binaries.

In this release

This release is largely a bug fix and stabilization follow-up to 2.0.0 GA. Notably, it contains improvements targeting the performance of the transport/IO layer, as well as several important bug fixes. We recommend that all version 2.0.0 GA users upgrade to this version. Added features include:

  • A refactored IO/transport layer that uses the more modern SocketAsyncEventArgs for asynchronous I/O
  • Support for removing keys in bulk, similar to bulk methods for adding and getting a set of items
  • Many bug fixes and stability improvements

Missing features

The major features that did not make it into 2.0.1, but will be included in a future minor release, is support for asynchronous operations using the async and await keywords with the Task-based Asynchronous Pattern (TAP) . This work is in progress.

Other missing features include:

  • Pluggable JSON parser support to allow you to use the JSON serializer and deserializer of your choice
  • Per connection TCP heartbeat settings
A list of planned bug and features for 2.0.2 can be found here .

Known issues

  • NCBC-783 : During rebalance scenarios, latency as high as ~3 seconds might be encountered if the workflow is hybrid (views and key-value). This was discovered in testing and will be resolved in a subsequent release.
  • On Windows 2012, in certain situations the client might experience port exhaustion and related performance issues. If this happens, you will receive errors in your log similar to this: System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted . There is a workaround at There is a workaround at https://msdn.microsoft.com/en-us/library/aa560610(v=bts.20).aspx .

List of select JIRA tickets in this release

Bugs:

  • [ NCBC-694 ] - When custom ports are used, CCCP still uses the default 11210
  • [ NCBC-701 ] - sometimes the operations per second drop to ~1 operation per second
  • [ NCBC-733 ] - JSON serialization settings are not consistently picked up.
  • [ NCBC-734 ] - Unable to authenticate when doing failover and clients never seem to recover
  • [ NCBC-748 ] - When App.Config is used for configuration, the pool configuration is overwritten
  • [ NCBC-750 ] - If the first URI in the bootstrap list fails, we fall back to HTconfig instead of trying CCCP with the other URIs in the list.
  • [ NCBC-753 ] - The test TimeSpanExtensionTests. When_Given_Big_TimeSpan_Should_Convert_To_Timestamp is failing
  • [ NCBC-755 ] - Update SslConnection to use byte[] Send(byte[] buffer) overload
  • [ NCBC-762 ] - Newtonsoft.Json.JsonSerializationException : Cannot deserialize the current JSON object
  • [ NCBC-766 ] - unable to load data with system tests against Sherlock builds
  • [ NCBC-775 ] - System.Net.Sockets.Socket.ReceiveAsync(SocketAsyncEventArgs e) at Couchbase.IO.Connection.Receive during rebalance
  • [ NCBC-776 ] - at the beginning of rebalance/failover SocketException: An established connection was aborted by the software in your host machine at Couchbase.IO.Connection.Receive
  • [ NCBC-779 ] - system tests terminated with an exception: System.InvalidOperationException: An asynchronous socket operation is already in progress using this SocketAsyncEventArgs instance
  • [ NCBC-780 ] - Remove AutoCompactionSettings and FastWarmupSettings from IBucketConfig

Improvements:

  • [ NCBC-625 ] - Views do not work with dynamic type or strings on Mono
  • [ NCBC-717 ] - Provide TimeSpan overloads for IBucket methods that take expiration values
  • [ NCBC-735 ] - ClientConfiguration : ensure SSL use is overridden only if set true at global level

Tasks:

  • [ NCBC-480 ] - Implement CouchbaseCluster.Info
  • [ NCBC-540 ] - Ensure TTL on operations follows documented rules
  • [ NCBC-651 ] - Create Tests to ensure 1.X and 2.X work together in the same app domain
  • [ NCBC-728 ] - Typo in Hello Couchbase example
  • [ NCBC-736 ] - Add Support for bulk operations: Remove
  • [ NCBC-739 ] - Add PascalCasePropertyNamesContractResolver for serialization and deserialization
  • [ NCBC-740 ] - Update IO to use SocketAsyncEventArgs and pinned Buffers
  • [ NCBC-741 ] - The release notes should have the full version number.
  • [ NCBC-747 ] - The XML for logging is incorrect
  • [ NCBC-782 ] - During failover, the client cannot authenticate

The complete list of commits can be found here .

Version 2.0.0 GA (4 December 2014)

Version 2.0 GA is the general availability release of the .NET Couchbase 2.0 SDK. This release includes all new developer documentation, API reference, NuGet packages, and binaries.

In this release

This release, which builds on the previous beta and developer preview releases, contains many bug fixes and stability improvements. Features added include:

  • Replica reads: support for the client to read from one or more replicas. In certain situations, for instance when a node is down, this allows for inconsistent reads when acceptable.
  • Support for GetL , Unlock , and GetWithLock
  • Overloads for prepend and append methods that accept byte arrays
  • Improvements to the View API that make serializing to and from POCOs easier
  • Many bug fixes and stability improvements

Missing features

The major missing functionality that did not make it into GA, but will be included in a future minor release, is support for asynchronous operations using the async and await keywords with the Task-based Asynchronous Pattern (TAP) . This work is in progress.

Other missing features include:

  • Plugable JSON parser support to allow you to use the JSON serializer/deserializer of your choice
  • Per connection TCP heartbeat settings

Known issues

  • On Windows 2012, in certain situations the client might experience port exhaustion and related performance issues. If this happens, you will receive errors in your log similar to this: System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted . There is a workaround that you can find here .

List of select JIRA tickets in this release

  • NCBC-730 : Ensure that argument out of range (AOOR) exceptions are not thrown when Observe fails
  • NCBC-729 : Ensure bulk methods use thread-safe dictionaries
  • NCBC-717 : Add expiration as TimeSpan overloads
  • NCBC-728 : Rename IOperationResult.Value to IOperationResult.Content
  • NCBC-727 : Make a constructor that takes CouchbaseClientSection public
  • NCBC-719 : Ensure operations use FMap if available
  • NCBC-725 : Make the ICluster interface public so that it can be mocked
  • NCBC-726 : Ensure ViewDataMapper uses configured serializer settings
  • NCBC-722 : Add support for mapping view results to POCOs
  • NCBC-724 : Version numbers and configuration logging
  • NCBC-723 : Timings: public interface level, server level, I/O level
  • NCBC-721 : Ensure Increment wraps when it overflows
  • NCBC-493 : Implement replica read capability
  • NCBC-711 : Add support for GetL , Unlock , and provide GetWithLock an implementation on IBucket
  • NCBC-714 : JSON and URI encode view input parameters
  • NCBC-700 : Add overload for prepend and append methods that accepts byte arrays
  • NCBC-693 : ODE in ConnectionPool.Dispose when run against cluster_run
  • NCBC-713 : Ensure that multiple buckets can be added to a configuration
  • NCBC-716 : IBucket.Replace overload has wrong type for CAS
  • NCBC-715 : Hdd.UsedByData overflows when input is greater than int.maxsize

Version 2.0 Beta 2

Version 2.0 Beta 2 is the second beta release of the .NET Couchbase 2.0 SDK, the official SDK for creating applications using Couchbase Server with Microsoft .NET languages. This release includes all new developer documentation, API reference, NuGet packages, and binaries.

In this release

This release builds upon the previous beta release and includes the following features:

  • Bulk methods for getting or inserting a set of keys, key-values, or documents
  • Asynchronous view support using the familiar async/await programming model
  • Experimental support for asynchronous N1QL queries using async/await
  • Support for common data-types so that the various SDK's can use the same JSON documents and key-values across different platforms
  • An all-new Management API for programmatically managing Couchbase clusters, buckets and views

Missing features

While we always strive to get as many features as possible into a given release, there are always a few that don't make it. If you're looking forward to any of the following features, don't worry; they will eventually make their way into a future release.

  • Asynchronous memcached operations using async or await
  • Replica reads: the ability to read from a non-master node
  • Plugable JSON parser support: the ability to use the JSON serializer/deserializer of your choice
  • Per connection TCP heartbeat settings

Known issues

  • For those using SSL, note that a vulnerability has been found in Ssl3 . It's advised that the ServicePointManager.SecurityProtocol be set to Security.Protocol.Tls within the hosting app domain. This will ensure that the client is not using Ssl3.

List of select JIRA tickets in this release

  • NCBC-696 Use default settings for SecurityProtocol
  • NCBC-676 Make JsonSerializerSettings externally configurable
  • NCBC-684 Rename Couchbase.dll to Couchbase.NetClient.dll
  • NCBC-697 Ensure ConfigObservers collection is not null
  • NCBC-692 Increase field sizes to avoid overflow errors
  • NCBC-699 Upsert should take IDictionary input parameter
  • NCBC-698 Add BucketType property to IBucket
  • NCBC-689 : Disable ServicePointManager.Expect100Continue by setting to false
  • NCBC-685 : provide a means of exiting the IConnectionPool.Acquire method
  • NCBC-675 : Fixed servers with a FQDN are not properly resolving.
  • NCBC-683 : When a node goes on/offline ensure that the cluster map is up to date
  • NCBC-644 : ops/sec is not restored to the expected value - part 2
  • NCBC-682 : Make mutual exclusion locks RWSLs were applicable
  • NCBC-673 : MEMD_ENOENT errors after failover nodes
  • NCBC-674 : missing test files and renaming
  • NCBC-667 : Throw an argument out of range (AOOR) exception at VBucket.LocatePrimary - part 3
  • NCBC-668 : 'HOST' causes parsing error on memcached buckets - part 2
  • NCBC-667 : ensure VBucket.LocatePrimary() does not throw AOOR
  • NCBC-668 : '$HOST' causes parsing error on memcached buckets
  • NCBC-669 : Client incorrectly assumes 1024 vBuckets
  • NCBC-534 : Provide async/await methods for ad hoc N1QL queries
  • NCBC-533 : Provide async/await methods for Views
  • NCBC-665 : Significant regression in memcached ops
  • NCBC-664 : HOST placeholder causes a UriFormatException in UpddateBootstrapList method
  • NCBC-663 : Authentication error when making View request to bucket with SASL Auth
  • NCBC-662 : Ensure Config is decoded as an object
  • NCBC-659 : Make KetamaKeyMapper and VBucketKeyMapper Dispose HashAlgorithm after every
  • NCBC-640 : Rename CouchbaseCluster to Cluster
  • NCBC-658 : Fix bug where /pools is not added to bootstrap URLs when configuration is app.config
  • NCBC-653 : Add SendWithRetryMethod to MemcachedBucket
  • NCBC-626 : Set defaults on ViewResult to avoid NRE
  • NCBC-594 : Provide support for Management API
  • NCBC-652 : Add support for bulk operations: Get and Upsert
  • NCBC-608 : Implement Common Flags
  • NCBC-641 : Update version and other assembly metadata
  • NCBC-639 : ThrowOperationCanceledException in SendWithRetry[T](ViewQuery query)
  • NCBC-590 : Refactor logging so that ODE are not raised when it references a disposed object
  • NCBC-624 : Refactor View API

Version 2.0 Beta

Version 2.0 Beta is the first beta release of the .NET Couchbase 2.0 SDK, the official SDK for creating applications using Couchbase Server with Microsoft .NET languages. This release includes all new developer documentation, API reference, NuGet packages, and binaries.

In this release

  • This release introduces a new document-centric API for working with JSON documents in Couchbase. The purpose of this API is to make it easier to perform CRUD operations on JSON documents and to provide a consistent programming interface for JSON documents across all of the Couchbase SDKs: Java, Node, Ruby, PHP and others.
  • A completely rewritten .NET driver for connecting to and developing highly scalable NoSql applications using the .NET framework and Couchbase Server with minimal 3rd party dependencies.
  • A new and improved, fluent View API for querying views in Couchbase. Views are a means of creating secondary and composite indexes, reductions, and filters over a set of keys by using MapReduce functions written in JavaScript.
  • Support for encrypting data sent between client applications using the SDK and Couchbase server. This is done through Secure Socket Layer (SSL) on all TCP and HTTP connections if the SSL is enabled on the client and the proper certificate is imported on the application servers.
  • A new connection pool that while configurable, uses a much smaller number of connections than its predecessor.
  • Experimental support for executing ad hoc N1QL queries against Couchbase buckets. N1QL is the new SQL-like language for querying JSON documents within Couchbase.

Known issues

  • While the SDK has gone through rigorous situational and feature testing, it hasn't yet achieved a passing score for all tests. There are a couple of outstanding issues that have yet to be addressed, specifically NCBC-551 and NCBC-561 . These issues and the passing of the complete suite of situational and feature tests will be completed prior to GA.
  • Being prerelease, there is a strong probability that public interfaces of some of the APIs might change significantly before GA.
  • A number of features available in 1.3.x have not yet been implemented in 2.0, for example: bulk methods and the management APIs. These will be available for GA or in a post-GA release.
  • Other features that are missing include replica reads and common flags (common types across all SDKs). These will also be released either at GA or in a subsequent release.