Release Notes
2.0.10
Release 2.0.10 is protocol-compatible with all prior 2.0.x releases. Users should continue to employ the bindings released with 2.0.0, with the exception of the following bindings:
- Java - updated to 2.0.8
- PHP - updated to 2.0.8
- Python - updated to 2.0.6
Fixes
- Clients running long enough to execute 232 internal tasks could experience a reordering of client operations. The outcome of this reordering is undefined and could include crashes or incorrect behavior.
- The
fdbcli
command-line interface would incorrectly report an internal error when running coordinators auto
if there weren’t enough machines in the cluster.
2.0.9
Release 2.0.9 is protocol-compatible with all prior 2.0.x releases. Users should continue to employ the bindings released with 2.0.0, with the exception of the following bindings:
- Java - updated to 2.0.8
- PHP - updated to 2.0.8
- Python - updated to 2.0.6
Fixes
- Long-running clusters using the
ssd
storage engine could eventually deprioritize failure monitoring, causing busy machines to be considered down.
2.0.8
Release 2.0.8 is protocol-compatible with all prior 2.0.x releases. Users should continue to employ the bindings released with 2.0.0, with the exception of the following bindings:
- Java - updated to 2.0.8
- PHP - updated to 2.0.8
- Python - updated to 2.0.6
Fixes
- Resetting a transaction did not release its memory.
- Windows: FoundationDB client applications could crash when starting up due to a race condition.
- Ubuntu: Ubuntu software center reported that the FoundationDB package was of bad quality.
PHP
- Package updated to support PHP 5.4+ (instead of 5.3+).
- Fix:
get_boundary_keys()
could fail to complete successfully if certain retryable errors were encountered.
- Fix: Bindings set error reporting level, which could interfere with clients that used alternate settings.
Java
- Fix: Calling
getRange
on a Transaction
could leak memory.
2.0.7
Release 2.0.7 is protocol-compatible with all prior 2.0.x releases. Users should continue to employ the bindings released with 2.0.0, with the exception of the following bindings:
- Java - updated to 2.0.4
- PHP - updated to 2.0.6
- Python - updated to 2.0.6
Fixes
- Updated FDBGnuTLS plugin with GnuTLS 3.2.15, incorporating the fix for GNUTLS-SA-2014-3.
- Linux and Mac OS X: Processes configured with a 5-digit port number would listen on the wrong port.
2.0.6
Release 2.0.6 is protocol-compatible with all prior 2.0.x releases. Users should continue to employ the bindings released with 2.0.0, with the exception of the following bindings:
- Java - updated to 2.0.4
- PHP - updated to 2.0.6
- Python - updated to 2.0.6
Fixes
- Memory storage engine files could grow very large in an idle database.
PHP
- Fix:
get_boundary_keys()
would throw an error if passed a transaction.
- Fix: Options which take an integer parameter would not use the value supplied.
Python
- Fix: Python 3 compatibility was broken.
- Fix: Choosing a custom Python path in the Windows installer would install to the wrong location.
2.0.5
Release 2.0.5 is protocol-compatible with 2.0.0, 2.0.1, 2.0.2, 2.0.3, and 2.0.4. Users should continue to employ the bindings released with 2.0.0, with the exception of the Java bindings, which have been updated to 2.0.4, and the PHP bindings, which have been updated to 2.0.5.
Fixes
- Clients and servers that specified a cluster file as a filename only (without path) could crash when the coordinators were changed.
PHP
- Directory layer partitions created with the PHP bindings were incompatible with other language bindings. Contact us if you have data stored in a directory partition created by PHP that can’t easily be restored and needs to be migrated.
2.0.4
Release 2.0.4 is protocol-compatible with 2.0.0, 2.0.1, 2.0.2, and 2.0.3. Users should continue to employ the bindings released with 2.0.0, with the exception of the Java bindings, which have been updated to 2.0.4.
Fixes
- Clearing a key larger than the legal limit of 10 kB caused the database to crash and become unreadable.
- Explicitly added write conflict ranges were ignored when read-your-writes was disabled.
Java
ByteArrayUtil.compareUnsigned()
failed to return in some circumstances.
2.0.3
Release 2.0.3 is protocol-compatible with 2.0.0, 2.0.1, and 2.0.2. There are no updates to the language bindings, so users should continue to employ the bindings released with 2.0.0.
Fixes
- Updated FDBGnuTLS plugin with GnuTLS 3.2.12, incorporating fixes for GNUTLS-SA-2014-1 and GNUTLS-SA-2014-2.
- When inserting a large number of keys close to the key size limit, server logs were unexpectedly verbose.
2.0.2
Release 2.0.2 is protocol-compatible with 2.0.0 and 2.0.1. There are no updates to the language bindings, so users should continue to employ the bindings released with 2.0.0.
Fixes
- Windows: Possible database corruption when the FoundationDB service is stopped but unable to kill its child processes.
2.0.1
Release 2.0.1 is protocol-compatible with 2.0.0. There are no updates to the language bindings, so users should continue to employ the bindings released with 2.0.0.
Fixes
- In some cases, a server reincluded after previous exclusion would not participate in data distribution.
- Clients could not reliably connect to multiple clusters.
- The calculation of usable disk space on Linux and Mac OS X improperly included space reserved for superuser.
2.0.0
New layers available in all languages
- The Subspace layer provides a recommended way to define subspaces of keys by managing key prefixes.
- The Directory layer provides a tool to manage related subspaces as virtual directories. Recommended as a convenient and high-performance way to organize and layout different kinds of data within a single FoundationDB database.
Monitoring
- The
fdbcli
command-line interface reports information and warnings about available memory.
Performance
- Improved client CPU performance overall.
- Greatly improved client CPU performance for range-read operations.
- Greatly improved concurrency when issuing writes between reads.
- Snapshot reads are now fully cached.
- Trade off:
get_key
is cached, but get_key
now also retrieves the value of the key, using network bandwidth. (Using OPTION_RYW_DISABLE
will avoid both the cache and the network bandwidth.)
- Windows: Improved latencies.
Fixes
- In rare cases when many keys very close to the maximum key size are inserted, the database could become unavailable.
GetReadVersion
did not properly throw transaction_cancelled
when called on a transaction that had been cancelled.
- When using the
access_system_keys
option, a get_range_startswith(\xff)
would incorrectly return no results.
get_range_startswith
, when invoked using a key ending in the byte \xff
, could return results outside the desired range.
- Linux: A process could become unresponsive if unable to find a TCP network device in
/proc/net/snmp
.
- Destroying client threads leaked memory.
- Database availability could be unnecessarily compromised in certain rare, low-disk conditions on a “transaction” class machine.
- Writing a zero-byte value to the key
''
caused the database to crash.
- Mac OS X: Power loss could cause data corruption.
Other changes
- To avoid confusing situations, any use of a transaction that is currently committing will cause both the commit and the use to throw a
used_during_commit
error.
- The
FDB_CLUSTER_FILE
environment variable can point to a cluster file that takes precedence over both the current working directory and (e.g., in Linux) /etc/foundationdb/fdb.cluster
.
- Disabled unloading the
fdb_c
library to prevent consequent unavoidable race conditions.
- Discontinued testing and support for Ubuntu 11.04. We continue to support Ubuntu 11.10 and later.
Java
- New APIs for allocating and managing keyspace (Directory).
- In most cases, exceptions thrown in synchronous-style Java programs will have the original calling line of code in the backtrace.
- Native resources are handled in a safer and more efficient manner.
- Fix:
AsyncUtil.whenReady
crashed when the future being waited on was an error.
- Fix: Calling
strinc
on an empty string or a string containing only \xff
bytes threw an exception.
- Fix: Trailing null bytes on the result of
strinc
are removed.
Node
- New APIs for allocating and managing keyspace (Directory).
- Support for the Promise/A+ specification with supporting utilities.
- Futures can take multiple callbacks. Callbacks can be added if the original function was called with a callback. The Future type is exposed in our binding.
- Added
as_foundationdb_key
and as_foundationdb_value
support.
- Node prints a stack trace if an error occurs in a callback from V8.
- Snapshot transactions can be used in retry loops.
- The methods
db.setAndWatch
and db.clearAndWatch
now return an object with a watch member instead of a future.
- Fix: Could not use the
'this'
pointer with the retry decorator.
- Fix: Node transactional decorator didn’t return a result to the caller if the function was called with a transaction.
- Fix: The program could sometimes crash when watches were manually cancelled.
Ruby
- New APIs for allocating and managing keyspace (Directory).
- Tuple and subspace range assume the empty tuple if none is passed.
- Added
as_foundationdb_key
and as_foundationdb_value
support.
- Snapshot transactions can be used in retry loops.
- Allow specifying the API version multiple times, so long as the same version is used each time.
- Fix:
FDB.options.set_trace_enable
threw an exception when passed a nil
value.
Python
- New APIs for allocating and managing keyspace (Directory).
- Snapshot transactions can be used in retry loops.
- Support for gevent 1.0.
- Renamed the bitwise atomic operations (
and
, or
, xor
) to bit_and
, bit_or
, bit_xor
. Added aliases for backwards compatibility.
- Fix:
get_range_startswith
didn’t work with as_foundationdb_key
- Fix:
fdb.locality.get_boundary_keys
and fdb.locality.get_addresses_for_key
did not support as_foundationdb_key
.
C
- Support for API version 200 and backwards compatibility with previous API versions.
.NET
- New APIs for allocating and managing keyspace (Directory).