diff --git a/db/c.cc b/db/c.cc index 55cfe4d9349e6cb32243eca9a9c9a078124bcb73..f1868a0022bbeb25ae85b02472a61797143ddcd4 100644 --- a/db/c.cc +++ b/db/c.cc @@ -446,6 +446,12 @@ void rocksdb_backup_engine_create_new_backup(rocksdb_backup_engine_t* be, SaveError(errptr, be->rep->CreateNewBackup(db->rep)); } +void rocksdb_backup_engine_purge_old_backups(rocksdb_backup_engine_t* be, + uint32_t num_backups_to_keep, + char** errptr) { + SaveError(errptr, be->rep->PurgeOldBackups(num_backups_to_keep)); +} + rocksdb_restore_options_t* rocksdb_restore_options_create() { return new rocksdb_restore_options_t; } diff --git a/db/c_test.c b/db/c_test.c index fcc7cc4ba508b71a18061044d90eec40131244f7..e8b031114ccbacbb289a4f98f3759ce814ada015 100644 --- a/db/c_test.c +++ b/db/c_test.c @@ -365,6 +365,24 @@ int main(int argc, char** argv) { rocksdb_backup_engine_create_new_backup(be, db, &err); CheckNoError(err); + // need a change to trigger a new backup + rocksdb_delete(db, woptions, "does-not-exist", 14, &err); + CheckNoError(err); + + rocksdb_backup_engine_create_new_backup(be, db, &err); + CheckNoError(err); + + const rocksdb_backup_engine_info_t* bei = rocksdb_backup_engine_get_backup_info(be); + CheckCondition(rocksdb_backup_engine_info_count(bei) > 1); + rocksdb_backup_engine_info_destroy(bei); + + rocksdb_backup_engine_purge_old_backups(be, 1, &err); + CheckNoError(err); + + bei = rocksdb_backup_engine_get_backup_info(be); + CheckCondition(rocksdb_backup_engine_info_count(bei) == 1); + rocksdb_backup_engine_info_destroy(bei); + rocksdb_delete(db, woptions, "foo", 3, &err); CheckNoError(err); diff --git a/include/rocksdb/c.h b/include/rocksdb/c.h index a720a8cb147e9f79bb8b94d82d8c27946b3c1188..8bd4624640105197cdf6bab8bc5f3ba3a89d0a0f 100644 --- a/include/rocksdb/c.h +++ b/include/rocksdb/c.h @@ -121,6 +121,9 @@ extern ROCKSDB_LIBRARY_API rocksdb_backup_engine_t* rocksdb_backup_engine_open( extern ROCKSDB_LIBRARY_API void rocksdb_backup_engine_create_new_backup( rocksdb_backup_engine_t* be, rocksdb_t* db, char** errptr); +extern ROCKSDB_LIBRARY_API void rocksdb_backup_engine_purge_old_backups( + rocksdb_backup_engine_t* be, uint32_t num_backups_to_keep, char** errptr); + extern ROCKSDB_LIBRARY_API rocksdb_restore_options_t* rocksdb_restore_options_create(); extern ROCKSDB_LIBRARY_API void rocksdb_restore_options_destroy(