diff --git a/cmd/experimental/migrate/posix/main.go b/cmd/experimental/migrate/posix/main.go index 3e13bc126..62dfdd7e2 100644 --- a/cmd/experimental/migrate/posix/main.go +++ b/cmd/experimental/migrate/posix/main.go @@ -22,21 +22,24 @@ import ( "flag" "net/url" "os" + "path/filepath" "strconv" "strings" "log/slog" "github.com/transparency-dev/tessera" + "github.com/transparency-dev/tessera/api/layout" "github.com/transparency-dev/tessera/client" "github.com/transparency-dev/tessera/storage/posix" ) var ( - storageDir = flag.String("storage_dir", "", "Root directory to store log data.") - sourceURL = flag.String("source_url", "", "Base URL for the source log.") - numWorkers = flag.Uint("num_workers", 30, "Number of migration worker goroutines.") - slogLevel = flag.Int("slog_level", 0, "The cut-off threshold for structured logging. Default is 0 (INFO). See https://pkg.go.dev/log/slog#Level for other levels.") + storageDir = flag.String("storage_dir", "", "Root directory to store log data.") + sourceURL = flag.String("source_url", "", "Base URL for the source log.") + numWorkers = flag.Uint("num_workers", 30, "Number of migration worker goroutines.") + slogLevel = flag.Int("slog_level", 0, "The cut-off threshold for structured logging. Default is 0 (INFO). See https://pkg.go.dev/log/slog#Level for other levels.") + saveCheckpoint = flag.Bool("save_checkpoint", false, "Set to true to write the checkpoint used during migration. Useful for mirrors.") ) func main() { @@ -87,4 +90,11 @@ func main() { slog.ErrorContext(ctx, "Migrate failed", slog.Any("error", err)) os.Exit(1) } + + if *saveCheckpoint { + if err := os.WriteFile(filepath.Join(*storageDir, layout.CheckpointPath), sourceCP, 0o644); err != nil { + slog.ErrorContext(ctx, "Failed to write checkpoint", slog.Any("error", err)) + os.Exit(1) + } + } }