|
|
@ -1,3 +1,10 @@ |
|
|
|
/* |
|
|
|
cutWALUntil is a small utility for cutting a WAL until the given height |
|
|
|
(inclusively). Note it does not include last cs.EndHeightMessage. |
|
|
|
|
|
|
|
Usage: |
|
|
|
cutWALUntil <path-to-wal> height-to-stop <output-wal> |
|
|
|
*/ |
|
|
|
package main |
|
|
|
|
|
|
|
import ( |
|
|
@ -10,27 +17,32 @@ import ( |
|
|
|
) |
|
|
|
|
|
|
|
func main() { |
|
|
|
if len(os.Args) < 4 { |
|
|
|
fmt.Println("3 arguments required: <path-to-wal> height-to-stop <output-wal>") |
|
|
|
os.Exit(1) |
|
|
|
} |
|
|
|
|
|
|
|
var heightToStop uint64 |
|
|
|
var err error |
|
|
|
if heightToStop, err = strconv.ParseUint(os.Args[2], 10, 64); err != nil { |
|
|
|
panic(fmt.Errorf("failed to parse height: %v (format: cutWALUntil in heightToStop out)", err)) |
|
|
|
panic(fmt.Errorf("failed to parse height: %v", err)) |
|
|
|
} |
|
|
|
|
|
|
|
in, err := os.Open(os.Args[1]) |
|
|
|
if err != nil { |
|
|
|
panic(fmt.Errorf("failed to open WAL file: %v (format: cutWALUntil in heightToStop out)", err)) |
|
|
|
panic(fmt.Errorf("failed to open input WAL file: %v", err)) |
|
|
|
} |
|
|
|
defer in.Close() |
|
|
|
|
|
|
|
out, err := os.Create(os.Args[3]) |
|
|
|
if err != nil { |
|
|
|
panic(fmt.Errorf("failed to open WAL file: %v (format: cutWALUntil in heightToStop out)", err)) |
|
|
|
panic(fmt.Errorf("failed to open output WAL file: %v", err)) |
|
|
|
} |
|
|
|
defer out.Close() |
|
|
|
|
|
|
|
enc := cs.NewWALEncoder(out) |
|
|
|
|
|
|
|
dec := cs.NewWALDecoder(in) |
|
|
|
|
|
|
|
for { |
|
|
|
msg, err := dec.Decode() |
|
|
|
if err == io.EOF { |
|
|
|