Switch API level to 610
There were some changes that had to be accounted for:
* Cluster is gone, so cluster futures, resources, etc were removed
* Create database returns a database object not future, so database future
type is removed.
* It's possible to use json tracing format on the client, so added that
netowrk option.
diff --git a/c_src/atom_names.h b/c_src/atom_names.h
index 47bd088..bd0cde8 100644
--- a/c_src/atom_names.h
+++ b/c_src/atom_names.h
@@ -28,7 +28,6 @@
ATOM_MAP(erlfdb_error);
ATOM_MAP(erlfdb_future);
-ATOM_MAP(erlfdb_cluster);
ATOM_MAP(erlfdb_database);
ATOM_MAP(erlfdb_transaction);
@@ -39,6 +38,7 @@
ATOM_MAP(local_address);
ATOM_MAP(cluster_file);
ATOM_MAP(trace_enable);
+ATOM_MAP(trace_format);
ATOM_MAP(trace_roll_size);
ATOM_MAP(trace_max_logs_size);
ATOM_MAP(trace_log_group);
@@ -65,10 +65,6 @@
ATOM_MAP(enable_slow_task_profiling);
-// Cluster Options
-// There aren't any...
-
-
// Database Options
ATOM_MAP(location_cache_size);
ATOM_MAP(max_watches);
@@ -135,4 +131,4 @@
// Error Predicates
ATOM_MAP(retryable);
ATOM_MAP(maybe_committed);
-ATOM_MAP(retryable_not_committed);
\ No newline at end of file
+ATOM_MAP(retryable_not_committed);
diff --git a/c_src/fdb.h b/c_src/fdb.h
index 837d810..62dffda 100644
--- a/c_src/fdb.h
+++ b/c_src/fdb.h
@@ -13,7 +13,7 @@
#ifndef ERLFDB_FDB_H
#define ERLFDB_FDB_H
-#define FDB_API_VERSION 600
+#define FDB_API_VERSION 610
#include <foundationdb/fdb_c.h>
-#endif // Included fdb.h
\ No newline at end of file
+#endif // Included fdb.h
diff --git a/c_src/main.c b/c_src/main.c
index 16c3618..3504aa5 100644
--- a/c_src/main.c
+++ b/c_src/main.c
@@ -217,52 +217,6 @@
static inline ERL_NIF_TERM
-erlfdb_future_get_cluster(ErlNifEnv* env, ErlFDBFuture* f)
-{
- FDBCluster* cluster;
- ErlFDBCluster* c;
- ERL_NIF_TERM ret;
- fdb_error_t err;
-
- err = fdb_future_get_cluster(f->future, &cluster);
- if(err != 0) {
- return erlfdb_erlang_error(env, err);
- }
-
- c = enif_alloc_resource(ErlFDBClusterRes, sizeof(ErlFDBCluster));
- c->cluster = cluster;
-
- ret = enif_make_resource(env, c);
- enif_release_resource(c);
-
- return T2(env, ATOM_erlfdb_cluster, ret);
-}
-
-
-static inline ERL_NIF_TERM
-erlfdb_future_get_database(ErlNifEnv* env, ErlFDBFuture* f)
-{
- FDBDatabase* database;
- ErlFDBDatabase* d;
- ERL_NIF_TERM ret;
- fdb_error_t err;
-
- err = fdb_future_get_database(f->future, &database);
- if(err != 0) {
- return erlfdb_erlang_error(env, err);
- }
-
- d = enif_alloc_resource(ErlFDBDatabaseRes, sizeof(ErlFDBDatabase));
- d->database = database;
-
- ret = enif_make_resource(env, d);
- enif_release_resource(d);
-
- return T2(env, ATOM_erlfdb_database, ret);
-}
-
-
-static inline ERL_NIF_TERM
erlfdb_future_get_value(ErlNifEnv* env, ErlFDBFuture* f)
{
fdb_bool_t present;
@@ -497,6 +451,8 @@
option = FDB_NET_OPTION_CLUSTER_FILE;
} else if(IS_ATOM(argv[0], trace_enable)) {
option = FDB_NET_OPTION_TRACE_ENABLE;
+ } else if(IS_ATOM(argv[0], trace_format)) {
+ option = FDB_NET_OPTION_TRACE_FORMAT;
} else if(IS_ATOM(argv[0], trace_roll_size)) {
option = FDB_NET_OPTION_TRACE_ROLL_SIZE;
} else if(IS_ATOM(argv[0], trace_max_logs_size)) {
@@ -711,10 +667,6 @@
return erlfdb_future_get_version(env, f);
} else if(f->ftype == ErlFDB_FT_KEY) {
return erlfdb_future_get_key(env, f);
- } else if(f->ftype == ErlFDB_FT_CLUSTER) {
- return erlfdb_future_get_cluster(env, f);
- } else if(f->ftype == ErlFDB_FT_DATABASE) {
- return erlfdb_future_get_database(env, f);
} else if(f->ftype == ErlFDB_FT_VALUE) {
return erlfdb_future_get_value(env, f);
} else if(f->ftype == ErlFDB_FT_STRING_ARRAY) {
@@ -728,11 +680,15 @@
static ERL_NIF_TERM
-erlfdb_create_cluster(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
+erlfdb_create_database(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
ErlFDBSt* st = (ErlFDBSt*) enif_priv_data(env);
- FDBFuture* future;
ErlNifBinary bin;
+ FDBDatabase* database;
+ fdb_error_t err;
+ ErlFDBDatabase* d;
+ ERL_NIF_TERM ret;
+
if(st->lib_state != ErlFDB_CONNECTED) {
return enif_make_badarg(env);
@@ -750,62 +706,18 @@
return enif_make_badarg(env);
}
- future = fdb_create_cluster((const char*) bin.data);
-
- return erlfdb_create_future(env, future, ErlFDB_FT_CLUSTER);
-}
-
-
-static ERL_NIF_TERM
-erlfdb_cluster_set_option(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
-{
- // There are currently no valid cluster options
- return enif_make_badarg(env);
-}
-
-
-static ERL_NIF_TERM
-erlfdb_cluster_create_database(
- ErlNifEnv* env,
- int argc,
- const ERL_NIF_TERM argv[]
- )
-{
- ErlFDBSt* st = (ErlFDBSt*) enif_priv_data(env);
- ErlFDBCluster* c;
- FDBFuture* future;
- ErlNifBinary bin;
- void* res;
-
- if(st->lib_state != ErlFDB_CONNECTED) {
- return enif_make_badarg(env);
+ err = fdb_create_database((const char*) bin.data, &database);
+ if(err != 0) {
+ return erlfdb_erlang_error(env, err);
}
- if(argc != 2) {
- return enif_make_badarg(env);
- }
+ d = enif_alloc_resource(ErlFDBDatabaseRes, sizeof(ErlFDBDatabase));
+ d->database = database;
- if(!enif_get_resource(env, argv[0], ErlFDBClusterRes, &res)) {
- return enif_make_badarg(env);
- }
- c = (ErlFDBCluster*) res;
+ ret = enif_make_resource(env, d);
+ enif_release_resource(d);
- if(!enif_inspect_binary(env, argv[1], &bin)) {
- return enif_make_badarg(env);
- }
-
- // FoundationDB requires a dbname that is "DB"
- if(bin.size != 2 || bin.data[0] != 'D' || bin.data[1] != 'B') {
- return enif_make_badarg(env);
- }
-
- future = fdb_cluster_create_database(
- c->cluster,
- (const uint8_t*) bin.data,
- bin.size
- );
-
- return erlfdb_create_future(env, future, ErlFDB_FT_DATABASE);
+ return T2(env, ATOM_erlfdb_database, ret);
}
@@ -2068,10 +1980,7 @@
NIF_FUNC(erlfdb_future_get_error, 1),
NIF_FUNC(erlfdb_future_get, 1),
- NIF_FUNC(erlfdb_create_cluster, 1),
- NIF_FUNC(erlfdb_cluster_set_option, 3),
- NIF_FUNC(erlfdb_cluster_create_database, 2),
-
+ NIF_FUNC(erlfdb_create_database, 1),
NIF_FUNC(erlfdb_database_set_option, 3),
NIF_FUNC(erlfdb_database_create_transaction, 1),
diff --git a/c_src/resources.c b/c_src/resources.c
index c7c5319..88f402a 100644
--- a/c_src/resources.c
+++ b/c_src/resources.c
@@ -14,7 +14,6 @@
ErlNifResourceType* ErlFDBFutureRes;
-ErlNifResourceType* ErlFDBClusterRes;
ErlNifResourceType* ErlFDBDatabaseRes;
ErlNifResourceType* ErlFDBTransactionRes;
@@ -35,18 +34,6 @@
return 0;
}
- ErlFDBClusterRes = enif_open_resource_type(
- env,
- NULL,
- "erlfdb_cluster",
- erlfdb_cluster_dtor,
- ERL_NIF_RT_CREATE,
- NULL
- );
- if(ErlFDBClusterRes == NULL) {
- return 0;
- }
-
ErlFDBDatabaseRes = enif_open_resource_type(
env,
NULL,
@@ -91,17 +78,6 @@
void
-erlfdb_cluster_dtor(ErlNifEnv* env, void* obj)
-{
- ErlFDBCluster* c = (ErlFDBCluster*) obj;
-
- if(c->cluster != NULL) {
- fdb_cluster_destroy(c->cluster);
- }
-}
-
-
-void
erlfdb_database_dtor(ErlNifEnv* env, void* obj)
{
ErlFDBDatabase* d = (ErlFDBDatabase*) obj;
@@ -133,4 +109,4 @@
self = enif_make_pid(env, &pid);
return enif_compare(t->owner, self) == 0;
-}
\ No newline at end of file
+}
diff --git a/c_src/resources.h b/c_src/resources.h
index ead7b1c..8733f87 100644
--- a/c_src/resources.h
+++ b/c_src/resources.h
@@ -20,7 +20,6 @@
extern ErlNifResourceType* ErlFDBFutureRes;
-extern ErlNifResourceType* ErlFDBClusterRes;
extern ErlNifResourceType* ErlFDBDatabaseRes;
extern ErlNifResourceType* ErlFDBTransactionRes;
@@ -31,8 +30,6 @@
ErlFDB_FT_VOID,
ErlFDB_FT_VERSION,
ErlFDB_FT_KEY,
- ErlFDB_FT_CLUSTER,
- ErlFDB_FT_DATABASE,
ErlFDB_FT_VALUE,
ErlFDB_FT_STRING_ARRAY,
ErlFDB_FT_KEYVALUE_ARRAY
@@ -51,12 +48,6 @@
} ErlFDBFuture;
-typedef struct _ErlFDBCluster
-{
- FDBCluster* cluster;
-} ErlFDBCluster;
-
-
typedef struct _ErlFDBDatabase
{
FDBDatabase* database;
@@ -74,7 +65,6 @@
int erlfdb_init_resources(ErlNifEnv* env);
void erlfdb_future_dtor(ErlNifEnv* env, void* obj);
-void erlfdb_cluster_dtor(ErlNifEnv* env, void* obj);
void erlfdb_database_dtor(ErlNifEnv* env, void* obj);
void erlfdb_transaction_dtor(ErlNifEnv* env, void* obj);
@@ -82,4 +72,4 @@
int erlfdb_transaction_is_owner(ErlNifEnv* env, ErlFDBTransaction* t);
-#endif // Included resources.h
\ No newline at end of file
+#endif // Included resources.h
diff --git a/src/erlfdb.app.src b/src/erlfdb.app.src
index 0b9b6c0..4134ae3 100644
--- a/src/erlfdb.app.src
+++ b/src/erlfdb.app.src
@@ -18,7 +18,7 @@
{maintainers, ["Paul J. Davis"]},
{links, [{"GitHub", "https://github.com/cloudant-labs/couchdb-erlfdb"}]},
{env, [
- {api_version, 600},
+ {api_version, 610},
{network_options, []}
]}
-]}.
\ No newline at end of file
+]}.
diff --git a/src/erlfdb.erl b/src/erlfdb.erl
index 4bde103..e6eccbd 100644
--- a/src/erlfdb.erl
+++ b/src/erlfdb.erl
@@ -142,8 +142,7 @@
open(ClusterFile) ->
- Cluster = wait(erlfdb_nif:create_cluster(ClusterFile)),
- wait(erlfdb_nif:cluster_create_database(Cluster, <<"DB">>)).
+ erlfdb_nif:create_database(ClusterFile).
create_transaction(?IS_DB = Db) ->
diff --git a/src/erlfdb_nif.erl b/src/erlfdb_nif.erl
index 546d055..2b73199 100644
--- a/src/erlfdb_nif.erl
+++ b/src/erlfdb_nif.erl
@@ -25,12 +25,7 @@
future_get_error/1,
future_get/1,
- create_cluster/0,
- create_cluster/1,
- cluster_set_option/2,
- cluster_set_option/3,
- cluster_create_database/2,
-
+ create_database/1,
database_set_option/2,
database_set_option/3,
database_create_transaction/1,
@@ -63,12 +58,11 @@
]).
--define(DEFAULT_API_VERSION, 600).
+-define(DEFAULT_API_VERSION, 610).
-type error() :: {erlfdb_error, Code::integer()}.
-type future() :: {erlfdb_future, reference(), reference()}.
--type cluster() :: {erlfdb_cluster, reference()}.
-type database() :: {erlfdb_database, reference()}.
-type transaction() :: {erlfdb_transaction, reference()}.
@@ -79,7 +73,6 @@
{Key::binary(), OrEqual::boolean(), Offset::integer()}.
-type future_result() ::
- cluster() |
database() |
integer() |
binary() |
@@ -91,6 +84,7 @@
local_address |
cluster_file |
trace_enable |
+ trace_format |
trace_roll_size |
trace_max_logs_size |
trace_log_group |
@@ -116,8 +110,6 @@
disable_client_statistics_logging |
enable_slow_task_profiling.
--type cluster_option() :: there_are_no_cluster_options.
-
-type database_option() ::
location_cache_size |
max_watches |
@@ -211,16 +203,11 @@
erlfdb_future_get(Ft).
--spec create_cluster() -> future().
-create_cluster() ->
- create_cluster(<<0>>).
+-spec create_database(ClusterFilePath::binary()) -> database().
+create_database(<<>>) ->
+ create_database(<<0>>);
-
--spec create_cluster(ClusterFilePath::binary()) -> future().
-create_cluster(<<>>) ->
- create_cluster(<<0>>);
-
-create_cluster(ClusterFilePath) ->
+create_database(ClusterFilePath) ->
Size = size(ClusterFilePath) - 1,
% Make sure we pass a NULL-terminated string
% to FoundationDB
@@ -230,26 +217,7 @@
_ ->
<<ClusterFilePath/binary, 0>>
end,
- erlfdb_create_cluster(NifPath).
-
-
--spec cluster_set_option(cluster(), Option::cluster_option()) -> ok.
-cluster_set_option(Cluster, Option) ->
- cluster_set_option(Cluster, Option, <<>>).
-
-
--spec cluster_set_option(
- cluster(),
- Option::cluster_option(),
- Value::option_value()
- ) -> ok.
-cluster_set_option({erlfdb_cluster, Cluster}, Opt, Value) ->
- erlfdb_cluster_set_option(Cluster, Opt, Value).
-
-
--spec cluster_create_database(cluster(), DbName::binary()) -> {ok, database()}.
-cluster_create_database({erlfdb_cluster, Cluster}, DbName) ->
- erlfdb_cluster_create_database(Cluster, DbName).
+ erlfdb_create_database(NifPath).
-spec database_set_option(database(), Option::database_option()) -> ok.
@@ -535,12 +503,8 @@
erlfdb_future_get_error(_Future) -> ?NOT_LOADED.
erlfdb_future_get(_Future) -> ?NOT_LOADED.
-% Clusters
-erlfdb_create_cluster(_ClusterFile) -> ?NOT_LOADED.
-erlfdb_cluster_set_option(_Cluster, _ClusterOption, _Value) -> ?NOT_LOADED.
-erlfdb_cluster_create_database(_Cluster, _DbName) -> ?NOT_LOADED.
-
% Databases
+erlfdb_create_database(_ClusterFilePath) -> ?NOT_LOADED.
erlfdb_database_set_option(_Database, _DatabaseOption, _Value) -> ?NOT_LOADED.
erlfdb_database_create_transaction(_Database) -> ?NOT_LOADED.
@@ -599,4 +563,4 @@
% Misc
erlfdb_get_error(_Error) -> ?NOT_LOADED.
-erlfdb_error_predicate(_Predicate, _Error) -> ?NOT_LOADED.
\ No newline at end of file
+erlfdb_error_predicate(_Predicate, _Error) -> ?NOT_LOADED.