From a1e313dd9526957c8989c40e4237adf3e291a499 Mon Sep 17 00:00:00 2001 From: Mohak Shah Date: Fri, 4 Oct 2019 18:04:40 +0530 Subject: [PATCH 1/2] Add CreateNewBackupFlush alongside CreateNewBackup CreateNewBackupFlush, when flush is set to true, flushes the WAL before creating the backup. When flush is set to false, it acts exactly like CreateNewBackup and backups the WAL in a separate, non-atomic operation. --- backup.go | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/backup.go b/backup.go index 4b37379c..8de6c698 100644 --- a/backup.go +++ b/backup.go @@ -104,11 +104,12 @@ func (b *BackupEngine) UnsafeGetBackupEngine() unsafe.Pointer { return unsafe.Pointer(b.c) } -// CreateNewBackup takes a new backup from db. -func (b *BackupEngine) CreateNewBackup(db *DB) error { +// CreateNewBackupFlush takes a new backup from db. If flush is set to true, +// it flushes the WAL before taking the backup. +func (b *BackupEngine) CreateNewBackupFlush(db *DB, flush bool) error { var cErr *C.char - C.rocksdb_backup_engine_create_new_backup(b.c, db.c, &cErr) + C.rocksdb_backup_engine_create_new_backup_flush(b.c, db.c, boolToChar(flush), &cErr) if cErr != nil { defer C.rocksdb_free(unsafe.Pointer(cErr)) return errors.New(C.GoString(cErr)) @@ -117,6 +118,11 @@ func (b *BackupEngine) CreateNewBackup(db *DB) error { return nil } +// CreateNewBackup takes a new backup from db. +func (b *BackupEngine) CreateNewBackup(db *DB) error { + return b.CreateNewBackupFlush(db, false) +} + // GetInfo gets an object that gives information about // the backups that have already been taken func (b *BackupEngine) GetInfo() *BackupEngineInfo { From 1c5d8be374bdc1684bb180ed41602df7fa8ecae3 Mon Sep 17 00:00:00 2001 From: Mohak Shah Date: Mon, 7 Oct 2019 15:40:24 +0530 Subject: [PATCH 2/2] Add the method PurgeOldBackups to BackupEngine --- backup.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/backup.go b/backup.go index 8de6c698..87621dd9 100644 --- a/backup.go +++ b/backup.go @@ -150,6 +150,17 @@ func (b *BackupEngine) RestoreDBFromLatestBackup(dbDir, walDir string, ro *Resto return nil } +// PurgeOldBackups deletes all backups older than the latest 'n' backups +func (b *BackupEngine) PurgeOldBackups(n uint32) error { + var cErr *C.char + C.rocksdb_backup_engine_purge_old_backups(b.c, C.uint32_t(n), &cErr) + if cErr != nil { + defer C.rocksdb_free(unsafe.Pointer(cErr)) + return errors.New(C.GoString(cErr)) + } + return nil +} + // Close close the backup engine and cleans up state // The backups already taken remain on storage. func (b *BackupEngine) Close() {