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

80 lines
2.0 KiB
Go

/*
* SPDX-FileCopyrightText: © 2017-2025 Istari Digital, Inc.
* SPDX-License-Identifier: Apache-2.0
*/
package cmd
import (
"errors"
"fmt"
"math"
"github.com/spf13/cobra"
"github.com/luxfi/zapdb"
"github.com/luxfi/zapdb/options"
)
var flattenCmd = &cobra.Command{
Use: "flatten",
Short: "Flatten the LSM tree.",
Long: `
This command would compact all the LSM tables into one level.
`,
RunE: flatten,
}
var fo = struct {
keyPath string
numWorkers int
numVersions int
compressionType uint32
}{}
func init() {
RootCmd.AddCommand(flattenCmd)
flattenCmd.Flags().IntVarP(&fo.numWorkers, "num-workers", "w", 1,
"Number of concurrent compactors to run. More compactors would use more"+
" server resources to potentially achieve faster compactions.")
flattenCmd.Flags().IntVarP(&fo.numVersions, "num_versions", "", 0,
"Option to configure the maximum number of versions per key. "+
"Values <= 0 will be considered to have the max number of versions.")
flattenCmd.Flags().StringVar(&fo.keyPath, "encryption-key-file", "",
"Path of the encryption key file.")
flattenCmd.Flags().Uint32VarP(&fo.compressionType, "compression", "", 1,
"Option to configure the compression type in output DB. "+
"0 to disable, 1 for Snappy, and 2 for ZSTD.")
}
func flatten(cmd *cobra.Command, args []string) error {
if fo.numVersions <= 0 {
// Keep all versions.
fo.numVersions = math.MaxInt32
}
encKey, err := getKey(fo.keyPath)
if err != nil {
return err
}
if fo.compressionType > 2 {
return errors.New(
"compression value must be one of 0 (disabled), 1 (Snappy), or 2 (ZSTD)")
}
opt := zapdb.DefaultOptions(sstDir).
WithValueDir(vlogDir).
WithNumVersionsToKeep(fo.numVersions).
WithNumCompactors(0).
WithBlockCacheSize(100 << 20).
WithIndexCacheSize(200 << 20).
WithCompression(options.CompressionType(fo.compressionType)).
WithEncryptionKey(encKey)
fmt.Printf("Opening badger with options = %+v\n", opt)
db, err := zapdb.Open(opt)
if err != nil {
return err
}
defer db.Close()
return db.Flatten(fo.numWorkers)
}