@@ -74,7 +74,7 @@ static ErlNifFunc nif_funcs[] =
74
74
75
75
{" async_snapshot" , 2 , erocksdb::async_snapshot},
76
76
{" async_release_snapshot" , 2 , erocksdb::async_release_snapshot},
77
-
77
+ { " async_checkpoint " , 3 , erocksdb::async_checkpoint},
78
78
79
79
{" async_iterator" , 3 , erocksdb::async_iterator},
80
80
{" async_iterator" , 4 , erocksdb::async_iterator},
@@ -1112,11 +1112,8 @@ async_iterator(
1112
1112
1113
1113
// Parse out the read options
1114
1114
rocksdb::ReadOptions *opts = new rocksdb::ReadOptions;
1115
-
1116
- if (NULL !=snapshot)
1117
- opts->snapshot = snapshot;
1118
-
1119
1115
fold (env, options_ref, parse_read_option, *opts);
1116
+ opts->snapshot = snapshot;
1120
1117
1121
1118
erocksdb::WorkTask *work_item = new erocksdb::IterTask (env, caller_ref,
1122
1119
db_ptr.get (), keys_only, opts,
@@ -1289,6 +1286,52 @@ async_iterator_move(
1289
1286
} // async_iter_move
1290
1287
1291
1288
1289
+ ERL_NIF_TERM
1290
+ async_checkpoint (
1291
+ ErlNifEnv* env,
1292
+ int argc,
1293
+ const ERL_NIF_TERM argv[])
1294
+ {
1295
+ const ERL_NIF_TERM& caller_ref = argv[0 ];
1296
+ const ERL_NIF_TERM& handle_ref = argv[1 ];
1297
+
1298
+ char path[4096 ];
1299
+
1300
+
1301
+ ReferencePtr<DbObject> db_ptr;
1302
+
1303
+ db_ptr.assign (DbObject::RetrieveDbObject (env, handle_ref));
1304
+
1305
+ if (NULL ==db_ptr.get ())
1306
+ {
1307
+ return enif_make_badarg (env);
1308
+ }
1309
+
1310
+ // is this even possible?
1311
+ if (NULL == db_ptr->m_Db )
1312
+ return send_reply (env, caller_ref, error_einval (env));
1313
+
1314
+ if (!enif_get_string (env, argv[2 ], path, sizeof (path), ERL_NIF_LATIN1))
1315
+ {
1316
+ return enif_make_badarg (env);
1317
+ }
1318
+
1319
+ erocksdb_priv_data& priv = *static_cast <erocksdb_priv_data *>(enif_priv_data (env));
1320
+
1321
+ erocksdb::WorkTask *work_item = new erocksdb::CheckpointTask (env, caller_ref, db_ptr.get (), path);
1322
+
1323
+ if (false == priv.thread_pool .submit (work_item))
1324
+ {
1325
+ delete work_item;
1326
+ return send_reply (env, caller_ref,
1327
+ enif_make_tuple2 (env, erocksdb::ATOM_ERROR, caller_ref));
1328
+ }
1329
+
1330
+ return erocksdb::ATOM_OK;
1331
+
1332
+ } // async_checkpoint
1333
+
1334
+
1292
1335
} // namespace erocksdb
1293
1336
1294
1337
0 commit comments