Beispiel #1
0
func runBenchmarkBackup(b *testing.B, count int) {
	cleanupFn, _, kvDB, dir := setupBackupRestoreDB(b, count)
	defer cleanupFn()

	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		b.StopTimer()
		if err := os.RemoveAll(dir); err != nil {
			b.Fatal(err)
		}
		b.StartTimer()
		if _, err := sql.Backup(context.Background(), *kvDB, dir); err != nil {
			b.Fatal(err)
		}
	}
}
func runBackup(cmd *cobra.Command, args []string) error {
	if len(args) != 1 {
		return errors.New("output basepath argument is required")
	}
	base := args[0]

	ctx := context.Background()
	kvDB, stopper := makeDBClient()
	defer stopper.Stop()

	desc, err := sql.Backup(ctx, *kvDB, base)
	if err != nil {
		return err
	}

	fmt.Printf("Backed up %d ranges to %s\n", len(desc.Ranges), base)
	return nil
}
Beispiel #3
0
func runBenchmarkRestore(b *testing.B, count int) {
	cleanupFn, sqlDB, kvDB, dir := setupBackupRestoreDB(b, count)
	defer cleanupFn()

	if _, err := sql.Backup(context.Background(), *kvDB, dir); err != nil {
		b.Fatal(err)
	}

	b.ResetTimer()
	for i := 0; i < b.N; i++ {
		b.StopTimer()
		if _, err := sqlDB.Exec(`TRUNCATE d.foo`); err != nil {
			b.Fatal(err)
		}
		b.StartTimer()
		if err := sql.Restore(context.Background(), *kvDB, dir, "foo", true); err != nil {
			b.Fatal(err)
		}
	}
}
Beispiel #4
0
func TestBackupRestore(t *testing.T) {
	defer leaktest.AfterTest(t)()

	count := 1000
	cleanupFn, sqlDB, kvDB, dir := setupBackupRestoreDB(t, count)
	defer cleanupFn()

	if _, err := sql.Backup(context.Background(), *kvDB, dir); err != nil {
		t.Fatal(err)
	}

	if _, err := sqlDB.Exec(`TRUNCATE d.foo`); err != nil {
		t.Fatal(err)
	}

	var rowCount int
	if err := sqlDB.QueryRow(`SELECT COUNT(*) FROM d.foo`).Scan(&rowCount); err != nil {
		t.Fatal(err)
	}

	if rowCount != 0 {
		t.Fatalf("expected 0 rows but found %d", rowCount)
	}

	// TODO(dan): Shut down the cluster and restore into a fresh one.
	if err := sql.Restore(context.Background(), *kvDB, dir, "foo", true); err != nil {
		t.Fatal(err)
	}

	if err := sqlDB.QueryRow(`SELECT COUNT(*) FROM d.foo`).Scan(&rowCount); err != nil {
		t.Fatal(err)
	}

	if rowCount != count {
		t.Fatalf("expected %d rows but found %d", count, rowCount)
	}
}