On This Page

Version 2.3.0 - 2.6.0

Couchbase Java SDK Release Notes and Archives

Installation

Important: At least Java 6 is required, all newer Java versions are supported (and encouraged). Especially Java 8 is recommended since it brings performance enhancements and lambda expressions which are very convenient when used in an asynchronous context.

All stable releases of the Java SDK are primarily distributed through Maven. As a result the dependency can be included easily using your favourite package manager. For Maven itself, the current GA release's coordinates are:

<dependencies>
  <dependency>
    <groupId>com.couchbase.client</groupId>
    <artifactId>java-client</artifactId>
    <version>2.6.0</version>
  </dependency>
</dependencies>

The java-client dependency will pull in two more transitive dependencies. One is called com.couchbase.client.core-io and is a internal dependency which performs all the underlying tasks like IO and cluster management. The other dependency is RxJava which is both used internally and exposed as a first-class API to the user in order to perform scalable and performant asynchronous, reactive operations.

Version 2.6.0 (5 July 2018)

Version 2.6.0 is the first release of the 2.6 series, bringing new features, enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.6.0
  • com.couchbase.client:core-io:1.6.0
  • io.reactivex:rxjava:1.3.7
  • io.opentracing:opentracing-api:0.31.0

Enhancements & New Features

  • JCBC-1159, JCBC-1160: A new feature called "per operation tracing" has been introduced in pre-releases and is now a stable and supported feature. Please see the corresponding documentation and blog posts for more information and usage.

    To provide a flexible and extensible implementation we are now also depending on the opentracing-api dependency for this. This allows you to plug in your own tracer (like jaegertracing or commerical products) as well.
  • JCBC-1169, JCBC-1170: Support for Field-Level Encryption has been added to the SDK. This only works in combination with a separate library which can be found on maven central as well but can only be used with a Couchbase EE subscription. Please see the corresponding documentation and blog posts for more information and usage.
  • JVMCBC-490: Support for transparent client side compression has been added to the SDK. The Environment provides certain tunables to customize the default settings (compressionMinSize and compressionMinRatio). If the server also supports this feature (5.5 and newer), the SDK will automatically negotiate and use it. Please see the corresponding documentation and blog posts for more information and usage.
  • JCBC-1203, JVMCBC-537: Support for client certificate authentication has been expanded from pure KV only to all supported services. A new "CertAuthenticator" has been introduced and it needs to be explicitly enabled on the Environment via the "certAuthEnabled" configuration option. Please see the corresponding documentation and blog posts for more information and usage.
  • JVMCBC-542: Initial support for multi network configurations has been added. This allows the SDK to work in environments like Kubernetes and similar where internal addresses might be exposed via a different hostname or port combination. Note that there is a known issue outlined below with the current implementation which prevents you from exposing many nodes via the same hostname.
  • JVMCBC-500: Internal and external dependencies have been bumped to their newest versions.
  • JVMCBC-555:  The analytics service can now also customize its IO pool if needed like the other services do.
  • JVMCBC-554: The analytics service can now also be customized through the AnalyticsServiceConfig on the environment.
  • JVMCBC-528: More information during the SASL auth steps is now provided to aid debugging.
  • JVMCBC-529: When using PersistTo/ReplicateTo overloads, the original CAS used in the mutation is now returned with the exception.
  • JVMCBC-552: Internal RingBuffer diagnostics have been improved so now more information during the BackpressureException is provided to figure out what has filled up the buffer in the first place to aid debugging.
  • JVMCBC-530: Java 9 support has been added by providing Automatic-Module-Name information to core-io and java-client.
  • JVMCBC-531: Read bytes are discarded early in the N1QL streaming parser, leading to less memory consumption on large responses.
  • JCBC-1158: The repository abstraction now allows annotations in parent classes.
  • JCBC-1179: A new "profile" option has been added to N1qlParams.

Fixed Issues

  • JVMCBC-510: Unknown bucket capabilities returned from the server config are now ignored, providing better forwards compatibility with newer server versions.
  • JVMCBC-523: When the SDK bootstraps against "good" and "bad" nodes, the bad ones are now properly cleaned up as soon as a good config can be found. This reduces noise in the logs.
  • JVMCBC-548: The original seed node list to bootstrap is now properly shuffled which allows for better distribution during bootstrap and less contention on specific nodes when many app servers are bootstrapped at the same time.
  • JVMCBC-535: The SDK now properly validates the last step in the SASL bootstrap sequence.
  • JVMCBC-513: A NullPointerException on a bad host in the connection string during bootstrap is now fixed.
  • JVMCBC-551: When loading a terse bucket config via HTTP (as a fallback from the KV approach) a bug has been fixed that confuses the bucket name with the username and as a result can't properly load a config.
  • JCBC-1209: A handful codepaths have been audited to make sure subscribers are properly registered so timed out operations are cleaned up as early as possible once they are unsubscribed.
  • JCBC-1213: In a Search query the descending order now properly uses the "desc" token on the wire (instead of previously "descending" which the search engine did not understand and ignored).
  • JCBC-1184: The JavaDoc of the BucketManager#getDesignDocument method has been clarified that an exception is raised if the document is not found and not null returned for the blocking call (or an empty Observable in the async case).
  • JCBC-1175: An incorrect response mapping of the queue remove (via subdoc remove) has been fixed.
  • JCBC-1194: When using the ClusterManager without opening a bucket, the code now properly round-robins through the bootstrap list so if one of the nodes is down there is a chance that the operation can succeed.
  • JCBC-1207: A bug has been fixed where the SDK performed reverse DNS lookups during DNS SRV bootstrapping which should not happen.

Known Issues

  • JVMCBC-556: A new feature known as "multi network configuration" has been added, but for now only nodes with individual hostnames are supported. Support for nodes that all listen on the same physical hostname but on different ports will be added in a future release.
  • JCBC-1223: A regression has been found in 2.6.0 which will be addressed in 2.6.1: When API from the AsyncBucket is used that also uses durability requirements but not an explicit timeout, the operation will always time out immediately without a chance to complete. So affected is for example the following call: bucket.async().upsert(doc, PersistTo.MASTER); a proper workaround for now is including an explict timeout like so: bucket.async.upsert(doc, PersistTo.MASTER, 2, TimeUnit.SECONDS);

Changes

  • JVMCBC-482: Force IPv4 property to false by default. This can be reversed with the same system property as before, but is now forced to false since Couchbase Server supports IPv6 and only comes into play anyways if the JVM is forced to IPv6 but the server does not support it. If you have relied on this behavior before and cannot upgrade the server, please modify the system property "com.couchbase.forceIPv4" to "true".

Version 2.5.9 (7 June 2018)

Version 2.5.9 is the tenth release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.9
  • com.couchbase.client:core-io:1.5.9
  • io.reactivex:rxjava:1.3.4

Fixed Issues

  • JVMCBC-534: Fix pooledService creating excessive endpoints on sending to downed node
  • JVMCBC-543: Clean up stale connections when query node goes offline, otherwise the connections may stick around until OS TCP timeout
  • JCBC-1207: Dont do reverse lookup on DNS SRV bootstrap

Enhancements & New Features

  • JCBC-1158: Add support for annotations in parent classes
  • JVMCBC-545: Improve debug logging on Endpoint
  • JCBC-1209: Audit and add explicit subscribers to non-kv requests to check for timeouts

Version 2.5.8 (1 May 2018)

Version 2.5.8 is the ninth release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.8
  • com.couchbase.client:core-io:1.5.8
  • io.reactivex:rxjava:1.3.4

Fixed Issues

  • JCBC-1194: Enable service on nodes in the bootstrap list in round robin for cluster manager use without opening bucket.
  • JVMCBC-523: Properly clean up services on failed connect
  • JVMCBC-531: Discard read bytes in the parser on chunked response to reduce high memory consumption

Enhancements & New Features

  • JVMCBC-529: Expose original mutation cas on observe exceptions.

Version 2.6.0-beta (13 April 2018)

Version 2.6.0 is the beta release of the 2.6 series, bringing new features, enhancements and bugfixes over the last stable release.

Note that this is a beta release for upcoming functionality and should not be used in a production deployment.

Download | API Reference | Core API Reference 

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.6.0-beta
  • com.couchbase.client:core-io:1.6.0-beta
  • io.reactivex:rxjava:1.3.5

It can be loaded from our prerelease maven repository:

<dependencies>
    <dependency>
        <groupId>com.couchbase.client</groupId>
        <artifactId>java-client</artifactId>
        <version>2.6.0-beta</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>cb-pre</id>
        <name>Couchbase Prerelease Repo</name>
        <url>http://files.couchbase.com/maven2</url>
    </repository>
</repositories>

Enhancements & New Features

  • Support for end-to-end traceability has been added, which includes out of the box support for threshold-based trace information of requests and their timings as well as experimental support for OpenTracing compatible tracers.
  • Support for field-level-encryption which allows cross-SDK encrypting and decrypting of fields in JSON document bodies. The encryption extension is maintained on a separate repository.
  • Support for transparent end-to-end compression through snappy if the server supports it.

Please see blog posts and additional documentation / announcements around those features.

Version 2.5.7 (4 April 2018)

Version 2.5.7 is the eighth release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.7
  • com.couchbase.client:core-io:1.5.7
  • io.reactivex:rxjava:1.3.4

Fixed Issues

  • JVMCBC-513: A NullPointerException has been fixed on a bad host string as part of the connection string.
  • JCBC-1175: A bug in the subdocument queuePop API has been fixed which doesn't "swallow" concurrent access but rather returns a CAS mismatch as intended.

Enhancements & New Features

  • JCBC-1179: Volatile support for N1QL profile query param has been added which allows to get more profiling information at query time. The API is intended to be marked as comitted in the coming minor release cycle.

Version 2.5.6 (6 March 2018)

Version 2.5.6 is the seventh release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.6
  • com.couchbase.client:core-io:1.5.6
  • io.reactivex:rxjava:1.3.4

Fixed Issues

  • JVMCBC-510: Unknown bucket capabilities coming from a server config are now handled more gracefully, making sure unknown capabilites do not break the client parsing the server sent bucket config.

Enhancements & New Features

  • JVMCBC-492, JVMCBC-493: When the SDK connects to the server (Key/Value) it now negotiates its identification string via JSON, providing better capabilities to associate interactions with the server logs (if the server supports it, it can now parse and uniquely identify a client instance and us it in its logging).
  • JVMCBC-504: Snappy compression is available (if the server supports it), but disabled by default. This is mainly available for internal testing, if you want to use it in production please move to the 2.6.x branch or later which extended its internal support (Couchbase Server 5.5 and later).
  • JVMCBC-480: Infrastructure for redacted logging has been added, but only "user" information will be wrapped in redaction tags. Please consult the server documentation for additional tools which will then perform the actual redaction for both client and server data (Couchbase Server 5.5 and later).
  • JVMCBC-512: It is now possible to configure the number of allowed CouchbaseEnvironments based on a static config setting. Note that this should only be tuned under very specific settings and is considered advanced API.

Version 2.6.0-dp1 (27 February 2018)

Version 2.6.0 is the first developer preview release of the 2.6 series, bringing new features, enhancements and bugfixes over the last stable release.

Note that this is a developer preview for upcoming functionality and should not be used in a production deployment.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.6.0-dp1
  • com.couchbase.client:core-io:1.6.0-dp1
  • io.reactivex:rxjava:1.3.5

It can be loaded from our prerelease maven repository:

<dependencies>
    <dependency>
        <groupId>com.couchbase.client</groupId>
        <artifactId>java-client</artifactId>
        <version>2.6.0-dp1</version>
    </dependency>
</dependencies>

<repositories>
    <repository>
        <id>cb-pre</id>
        <name>Couchbase Prerelease Repo</name>
        <url>http://files.couchbase.com/maven2</url>
    </repository>
</repositories>

Enhancements & New Features

  • Support for end-to-end traceability has been added, which includes out of the box support for threshold-based trace information of requests and their timings as well as experimental support for OpenTracing compatible tracers.
  • Support for field-level-encryption which allows cross-SDK encrypting and decrypting of fields in JSON document bodies.
  • Support for transparent end-to-end compression through snappy if the server supports it.

Please see blog posts and additional documentation / announcements around those features.

Version 2.5.5 (6 February 2018)

Version 2.5.5 is the sixth release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.5
  • com.couchbase.client:core-io:1.5.5
  • io.reactivex:rxjava:1.3.4

Fixed Issues

  • JVMCBC-487: A regression was fixed which prevent the netty epoll native transport from being properly repackaged. It is now possible to use the native transport optionally again.

Enhancements & New Features

  • JCBC-1147: Added support for the Health Check "ping" command at the bucket level. This command allows to proactively send requests to all enabled services and get insight into their current status.
  • JVMCBC-490: Added uncomitted support for "end-to-end" compression based on snappy. Note that this preliminary support is meant for early adopters and might change in future releases.
  • JVMCBC-480: Added infrastructure and uncomitted support for log redaction. Note that this preliminary support is meant for early adopters and might change in future releases.
  • JCBC-1163: A small enhancement was added which logs the raw value if a N1QL response row couldn't be decoded. This allows for easier troubleshooting.
  • JVMCBC-486: During reconnect attempts, not every stack trace is logged anymore which makes the logs less noisy and easier to parse.
  • JVMCBC-489: Http-based service pools now start their queries at random offsets, meaning that different nodes are getting hit on the first request, allowing for a more even query distribution especially with long running queries i.e. N1QL or analytics.

Version 2.5.4 (9 January 2018)

Version 2.5.4 is the fifth release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.4
  • com.couchbase.client:core-io:1.5.4
  • io.reactivex:rxjava:1.3.3

Fixed Issues

  • JVMCBC-485: A minor issue has been fixed which did allow to go the service pool size below the configured minimum when cleaning up idle services. This has no impact on the workload but shows misleading node disconnect logs, so the logic has been changed to prevent that.

Enhancements & New Features

  • JVMCBC-475, JVMCBC-476: Support for IPv6 has been added throughout the stack, but it still disabled by default to minimize the risk of being backwards incompatible. It will be enabled with 2.6.0 by default. If you want to enable it right now, set the "com.couchbase.forceIPv4" system property to "false".
  • JCBC-1147: The HealthCheck API has been brought up to speed with the current SDK-RFC. As a result, the API has been renamed to "diagnostics" on the cluster level. Note that this API has been and still is experimental, so there might be more (smalller) changes coming before its finally stabilized. 

Version 2.5.3 (5 December 2017)

Version 2.5.3 is the fourth release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.3
  • com.couchbase.client:core-io:1.5.3
  • io.reactivex:rxjava:1.3.3

Fixed Issues

  • JVMCBC-474: The internal and repackaged netty dependency has been bumped to 4.0.53.Final which contains fixes around Java 6 & 7 compatibility.
  • JCBC-1152: When the server returns the LOCKED error code via key/value, it is now properly translated on getAndLock into a TemporaryLockFailureException in addition to TMPFAIL. This is important on servers > 5.0.

Enhancements & New Features

  • JVMCBC-477: A new libcouchbase & .NET compatible memcached bucket (ketama) hashing strategy has been added, called StandardMemcachedHashingStrategy. It will become the default in the next major SDK version.
  • JVMCBC-473: A new configuration option "forceSaslPlain" has been added which falls back to PLAIN key/value authentication. This is needed if a user should be used for authentication which is to be authenticated through LDAP. If secrecy is needed, we recommend using our TLS  encrypted connection feature on top.
  • JVMCBC-481: When a new config arrives, it is now quickly checked if the internal revision number is greater and only then a full blown internal config is created. While not user visible, it can help reduce the possibility of unncessary repeated hostname lookups, which in combination with slow or unreliable DNS setups can block computation threads and lead to occasional timeouts.

Version 2.5.2 (8 November 2017)

Version 2.5.2 is the third release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.2
  • com.couchbase.client:core-io:1.5.2
  • io.reactivex:rxjava:1.3.3

Fixed Issues

  • JVMCBC-471: A bug in the "healthcheck" API has been fixed which when called in the middle of nodes connecting the underlying channel would be null leading to NullPointerExceptions. This is now handled more gracefully.
  • JCBC-1144: The RetryBuilder had a bug which would not emit the underlying exception into the downstream Observable if it got emitted in the exactly last retry iteration. This has been fixed.

Enhancements & New Features

  • JVMCBC-470: It is now possible to configure the lower bound of the config poll interval via the configPollFloorInterval Environment property.
  • JVMCBC-468: The TrustStore for SSL can now be configured separately from the KeyStore, which gives you better control if both are maintained in separate files.
  • JCBC-1140: Thanks to a community contribution the allocation overhead for JsonDocument content (JsonObject, JsonArray) is reduced by roughly 10% but your mileage may vary depending on the size of the content.
  • JCBC-1141: A new document type: ByteArrayDocument has been introduced (but not as a committed API yet) which gives you the same benefits of a BinaryDocument, but comes without the burden of manual ByteBuffer management and reference counting.
  • JCBC-1142: in an effort to make the APIs between SDKs consistent, the subdocument method "createParents" has been renamed to "createPath", but in a backwards compatible way with deprecated methods. Please migrate to the new API since it will be deleted in the next major release.

Version 2.5.1 (3 October 2017)

Version 2.5.1 is the second release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.1
  • com.couchbase.client:core-io:1.5.1
  • io.reactivex:rxjava:1.3.0

Fixed Issues

  • JCBC-1129: The Subdocument API has been modified slightly so that it correctly aligns with the SDK-RFC for this feature. No methods have been removed, but the `createDocument` builder API is now `upsertDocument` and the old one has been deprecated.
  • JCBC-1137: Previous releases added CouchbaseMock as a dependency, but it should actually just be a test dependency.
  • JCBC-1131: One openBucket overload didn't actually respect the custom transcoders passed in. This is now fixed and all bucket open methods properly respect custom transcoders.
  • JVMCBC-466: When continuousKeepAlive is enabled, closed sockets would still try to run the keepalive, which could lead to reconnect attempts of nodes that are not needed anymore and "runaway" sockets.
  • JVMCBC-465, JVMCBC-467: Some changes have been made to the reconnection logic so there are no concurrent reconnect attempts. This fixes a problem where upgrading from < 5.0 Server releases to > 5.0 Server releases wasn't possible without restarting the application server.

Version 2.5.0 (6 September 2017)

Version 2.5.0 is the first release of the 2.5 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.5.0
  • com.couchbase.client:core-io:1.5.0
  • io.reactivex:rxjava:1.3.0

Enhancements & New Features

  • JCBC-1071: Add basic KV error map testing with mock
  • JCBC-1082: Implement subdoc GET_COUNT
  • JCBC-1100: Counter API doc should inform that expiry is only honoured on creation
  • JCBC-1106: Expose more N1QL Query Options
  • JCBC-1110: Add ReplicaGet Helper Class
  • JCBC-1115: Enfore Xattr ordering on builder
  • JCBC-1117: Document example of using CoreSendHook for logging request/response/timeout and hostname
  • JCBC-1125: Add basic support for healthCheck API
  • JCBC-1126: Promote experimental APIs where appropriate
  • JCBC-1069: Adding union, intersect & except to DSL
  • JCBC-1070: Getter for object attributes added to DSL
  • JVMCBC-438: Set config poll interval to 2.5s by default
  • JVMCBC-431: Add support for InsertDoc and AccessDeleted in subdoc document flags
  • JVMCBC-460 :Discover FTS SSL through config
  • JVMCBC-441: Allow to hook in before the RingBuffer
  • JVMCBC-442: Store dispatched hostname in CouchbaseRequest
  • JVMCBC-443: Remove Deprecated DCP from Core-IO
  • JVMCBC-444: Enforce config poll floor at 50ms
  • JVMCBC-451: Implement subdoc GET_COUNT
  • JVMCBC-456: Harden and Optimize YASJL Parser
  • JVMCBC-457: Make the new parser default for query parsing
  • JVMCBC-458: Discover and bootstrap analytics service from cluster config
  • JVMCBC-461: Add basic support for healthCheck API
  • JVMCBC-462: Promote experimental APIs where appropriate
  • JVMCBC-449: Exponential Retry Delay, please check arguments

Fixed Issues

  • JCBC-1111: Handle LOCKED in the conversions
  • JVMCBC-445: ArrayOutOfBoundException in PooledService#sendFlush (concurrent access on list)
  • JVMCBC-448: Sporadic Unhandled Select Bucket status 1
  • JVMCBC-435: Issue with number of java client connections increasing rapidly after fail over on single node in cluster
  • JCBC-1086: Explicitly handle auth error for observe with xerror

Known Issues

  • JCBC-1129: Subdocument document options has createDocument flag for creating documents if the document does not exist. This flag naming does not conform to the specifications where it is named as upsertDocument. This will be fixed in upcoming release 2.5.1.

Version 2.4.8 (18 October 2017)

Version 2.4.8 is the ninth release of the 2.4 series, bringing important bugfixes over the last stable release, especially when used with Couchbase Server 5.0 and later.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.8
  • com.couchbase.client:core-io:1.4.8
  • io.reactivex:rxjava:1.2.7

Fixed Issues

  • JVMCBC-466: When continuousKeepAlive is enabled, closed sockets would still try to run the keepalive, which could lead to reconnect attempts of nodes that are not needed anymore and "runaway" sockets.
  • JVMCBC-465, JVMCBC-467: Some changes have been made to the reconnection logic so there are no concurrent reconnect attempts. This fixes a problem where upgrading from < 5.0 Server releases to > 5.0 Server releases wasn't possible without restarting the application server.
  • JVMCBC-460 :Discover FTS SSL through config
  • JVMCBC-445: ArrayOutOfBoundException in PooledService#sendFlush (concurrent access on list)
  • JVMCBC-448: Sporadic Unhandled Select Bucket status 1
  • JVMCBC-435: Issue with number of java client connections increasing rapidly after fail over on single node in cluster

Version 2.4.7 (12 July 2017)

Version 2.4.7 is the eighth release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.7
  • com.couchbase.client:core-io:1.4.7
  • io.reactivex:rxjava:1.2.7

Enhancements & New Features

  • JVMCBC-433: X.509 client side certificate support has been added.
  • JVMCBC-436: KeepAlives are now able to detect and recycle dead tcp connections/channels.
  • JVMCBC-434: Support for "Enhanced Error Messages" has been added for Couchbase Server 5.0
  • JVMCBC-430: Support for createDocument flag in subdoc single path mutations for Couchbase Server 5.0

Fixed Issues

  • JVMCBC-423: Timed out (unsubscribed) operations are discarded and not sent over the network anymore, leading to less overload of the whole core system in failure situations
  • JVMCBC-439: Fixed prepared statement dispatching with node hostname
  • JCBC-1090: Fixed DNS SRV Regression caused by JCBC-1079

Version 2.4.6 (6 June 2017)

Version 2.4.6 is the seventh release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.6
  • com.couchbase.client:core-io:1.4.6
  • io.reactivex:rxjava:1.2.7

Enhancements & New Features

  • JVMCBC-427: The SDK forces to use IPv4 addresses, even if the JVM is configured to force IPv6 lookups (since the server only supports v4 right now).
  • JCBC-1080: It is now possible to read and write full documents through the Subdocument-API when "xattr" is enabled.
  • JCBC-1078: The experimental API for extended attributes on the Subdocument-API has been renamed to "xattr" for consistency reasons.
  • JCBC-1079: When the "com.couchbase.allowReverseDns" System property is set to false, the SDK will avoid all reverse DNS lookups, making it possible to run under constrained network setups. The downside of course is that pretty hostnames can't be used in logging and IPs must be showed all the time.

Fixed Issues

  • JVMCBC-428: The HTTP Status code 401 is now correctly mapped internally to an Authentication Error (instead of a generic failure). This should not change anything on the user-facing API. 

Known Issues

  • JCBC-1090: A known regression over 2.4.5 which prevents DNS SRV bootstrap from working correctly. This will be fixed in 2.4.7, if you are using DNS SRV bootstrap please use 2.4.5 for now and upgrade once 2.4.7 has been released.

Version 2.4.5 (2 May 2017)

Version 2.4.5 is the sixth release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.5
  • com.couchbase.client:core-io:1.4.5
  • io.reactivex:rxjava:1.2.7

Enhancements & New Features

  • JCBC-1066: Add support for FTS Geo & TermRange Queries & Advanced Sort for Couchbase Server 5.0
  • JCBC-1055: Add support for ephemeral bucket management for Couchbase Server 5.0
  • JCBC-1072: Add covenient authenticate overload for Couchbase Server 5.0
  • JCBC-1068: Add dsl support to ANY AND EVERY expression
  • JCBC-1074:  Support GetUsers change in returning domain instead of type for Couchbase Server 5.0
  • JVMCBC-415: Enforce CarrierRefresher poll floor for Couchbase Server 5.0 fast failover support
  • JVMCBC-417: Shift the carrier node refresh list on each attempt
  • JVMCBC-418: Add mock support for kv error map integration test
  • JVMCBC-419:  Support changes in user management rest endpoints due to rename of builtin to local for Couchbase Server 5.0

Fixed Issues

  • JCBC-1067: Expose configPollInterval configurable from CouchbaseEnvironment builder.
  • JVMCBC-413:  Allow to run HELLO after auth for optional backward compatibility support for older Couchbase Server versions(less than 3.0).
  • JVMCBC-421: Close LatencyStats on removal to avoid GC doing additional work by explicitly cleaning up weak references. 

Version 2.4.4 (4 April 2017)

Version 2.4.4 is the fifth release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.4
  • com.couchbase.client:core-io:1.4.4
  • io.reactivex:rxjava:1.2.7

Enhancements & New Features

  • JVMCBC-394JCBC-1060:  Add username/password auth for support of RBACs in Couchbase Server 5.0.
  • JVMCBC-405JCBC-1058:  Add support for user management in Couchbase Server 5.0.
  • JVMCBC-393:  Add support for the extended KV error map in Couchbase Server 5.0.
  • JVMCBC-399:  Perform HELLO before AUTH
  • JVMCBC-404:  Bump Dependencies
  • JVMCBC-401:  propagate error on endpoint encode
  • JVMCBC-408:  Deprecate DCP
  • JVMCBC-410:  Allow to configure the config polling interval
  • JVMCBC-409:  Resolve addresses when parsing ConnectionString
  • JVMCBC-411:  Use ports when building partitioned nodes list
  • JVMCBC-396JCBC-1061:  Support to parse profiling info from N1QL query response
  • JCBC-1062:  Optimize LegacyTranscoder encoding for strings

Fixed Issues

  • JVMCBC-407:  Clean up stateful resources on ConfigurationProvider termination
  • JVMCBC-403:  Fix incorrect escape processing in streaming parser
  • JVMCBC-402:  Fix ignored callbacksOnIoPool in N1ql and Analytics query row callbacks
  • JVMCBC-412:  Fix extras leak on IllegalReferenceCountException
  • JCBC-1065:  Fix api doc to correctly mention about DesignDocumentDoesNotExistException
  • JCBC-1063:  Never compress JSON in LegacyDocument.

Version 2.4.3 (7 March 2017)

Version 2.4.3 is the fourth release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.3
  • com.couchbase.client:core-io:1.4.3
  • io.reactivex:rxjava:1.2.3

Enhancements & New Features

This release fixes the following issues:

  • JVMCBC-391:  Fixes a bug where empty documents can be written to server on NMV rescheduling, if SSL is used
  • JCBC-1030JVMCBC-390:  Add experimental support for Couchbase Analytics.
  • JVMCBC-395:  Add support for detecting Ephemeral buckets using bucket capabilities in configuration and short circuit persistTo calls
  • JVMCBC-392:  Integrate an optional generic json parser yasjl for parsing N1QL query responses
  • JVMCBC-397:  Avoid concurrent modification/reading of bucketConfigs map
  • JCBC-1043:  Add toString for N1QL Rows and Sync Result
  • JCBC-1045:  Pre-check connection string to avoid IOOB exception

Version 2.4.2 (9 February 2017)

Version 2.4.2 is the third release of the 2.4 series, bringing enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.2
  • com.couchbase.client:core-io:1.4.2
  • io.reactivex:rxjava:1.2.3

Enhancements & New Features

This release fixes the following issues:

  • JVMCBC-385: To address a potential performance regression introduced in 2.4.1 with N1QL (due to disabling the pipelining for ensuring correctness) the Service pooling has been overhauled completely, leading to better out of the box performance and more flexibility.
  • JVMCBC-341: The FTS service endpoint has been equipped with application-level keepalive (similar to the other services), bringing it in line functionality wise with its counterparts. It uses the internal /admin/ping HTTP endpoint.
  • JCBC-1028, JVMCBC-384: Experimental support for "Extended Attributes" (XATTR) has been added to the API in preparation for Couchbase Server 5.0.

Version 2.4.1 (19 January 2017)

Version 2.4.1 is the second release of the 2.4 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.1
  • com.couchbase.client:core-io:1.4.1
  • io.reactivex:rxjava:1.2.3

Fixed Issues

This release fixes the following issues:

  • JVMCBC-380JVMCBC-381: Pipelining for all HTTP-based services has been disabled (N1QL, FTS, Views) because it is not properly supported on the server side and can lead to inconsistent responses that are hard to identify and track down. Everyone who has had problems with N1QL queries returning successfully, but only partial results are recommended to upgrade.
    If you are experiencing slowdown of your queries, you need to increase the number of queryEndpoints to a higher setting in order to allow for concurrent requests. In the future we are planning on a more flexible pool implementation, but setting the queryEndpoints to a fixed higher value (i.e. the number of application threads concurrently querying) will help as well.
  • JCBC-999JVMCBC-383: The BucketManager#info() method and equivalents are now properly redistributing the underlying request to other servers if the first one tried is not available. This increases the reliability of info calls significantly.
  • JCBC-1037: If a FTS query is issued against a nonexistent index, it now properly errors with a IndexDoesNotExistException, bringing it on-par with other APIs in similar situations.

Version 2.3.7 (19 January 2017)

Version 2.3.7 is the eigth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.3.7
  • com.couchbase.client:core-io:1.3.7
  • io.reactivex:rxjava:1.1.8

Fixed Issues

This release fixes the following issues:

  • JVMCBC-380JVMCBC-381: Pipelining for all HTTP-based services has been disabled (N1QL, FTS, Views) because it is not properly supported on the server side and can lead to inconsistent responses that are hard to identify and track down. Everyone who has had problems with N1QL queries returning successfully, but only partial results are recommended to upgrade.
    If you are experiencing slowdown of your queries, you need to increase the number of queryEndpoints to a higher setting in order to allow for concurrent requests. In the future we are planning on a more flexible pool implementation, but setting the queryEndpoints to a fixed higher value (i.e. the number of application threads concurrently querying) will help as well.
  • JCBC-999, JVMCBC-383: The BucketManager#info() method and equivalents are now properly redistributing the underlying request to other servers if the first one tried is not available. This increases the reliability of info calls significantly.
  • Thanks to a community contribution, CouchbaseException subclasses without a message are now properly propagating stack traces.

Version 2.4.0 (5 January 2017)

Version 2.4.0 is the first release of the 2.4 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

The supported and tested dependencies for this release are:

  • com.couchbase.client:java-client:2.4.0
  • com.couchbase.client:core-io:1.4.0
  • io.reactivex:rxjava:1.2.3

New Features and Behavioral Changes

This release contains the following enhancements:

  • RxJava has been updated to 1.2.3, which is backwards compatible to 1.1. which was used in the java-client 2.3.6.
  • JCBC-1021: Support for BigDecimal and BigInteger has been added to JsonObject and JsonArray, making it easier to work with those types naturally.
  • JCBC-974: For consistency reasons, the BucketManager now throws DesignDocumentDoesNotExist in such cases instead of returning different errors. It is now in-line with similar methods, providing a more coherent API experience.
  • JCBC-1022, JCBC-1032: Both the bucket-level collections API, as well as the Authenticator APIs have been marked as stable and can thus be considered supported API.
  • JVMCBC-378: Optional support for custom IO pools per service has been added. By default still one IO pool will be used, but it is possible to override this now on a per-service basis. This has the nice effect of being able to use different IO event loops for different workloads (high throughput KV vs long running N1QL queries for example).
  • JVMCBC-373: onError calls are now also moved (by default) onto the computation scheduler, similar to onNext calls.

Fixed Issues

This release fixes the following issues:

  • JCBC-1029: A bug with Long-running prepared N1QL query observables which may be released too early and thus cannot be subscribed to has been fixed. 

Version 2.3.6 (6 December 2016)

Version 2.3.6 is the seventh release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-1024: Add "sort" option to FTS query.  Allows custom sort order for search queries.
  • JCBC-1020: Collections interface for data structures
  • JCBC-981: Add toString() on N1qlQuery
  • JCBC-1023: Ignore FTS integration tests if search service not found
  • JVMCBC-376: Add support for legacy memcached node hashing as it is different in 2.x series compared to 1.x. Legacy hashing can be turned on by using LegacyMemcachedHashingStrategy in the environment builder. 
    Important: If you need interoperability between Java and other SDKs when writing and/or reading to memcached buckets, you must pick the LegacyMemcachedHashingStrategy since the Default one is not compatible across languages  (and between Java 1.x and 2.x)
  • JVMCBC-375: Extract SSL related settings into SecureEnvironment.

Fixed Issues

This release fixes the following issues:

  • JCBC-1026: Early unsubscription can trigger buffer leaks.  If early unsubscribes on the KV API are performed (that is, the async API is used and an operator like timeout() fires before the data could be decoded and the underlying buffers freed) the buffers from the decoding operation are not freed and leak.
  • JCBC-1016: Throw PathNotFound instead of SUBDOC_PATH_NOT_FOUND on index not found in List and key not found in Map
  • JCBC-1017JCBC-1018: Fix inconsistencies with the data structures RFC

Version 2.3.5 (3 November 2016)

Version 2.3.5 is the sixth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-900: Experimental support for Bucket-Level Datastructures has been added, which advance the concept of subdocument APIs to actual programmable datastructures like sets and maps in a cross-SDK fashion.
  • JCBC-1015: When performing a N1QL Query against Couchbase Server 4.5.1 or later you can now specify the "pretty" param on the N1QL query params to optimize network bandwith.

 

Fixed Issues

This release fixes the following issues:

  • JVMCBC-371: A safeguard has been put into place that if the underlying network "connect" call never returns for some reason it is now cut short after a given delay and declared faulty to give the built-in retry mechanisms a chance to run. By default this time is defined as 2 seconds over the "socket connect timeout" and can be customized through the "com.couchbase.connectCallbackGracePeriod" system property.
  • JVMCBC-372: The internal sentRequestQueue for each socket has been subject to an edge case where when the socket accepts requests but never returns results (acting like a "black hole" and not closing the socket either) the internal queue which matches the responses to the requests can grow unbounded. This is now fixed and set to a size of 5120 outstanding requests per socket, customizable through the "com.couchbase.sentRequestQueueLimit" system property. If the queue grows too large the overflowing requests get put into the regular retry cycle giving them a chance to complete eventually.
  • JVMCBC-370: The internal DCP implementation has had a couple bugfixes around MDS deployments.

 

Version 2.3.4 (5 October 2016)

Version 2.3.4 is the fifth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-851: Experimental support for cluster-level N1QL queries has been added to the Cluster interface. Note that at least one bucket needs to be open and the credentials need to be set properly using the authenticate method in order to use this feature.
  • JVMCBC-365: When using SCRAM SASL authentication mechanisms during bootstrap and an error happens, the resulting error message now more clearly indicates what is going on. Most likely the JVM does not support empty keys for passwords, so either the JVM needs to be upgraded to a newer version or a bucket password should be set (which we recommend to do so anyways).

 

Fixed Issues

This release fixes the following issues:

  • JCBC-1007: N1QL, FTS and View queries are now properly evenly distributed in MDS-scenarios.
  • JVMCBC-368: A classloader leak on redeploy has been discovered and fixed in the PauseDetector part of the metrics collection.

 

Version 2.3.3 (6 September 2016)

Version 2.3.3 is the fourth release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-995: Improved custom transcoding for subdocument: optionalrawContent getter on SubdocOperationResult, includeRaw option in the LookupInBuilders (putting a copy of the raw JSON bytes into the result for GETs), new abstract FragmentTranscoder that deals with byte arrays..
  • JCBC-901: The experimental Authenticator interface has been introduced to store implicit credentials for protected operations. Such operations for now include opening a Bucket and getting aClusterManager instance.
  • JCBC-998JVMCBC-357: Added an experimental RawQueryExecutorwhich allows to execute N1QL queries and get the raw JSON response from the server.
  • JVMCBC-361: When a Node is DEGRADED, at least part of its Services are CONNECTED. As such, a message can now be dispatched to a Node when it is either in CONNECTED or DEGRADED state. The relevant Service will still have to be CONNECTED for the message to go through, otherwise it will go into the retry loop.
  • JVMCBC-358: There's a new Endpoint selection strategy (RoundRobinSelectionStrategy), which is used by theQueryEndpoint. When several QueryEndpoints are configured, they will now properly be used in a round-robin fashion.

Fixed Issues

This release fixes the following issues:

  • JVMCBC-364: The query parser can fail when N1QL results are empty (no rows), in a specific HTTP chunk configuration (where there is a split at the "status" entry that follows the rows in the response).
  • JVMCBC-360: When querying a view in reduce mode, the returnedinfo() section is empty but the parser can leak a small amount of bytes. This has now been fixed.

Version 2.3.2 (10 August 2016)

Version 2.3.2 is the third release of the 2.3 series, bringing small enhancements and bugfixes over the last stable release.

Download | API Reference | Core API Reference

New Features and Behavioral Changes

This release contains the following enhancements:

  • JCBC-987: Support for durability constraints (PersistTo and ReplicateTo) has been added to subdocument's MutateInBuilder.
  • JCBC-982: BucketSettings now exposes the raw bucket configuration when reading from the server, and allows to provide parameters not covered by the API when creating/updating buckets.
  • JCBC-983, JVMCBC-350: Added a simple client for cluster REST API to ClusterManager as a ClusterApiClient. This is to easily send requests to nodes where the REST API is exposed (usually on port 8091).
  • JVMCBC-342: When a CouchbaseEnvironment is shutdown(), the internal counter used to issue warnings in case of multiple environments is decreased. Additionally an event is triggered on the EventBus.
  • JVMCBC-351: Don't limit SSL to SunX509 algorithm but instead use the platform's default. This default can always be changed at runtime via the "ssl.KeyManagerFactory.algorithm" security property (set in the Java security properties file or by calling Security.setProperty(...)). Thanks to contributor @arana3!
  • JCBC-985, JCBC-976: Experimental FTS API enhancements: Fix fts errors handling/parsing, StringQuery becomes QueryStringQuery, fix highlight style being optional, renamed ScanConsistency to SearchConsistency.
  • JVMCBC-344, JVMCBC-349: RxJava, Disruptor and Netty internal dependencies have been updated to their latest bugfix releases. Subsequently, usage of deprecated Disruptor APIs have been refactored out.
  • JVMCBC-355: Improves diagnosability of errors related to UnicastAutoReleaseSubject by adding an identifier to these subjects.

Fixed Issues

This release fixes the following issues:

  • JCBC-984: Don't broadcast query plan to non-query nodes when using prepared statements.
  • JCBC-992: DNS SRV workaround when default nameserver is IPv6: Bootstrap now allows to provide an explicit value for java.naming.provider.url.
  • JVMCBC-345, JVMCBC-346, JVMCBC-347: Various fixes linked to SDK bootstrap: Don't silently ignore ConnectException, avoid subscribe() without error handler in configuration/bootstrap Observables, maintain internal bootstrap state in config provider. Fixed an issue where a node seen as down during bootstrap would never be reconnected to later on, even when it would come back online.
  • JVMCBC-348: Catch exceptions that event bus consumers may trigger.
  • JVMCBC-352: Fixed an issue with the N1QL streaming parser where some packet splitting layouts would confuse the parser into interpreting results as RAW. This would usually translate into either JSON parse errors (rows emitted would be malformed JSON) or an IllegalStateException with the "...in TRANSITION..." message.
  • JVMCBC-354: The BucketManager#getDesignDocuments and associated GetDesignDocumentsRequest hit an API that is only working on data nodes (unlike the rest of 8091 APIs). Fixed an issue when, in a MDS configuration, such request would incorrectly be sent to non-data nodes.

Version 2.3.1 (22 June 2016)

This release is the second release of the 2.3 series, bringing small enhancements
and bugfixes over the last stable release.

Download | API Reference | Core API Reference

Fixed Issues

This release fixes the following issues:

  • JCBC-975: Replace occurrences of StringBuffer with StringBuilder
  • JCBC-978: Fix Index DSL "WITH nodes" option
  • JVMCBC-343: WaitStrategy needs to be created for every CouchbaseCore

Version 2.3.0 (10 June 2016)

Version 2.3.0 is the first general availability release of the 2.3 series. It adds new features for N1QL query, performance enhancements and supports the developer preview full text search available in Couchbase Server 4.5.

Download | API Reference | Core API Reference

New features and behavioral changes

This release contains the following enhancements:

  • JVMCBC-271: The long deprecated queryEnabled and queryPort environment params have been removed since they are useless as of now.
  • JCBC-958, JCBC-959, JCBC-957: The Fulltext-Search API has been heavily reworked and streamlined.
  • JCBC-954, JCBC-971: The subdocument APIs have been marked as stable and slightly polished.
  • JCBC-955: The N1QL Index Management API has been marked as stable.
  • JVMCBC-333: A custom KeyStore can now be passed in during CouchbaseEnvironment setup (in addition to passing the keystore filepath).
  • JCBC-964, JVMCBC-338: Support for disabling metrics when performing a N1QL query to save on the response size.
  • JVMCBC-334: Support for N1QL SELECT RAW has been added.
  • JCBC-965: A generic param option has been added to the N1qlParams class.
  • RxJava has been updated to 1.1.5
  • Retry logic during rebalance ("Not My VBucket") has been aligned with the SDK RFC.
  • JVMCBC-335: For advanced use cases, the RingBuffer waiting strategy for the request buffer can now be tuned. Use with care!

Fixed Issues

This release fixes the following issues:

  • JCBC-968, JVMCBC-337: The DocumentFragment does not carry the CAS on multi lookup, this issue has been fixed.
  • JCBC-973: A regression has been fixed where disabled flush on the bucket was not surfaced as an exception inside the SDK when BucketManager#flush() is called.