Skip to content

Commit

Permalink
Merge pull request #7052 from dolthub/aaron/fix-splunk-for-stale-mani…
Browse files Browse the repository at this point in the history
…fest-with-chunk-journal

[no-release-notes] go/store/cmd/noms: Change root to use config.(*Resolver).GetDatabase.
  • Loading branch information
reltuk authored Nov 27, 2023
2 parents 00a919d + 4a1c1e6 commit 597ad0e
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 94 deletions.
96 changes: 6 additions & 90 deletions go/store/cmd/noms/noms_root.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,21 +25,20 @@ import (
"context"
"fmt"
"os"
"strings"

flag "github.com/juju/gnuflag"

"github.com/dolthub/dolt/go/store/cmd/noms/util"
"github.com/dolthub/dolt/go/store/config"
"github.com/dolthub/dolt/go/store/d"
"github.com/dolthub/dolt/go/store/hash"
"github.com/dolthub/dolt/go/store/datas"
"github.com/dolthub/dolt/go/store/types"
)

var nomsRoot = &util.Command{
Run: runRoot,
UsageLine: "root <db-spec>",
Short: "Get or set the current root hash of the entire database",
Short: "Get the current root hash of the entire database",
Long: "See Spelling Objects at https://github.com/attic-labs/noms/blob/master/doc/spelling.md for details on the database argument.",
Flags: setupRootFlags,
Nargs: 1,
Expand All @@ -49,7 +48,6 @@ var updateRoot = ""

func setupRootFlags() *flag.FlagSet {
flagSet := flag.NewFlagSet("root", flag.ExitOnError)
flagSet.StringVar(&updateRoot, "update", "", "Replaces the entire database with the one with the given hash")
return flagSet
}

Expand All @@ -60,70 +58,16 @@ func runRoot(ctx context.Context, args []string) int {
}

cfg := config.NewResolver()
cs, err := cfg.GetChunkStore(ctx, args[0])
util.CheckErrorNoUsage(err)
defer cs.Close()

currRoot, err := cs.Root(ctx)

if err != nil {
fmt.Fprintln(os.Stderr, "error getting root.", err)
return 1
}

if updateRoot == "" {
fmt.Println(currRoot)
return 0
}

if updateRoot[0] == '#' {
updateRoot = updateRoot[1:]
}
h, ok := hash.MaybeParse(updateRoot)
if !ok {
fmt.Fprintf(os.Stderr, "Invalid hash: %s\n", h.String())
return 1
}

// If BUG 3407 is correct, we might be able to just take cs and make a Database directly from that.
db, vrw, _, err := cfg.GetDatabase(ctx, args[0])
db, _, _, err := cfg.GetDatabase(ctx, args[0])
util.CheckErrorNoUsage(err)
defer db.Close()
v, err := vrw.ReadValue(ctx, h)
util.CheckErrorNoUsage(err)
if !validate(ctx, vrw.Format(), v) {
return 1
}

fmt.Println(`WARNING
This operation replaces the entire database with the instance having the given
hash. The old database becomes eligible for GC.
ANYTHING NOT SAVED WILL BE LOST
Continue?`)

var input string
n, err := fmt.Scanln(&input)
util.CheckErrorNoUsage(err)
if n != 1 || strings.ToLower(input) != "y" {
return 0
}

ok, err = cs.Commit(ctx, h, currRoot)

currRoot, err := datas.ChunkStoreFromDatabase(db).Root(ctx)
if err != nil {
fmt.Fprintf(os.Stderr, "commit error: %s", err.Error())
return 1
}

if !ok {
fmt.Fprintln(os.Stderr, "Optimistic concurrency failure")
fmt.Fprintln(os.Stderr, "error getting root.", err)
return 1
}

fmt.Printf("Success. Previous root was: %s\n", currRoot)
fmt.Println(currRoot)
return 0
}

Expand All @@ -141,31 +85,3 @@ func mustValue(v types.Value, err error) types.Value {
d.PanicIfError(err)
return v
}

func mustGetValue(v types.Value, ok bool, err error) types.Value {
d.PanicIfError(err)
d.PanicIfFalse(ok)
return v
}

func mustSet(s types.Set, err error) types.Set {
d.PanicIfError(err)
return s
}

func mustList(l types.List, err error) types.List {
d.PanicIfError(err)
return l
}

func validate(ctx context.Context, nbf *types.NomsBinFormat, r types.Value) bool {
rootType := mustType(types.MakeMapType(types.PrimitiveTypeMap[types.StringKind], mustType(types.MakeRefType(types.PrimitiveTypeMap[types.ValueKind]))))
if isSub, err := types.IsValueSubtypeOf(nbf, r, rootType); err != nil {
panic(err)
} else if !isSub {
fmt.Fprintf(os.Stderr, "Root of database must be %s, but you specified: %s\n", mustString(rootType.Describe(ctx)), mustString(mustType(types.TypeOf(r)).Describe(ctx)))
return false
}

return true
}
7 changes: 3 additions & 4 deletions go/store/cmd/noms/splunk.pl
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,9 @@

print "Welcome to the splunk shell for exploring dolt repository storage.\n";

my $manifest = `noms manifest $noms_dir`;
my $root = get_root($manifest);

my $message = "Currently examining root.\nUse numeric labels to navigate the tree\n.. to back up a level, / to return to root.\nType quit or exit to exit.\n";
my $root = `noms root $noms_dir`;

my $message = "Currently examining root.\nUse numeric labels to navigate the tree\n.. to back up a level, / to return reload root and return there.\nType quit or exit to exit.\n";
my $hash = $root;
my @stack = ($root);

Expand Down Expand Up @@ -46,6 +44,7 @@
}

if ($input eq "/") {
$root = `noms root $noms_dir`;
$hash = $root;
@stack = ($root);
next;
Expand Down

0 comments on commit 597ad0e

Please sign in to comment.