Trim Value File

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
}