How to trim value file of badger
after deleting (almost) all entries?
package main
import (
"context"
"fmt"
"log"
"github.com/dgraph-io/dgo/v2"
"github.com/dgraph-io/dgo/v2/protos/api"
"google.golang.org/grpc"
)
func main() {
conn, err := grpc.Dial("localhost:9080", grpc.WithInsecure())
if err != nil {
log.Fatal(err)
}
defer conn.Close()
dg := dgo.NewDgraphClient(api.NewDgraphClient(conn))
// Step 1: Delete almost all entries (example deletion)
deleteEntries(dg)
// Step 2: Run garbage collection on the value log
if err := runValueLogGC(dg); err != nil {
log.Fatalf("Failed to run value log GC: %v", err)
}
fmt.Println("Value log GC completed.")
}
func deleteEntries(dg *dgo.Dgraph) {
ctx := context.Background()
txn := dg.NewTxn()
defer txn.Discard(ctx)
// Example: Delete all nodes with a specific predicate
query := `
mutation {
delete {
<someUID> * *
}
}
`
_, err := txn.Mutate(ctx, &api.Mutation{
DelNquads: []byte(query),
CommitNow: true,
})
if err != nil {
log.Fatalf("Error deleting entries: %v", err)
}
}
func runValueLogGC(dg *dgo.Dgraph) error {
ctx := context.Background()
// This operation requires admin permissions, ensure you have those.
response, err := dg.Alter(ctx, &api.Operation{
RunValueLogGC: true,
})
if err != nil {
return fmt.Errorf("failed to run value log GC: %v", err)
}
if response.Error != nil {
return fmt.Errorf("GC operation returned an error: %s", response.Error)
}
return nil
}