Couchbase Java SDK Release Notes and Archives

Installation

At least Java 7 is required for current releases; all newer, vendor supported Java versions are supported (and encouraged).
See the Compatibility section for details.
Java 11 is recommended which has various enhancements like lambda local variable type inference, profiling tools and updated security features, starting from the release 2.7.2. For older releases, Java 8 is recommended.

Version 2.6 and earlier support Java 6, though some transitive dependencies are no longer supported by those projects and have known security issues.

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

The java-client dependency will pull in two more transitive dependencies. One is called com.couchbase.client.core-io and is an 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.7.4 (26 February 2019)

Version 2.7.4 is the fifth release of the 2.7 series, bringing new features, enhancements, and bugfixes over the last stable release.

Bug Fixes

JCBC-1292:
A previous OSGi bundle change pulled core packages into the Java Client’s jar.
This led to class path failures for the technologies which inspect classes (for example Spring Boot) and a bloated jar.
Now, only the Java Client packages for OSGi specific manifest generation are exported, and behaviour and jar size are back to expected.

JCBC-1288:
Added a workaround for missing proxyPort parameter that may be removed in next server version.
This change may be a temporary one for internal use.

JCBC-1276:
Core changes to redo DNS lookups on every new connection call — if enabled through system property com.couchbase.forceDnsLookupOnReconnect.
This is useful in containerized environments.

Version 2.7.2 (5 December 2018)

Version 2.7.2 is the third release of the 2.7 series, bringing new features, enhancements, and bugfixes over the last stable release.
As of this release, OpenJDK 11 and Oracle JDK 11 with HotSpot JVM is supported.
See the Compatibility section for details.

A special note for this release, the Jackson databind dependency has been upgraded to version to 2.9.7 for security updates.
As the newer Jackson dependency uses Java 7 language features and older Java 6 compatible versions are no longer maintained, the SDK is no longer compatible with Java 6.
Couchbase prefers to make such platform changes in minor releases, but is applying the change here given the nature of the issue and that the semantic versioning standard does allow for a dependency update.

Enhancements & New Features

JCBC-1253:
Adds support for Sub-Document operation expansion of macro in extended attributes. This is intended for internal use for other dependent Couchbase libraries.

JCBC-1259: Exposes async cluster interface from cluster similar to the bucket interface behavior.

Fixed Issues

JVMCBC-566:
Signals on refresh intervals would be sent to both carrier and http refresher, which is a Noop in http refresher. Limit the refresh signals only to the carrier refresher.

JVMCBC-567:
OnDemand service connections can still be in connected state when the service is removed. Fix the disconnect logic to be similar to pooled service.

JVMCBC-565:
Half open http config stream can go undetected.
Update to proactively fetching config from http configuration provider similar to carrier refresher on refresh signals.
This handles the half open connection state in a less penalizing way than recreating a connection on idle timeout.

Version 2.6.2 (4 September 2018)

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

Fixed Issues

JCBC-1226:
Fixes a NullPointerException if AnalyticsParams is not properly initialized.

JVMCBC-564:
During rebalance, an issue has been fixed where the SDK would connect to a KV service earlier than it should, leading to errors and failed operations during rebalance.
With this fix applied, especially when performing rebalance-in scenarios on memcached buckets, this problem will go away.
Note that couchbase buckets are not as affected since the gradual vbucket (partition) movement prohibits sending operations to non-ready nodes.

Version 2.6.1 (23 July 2018)

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

Enhancements & New Features

JVMCBC-552: Improve ring buffer diagnostics. The diagnostic information about the\
requests contained in the ring buffer will be useful for debugging and adjusting
configuration on backpressure exception.

Fixed Issues

JVMCBC-556: Allow to distinguish between nodes on the same physical host with
different ports

JCBC-1223: 2.6.0 release introduced a bug on the async persistence API where a timeout
of O will be applied if there was no timeout specified and this would cause timer
to fire quickly leading to timeout exception. Fixed the behavior to be similar
to previous releases.

JVMCBC-560: Nodes can temporarily go to service degraded state while increasing
the connection pool. If the node exclusively provides query/analytics service,
there might be an incorrect node disconnected event on the event bus. Fixed by
not marking node as disconnected if service is degraded.

Known Issues

JCBC-1226: A
regression has been found in 2.6.0 which will be addressed in 2.6.2:
When using the analytics API without explicit params, a
NullPointerException is raised (i.e.
bucket.query(AnalyticsQuery.simple("myquery"));). As a workaround,
please specify empty params
explicitly: bucket.query(AnalyticsQuery.simple("myquery",
AnalyticsParams.build()));

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.

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.

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);

JCBC-1226: A
regression has been found in 2.6.0 which will be addressed in 2.6.2:
When using the analytics API without explicit params, a
NullPointerException is raised (i.e.
bucket.query(AnalyticsQuery.simple("myquery"));). As a workaround,
please specify empty params
explicitly: bucket.query(AnalyticsQuery.simple("myquery",
AnalyticsParams.build()));

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

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.

Enhancements & New Features

This release fixes the following issues:

JVMCBC-380JVMCBC-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.

Fixed Issues

This release fixes the following issues:

JVMCBC-380, JVMCBC-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.

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.

Fixed Issues

This release fixes the following issues:

JVMCBC-380, JVMCBC-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.

New Features and Behavioral Changes

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.

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)

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

Version 2.3.5 (3 November 2016)

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.

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.

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-998, JVMCBC-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.

New Features and Behavioral Changes

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!

Fixed Issues

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-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.

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.