Make the default wait timeout infinity

This brings the default behavior in line with other FoundationDB client
libraries which don't use client-side timeouts when waiting for futures to
fire.

A few other reasons are:

  * Currently we may generate spurious future `ready` messages when timeouts
fire during overload scenarios. The caller would have to know to flush ready
messages if they caught a `{timeout, _}`

 * The response may succeed under 5 seconds, but it would be queued in the
   networking layer and throw a `timeout` error on the Erlang side.

 * Timeouts can be set as a transaction or db handle options. It's easier to
   apply configuration defaults there than for individual wait functions.

 * Watch futures are not bound by the 5 second transaction time limit, and
   they'd have to know about the default `wait/1,2` call timeout to know to
   extend it or set it to `infinity`.
1 file changed
tree: 54763e15d8494aacd1edbb0fb176aa21f06bf1f3
  1. c_src/
  2. include/
  3. notes/
  4. plugins/
  5. priv/
  6. src/
  7. test/
  8. .asf.yaml
  9. .gitignore
  10. BINDING_TESTER.md
  11. enc
  12. LICENSE
  13. Makefile
  14. README.md
  15. rebar.config
README.md

An Erlang Binding to FoundationDB

This project is a NIF wrapper for the FoundationDB C API. Documentation on the main API can be found here.

This project also provides a conforming implementation of the Tuple and Directory layers.

Building

Assuming you have installed the FoundationDB C API library, building erlfdb is as simple as:

$ make

Alternatively, adding erlfdb as a rebar dependency should Just Work ®.

Documentation for installing FoundationDB can be found here for macOS or here for Linux.

Quick Example

A simple example showing how to open a database and read and write keys:


Eshell V9.3.3.6 (abort with ^G) 1> Db = erlfdb:open(<<"/usr/local/etc/foundationdb/fdb.cluster">>). {erlfdb_database,#Ref<0.2859661758.3941466120.85406>} 2> ok = erlfdb:set(Db, <<"foo">>, <<"bar">>). ok 3> erlfdb:get(Db, <<"foo">>). <<"bar">> 4> erlfdb:get(Db, <<"bar">>). not_found

Binding Tester

FoundationDB has a custom binding tester that can be used to test whether changes have broken compatibility. See the BINDING_TESTER documentation for instructions on building and running that system.