Files
zeekayandHanzo Dev fe8d85d663 rename package badger -> zapdb
The module has been github.com/luxfi/zapdb for a while, but the package inside
it still declared itself badger, so every consumer had to write

	zapdb "github.com/luxfi/zapdb" // package badger

and the alias existed only to paper over the mismatch. 56 root files and the
134 qualified references inside the repo now say zapdb.

Backward compatible in both directions: an existing consumer with the alias
keeps compiling (the alias is now merely redundant), and one without it starts
compiling instead of failing on an undefined zapdb.

Directory badger/ and its cmd package are untouched — that is the CLI, and its
binary is named badger.

Build and vet clean; suite green except TestZRestore, which wants a /tmp/zb/src
benchmark fixture and fails identically without this change.

Co-authored-by: Hanzo Dev <[email protected]>
2026-07-27 14:24:18 -07:00

81 lines
1.6 KiB
Go

/*
* SPDX-FileCopyrightText: © 2017-2025 Istari Digital, Inc.
* SPDX-License-Identifier: Apache-2.0
*/
package cmd
import (
"bufio"
"math"
"os"
"github.com/spf13/cobra"
"github.com/luxfi/zapdb"
)
var bo = struct {
backupFile string
numVersions int
}{}
// backupCmd represents the backup command
var backupCmd = &cobra.Command{
Use: "backup",
Short: "Backup Badger database.",
Long: `Backup Badger database to a file in a version-agnostic manner.
Iterates over each key-value pair, encodes it along with its metadata and
version in protocol buffers and writes them to a file. This file can later be
used by the restore command to create an identical copy of the
database.`,
RunE: doBackup,
}
func init() {
RootCmd.AddCommand(backupCmd)
backupCmd.Flags().StringVarP(&bo.backupFile, "backup-file", "f",
"badger.bak", "File to backup to")
backupCmd.Flags().IntVarP(&bo.numVersions, "num-versions", "n",
0, "Number of versions to keep. A value <= 0 means keep all versions.")
}
func doBackup(cmd *cobra.Command, args []string) error {
opt := zapdb.DefaultOptions(sstDir).
WithValueDir(vlogDir).
WithNumVersionsToKeep(math.MaxInt32)
if bo.numVersions > 0 {
opt.NumVersionsToKeep = bo.numVersions
}
// Open DB
db, err := zapdb.Open(opt)
if err != nil {
return err
}
defer db.Close()
// Create File
f, err := os.Create(bo.backupFile)
if err != nil {
return err
}
bw := bufio.NewWriterSize(f, 64<<20)
if _, err = db.Backup(bw, 0); err != nil {
return err
}
if err = bw.Flush(); err != nil {
return err
}
if err = f.Sync(); err != nil {
return err
}
return f.Close()
}