Release Notes

5.1.7

Fixes

  • fdbdr switch could take a long time to complete if the two clusters were not created at the same time. <rdar://problem/37551521>

5.1.6

Fixes

5.1.5

Fixes

  • The consistency check calculated the size of the database inefficiently. <rdar://problem/38385230>
  • Could not create new directories with the Python and Ruby implementations of the directory layer. <rdar://problem/38911902> <rdar://problem/38477474>
  • fdbcli could erroneously report that it was incompatible with some processes in the cluster. <rdar://problem/39353867>
  • The commit commmand in fdbcli did not wait for the result of the commit before continuing to the next command.

Other Changes

  • renamed the multi_dc replication mode to three_datacenter.

5.1.4

Fixes

5.1.3

Fixes

5.1.2

Fixes

5.1.1

Fixes

  • Bindings: Disposing a transaction during a commit resulted in a broken promise from get_versionstamp. <rdar://problem/35835272>
  • Bindings: Calling create_cluster before initializing the network would result in a crash. <rdar://problem/35563243>
  • Latest restorable version of a running backup was not being updated in backup layer status. <rdar://problem/37288715>
  • Backup layer status would sometimes show an error or an incorrect value for the recent blob bandwidth metric. <rdar://problem/37288943>
  • Backup deletions were not deleting all of the files related to the backup. <rdar://problem/37756550>
  • The cluster controller was sharing a process with the master even when better locations existed. <rdar://problem/37318611>
  • Blob credentials files were being opened in read-write mode.
  • Sometimes fdbbackup did not write log files even when --log was passed on the command line. <rdar://problem/36259384>

Performance

  • Backup file uploads will respond to server-side throttling in the middle of a chunk upload rather than only between chunks. <rdar://problem/37245992>

5.1.0

Features

Performance

  • The data distribution algorithm can split the system keyspace. <rdar://problem/29932360>
  • Improved load balancing when servers are located across multiple data centers. <rdar://problem/34213649>
  • Improved read latencies after recoveries by only making servers responsible for keys if they have finished copying the data from other servers. <rdar://problem/34697182>
  • Improved recovery times by waiting until a process has finished recovering its data from disk before letting it be recruited for new roles. <rdar://problem/32000146> <rdar://problem/34212951>
  • Improved 95% read version latencies by reducing the number of logs required to confirm that a proxy has not been replaced. <rdar://problem/33196298>
  • Stopped the transaction logs from copying unneeded data after multiple successive recoveries. <rdar://problem/36488946>
  • Significantly improved the performance of range reads. <rdar://problem/33926224>
  • The cluster controller prefers to be recruited on stateless class processes and will not put other stateless roles on the same process. <rdar://problem/35155324>
  • Excluded servers no longer take on stateless roles. <rdar://problem/27110802>
  • Stateless roles will be proactively moved off of excluded processes. <rdar://problem/27110802> <rdar://problem/35155044>
  • Dramatically improved restore speeds of large disk queue files. <rdar://problem/35567320>
  • Clients get key location information directly from the proxies, significantly reducing the latency of worst case read patterns. <rdar://problem/35953920>
  • Reduced the amount of work incompatible clients generate for coordinators and the cluster controller. In particular, this reduces the load on the cluster caused by using the multi-version client. <rdar://problem/30897631>
  • Pop partially recovered mutations from the transaction log to save disk space after multiple successive recoveries. <rdar://problem/33755270>
  • Stopped using network checksums when also using TLS. <rdar://problem/32157852>
  • Improved cluster performance after recoveries by prioritizing processing new mutations on the logs over copying data from the previous logs. <rdar://problem/36489337>
  • Backup agents prefer reading from servers in the same data center. <rdar://problem/34213617>

Fixes

  • New databases immediately configured into three_data_hall would not respect the three_data_hall constraint. <rdar://problem/34415440>
  • Exclude considered the free space of non-storage processes when determining if an exclude was safe.
  • fdbmonitor failed to start processes after fork failure. <rdar://problem/34743257>
  • fdbmonitor will only stop processes when the configuration file is deleted if kill_on_configuration_change is set. <rdar://problem/35497412>
  • The data distribution algorithm would hang indefinitely when asked to build storage teams with more than three servers.
  • Mutations from a restore could continue to be applied for a very short amount of time after a restore was successfully aborted.

Extremely Rare Bug Fixes

  • Storage servers did not properly handle rollbacks to versions before their restored version.
  • A newly recruited transaction log configured with the memory storage engine could crash on startup.
  • The data distribution algorithm could split a key range so that one part did not have any data.
  • Storage servers could update to an incorrect version after a master failure.
  • The disk queue could report a commit as successful before the sync of the disk queue files completed.
  • A disk queue which was shutdown before completing its first commit could become unrecoverable.

Status

Bindings

  • API version updated to 510.
  • Add versionstamp support to the Tuple layer in Java and Python. <rdar://problem/25560444>

Java

  • API versions prior to 510 are no longer supported.
  • The bindings have been moved to the package com.apple.foundationdb from com.apple.cie.foundationdb. <rdar://problem/33271641>
  • We no longer offer a version of the Java bindings with our custom futures library or support Java versions less than 8. The bindings that use completable futures have been renamed to fdb-java. <rdar://problem/35029630>
  • Finalizers now log a warning to stderr if an object with native resources is not closed. This can be disabled by calling FDB.setUnclosedWarning(). <rdar://problem/35421530>
  • Implementers of the Disposable interface now implement AutoCloseable instead, with close() replacing dispose().
  • AutoCloseable objects will continue to be closed in object finalizers, but this behavior is being deprecated. All AutoCloseable objects should be explicitly closed. <rdar://problem/35421530>
  • AsyncIterator is no longer closeable. <rdar://problem/35595971>
  • getBoundaryKeys() now returns a CloseableAsyncIterable rather than an AsyncIterator. <rdar://problem/35421530>
  • Transaction.getRange() no longer initiates a range read immediately. Instead, the read is issued by a call to AsyncIterable.asList() or AsyncIterable.iterator(). <rdar://problem/35595971>
  • Added hashCode() method to Subspace. <rdar://problem/35125601>
  • Added thread names to threads created by our default executor. <rdar://problem/36077166>
  • The network thread by default will be named fdb-network-thread. <rdar://problem/36077166>
  • Added an overload of whileTrue() which takes a Supplier. <rdar://problem/35096338>
  • Added experimental support for enabling native callbacks from external threads. <rdar://problem/33300740>
  • Fix: Converting the result of Transaction.getRange() to a list would issue an unneeded range read. <rdar://problem/35325444>
  • Fix: range iterators failed to close underlying native resources. <rdar://problem/35595971>
  • Fix: various objects internal to the bindings were not properly closed. <rdar://problem/35541447>

Other Changes