Skip to content
Merged
Show file tree
Hide file tree
Changes from 22 commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
91741f2
raftengine: add phase 2 snapshot persistence
bootjp Apr 6, 2026
dd4d38b
raftengine: add etcd transport and migration
bootjp Apr 6, 2026
5c15242
raftengine: simplify entry loading
bootjp Apr 6, 2026
91cb0af
Merge branch 'main' into codex/replace-raft-phase1
bootjp Apr 7, 2026
571a26f
raftengine: tighten etcd startup and snapshots
bootjp Apr 7, 2026
0e19266
raftengine: harden etcd transport and snapshots
bootjp Apr 7, 2026
f6773a9
Merge branch 'main' into codex/replace-raft-phase1
bootjp Apr 7, 2026
02102ee
raftengine: relax applied index race test
bootjp Apr 7, 2026
2c290db
Update internal/raftengine/etcd/persistence.go
bootjp Apr 7, 2026
b9ef9fc
raftengine: fix atomic replace cleanup
bootjp Apr 7, 2026
1f656f5
raftengine: harden async etcd snapshot dispatch
bootjp Apr 8, 2026
8992b79
raftengine: tune snapshot transport spooling
bootjp Apr 8, 2026
17ae5d2
raftengine: preserve applied snapshot payloads
bootjp Apr 8, 2026
6fad15f
raftengine: tighten dispatch and transport locking
bootjp Apr 8, 2026
00f063e
Merge branch 'main' into codex/replace-raft-phase1
bootjp Apr 8, 2026
21dcfe3
raftengine: harden snapshot stream handoff
bootjp Apr 8, 2026
8ded5b2
raftengine: clean up snapshot persistence edges
bootjp Apr 8, 2026
6816736
raftengine: tidy snapshot validation and file replace
bootjp Apr 8, 2026
42bdbc8
raftengine: clarify snapshot byte ownership
bootjp Apr 8, 2026
a63f43e
raftengine: harden etcd engine semantics
bootjp Apr 8, 2026
5dc41f0
Merge branch 'main' into codex/replace-raft-phase1
bootjp Apr 8, 2026
ff2e5db
raftengine: tighten review follow-ups
bootjp Apr 9, 2026
6ca0605
raftengine: fix latest review findings
bootjp Apr 9, 2026
d66b618
raftengine: move snapshot dispatch off raft loop
bootjp Apr 9, 2026
2625b84
raftengine: tighten transport backpressure
bootjp Apr 9, 2026
ddde429
Merge branch 'main' into codex/replace-raft-phase1
bootjp Apr 9, 2026
c1a8031
raftengine: simplify dispatch cancel cleanup
bootjp Apr 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions cmd/etcd-raft-migrate/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package main

import (
"flag"
"fmt"
"log"

etcdraftengine "github.com/bootjp/elastickv/internal/raftengine/etcd"
)

var (
sourceFSM = flag.String("fsm-store", "", "Path to the source FSM Pebble store (for example group dir/fsm.db)")
destDir = flag.String("dest", "", "Destination etcd raft data dir")
peerList = flag.String("peers", "", "Comma-separated raft peers (id=host:port,...)")
)

func main() {
flag.Parse()

peers, err := etcdraftengine.ParsePeers(*peerList)
if err != nil {
log.Fatal(err)
}
stats, err := etcdraftengine.MigrateFSMStore(*sourceFSM, *destDir, peers)
if err != nil {
log.Fatal(err)
}
fmt.Printf("migrated snapshot_bytes=%d peers=%d\n", stats.SnapshotBytes, stats.Peers)
}
54 changes: 50 additions & 4 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -54,23 +54,41 @@ require (
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.19 // indirect
github.com/aws/aws-sdk-go-v2/service/sts v1.41.10 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/cockroachdb/datadriven v1.0.3-0.20250407164829-2945557346d5 // indirect
github.com/cockroachdb/fifo v0.0.0-20240606204812-0bbfbd93a7ce // indirect
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect
github.com/cockroachdb/redact v1.1.5 // indirect
github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect
github.com/coreos/go-semver v0.3.1 // indirect
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/fatih/color v1.15.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang-jwt/jwt/v5 v5.2.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.5-0.20231225225746-43d5d4cd4e0e // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.1 // indirect
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-metrics v0.5.4 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/golang-lru v1.0.2 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/jonboulle/clockwork v0.5.0 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
Expand All @@ -82,15 +100,43 @@ require (
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.66.1 // indirect
github.com/prometheus/procfs v0.16.1 // indirect
github.com/rogpeppe/go-internal v1.13.1 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/soheilhy/cmux v0.1.5 // indirect
github.com/spf13/cobra v1.10.2 // indirect
github.com/spf13/pflag v1.0.10 // indirect
github.com/tidwall/btree v1.1.0 // indirect
github.com/tidwall/match v1.1.1 // indirect
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 // indirect
go.etcd.io/etcd/api/v3 v3.6.10 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.6.10 // indirect
go.etcd.io/etcd/client/v3 v3.6.10 // indirect
go.etcd.io/etcd/pkg/v3 v3.6.10 // indirect
go.etcd.io/etcd/server/v3 v3.6.10 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 // indirect
go.opentelemetry.io/otel v1.40.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 // indirect
go.opentelemetry.io/otel/metric v1.40.0 // indirect
go.opentelemetry.io/otel/sdk v1.40.0 // indirect
go.opentelemetry.io/otel/trace v1.40.0 // indirect
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
golang.org/x/crypto v0.48.0 // indirect
golang.org/x/exp v0.0.0-20230626212559-97b1e661b5df // indirect
golang.org/x/net v0.48.0 // indirect
golang.org/x/text v0.32.0 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect
golang.org/x/net v0.51.0 // indirect
golang.org/x/text v0.35.0 // indirect
golang.org/x/time v0.9.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260406154035-8fb7ec149431 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260401024825-9d38bb4040a9 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)
Loading
Loading