Skip to content

Commit

Permalink
Backport of Fix snapshot creation issue. into release/1.16.x (#18789)
Browse files Browse the repository at this point in the history
backport of commit fe58132

Co-authored-by: Derek Menteer <derek.menteer@hashicorp.com>
  • Loading branch information
hc-github-team-consul-core and hashi-derek committed Sep 13, 2023
1 parent 54e9680 commit d0af8cf
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 12 deletions.
22 changes: 12 additions & 10 deletions agent/consul/fsm/snapshot.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ import (
raftstorage "github.com/hashicorp/consul/internal/storage/raft"
)

var cePersister, entPersister persister

var SnapshotSummaries = []prometheus.SummaryDefinition{
{
Name: []string{"fsm", "persist"},
Expand All @@ -44,15 +46,6 @@ type SnapshotHeader struct {
// persister is a function used to help snapshot the FSM state.
type persister func(s *snapshot, sink raft.SnapshotSink, encoder *codec.Encoder) error

// persisters is a list of snapshot functions.
var persisters []persister

// registerPersister adds a new helper. This should be called at package
// init() time.
func registerPersister(fn persister) {
persisters = append(persisters, fn)
}

// restorer is a function used to load back a snapshot of the FSM state.
type restorer func(header *SnapshotHeader, restore *state.Restore, decoder *codec.Decoder) error

Expand Down Expand Up @@ -86,7 +79,16 @@ func (s *snapshot) Persist(sink raft.SnapshotSink) error {
}

// Run all the persisters to write the FSM state.
for _, fn := range persisters {
for _, fn := range []persister{
// The enterprise version MUST be executed first, otherwise the snapshot will
// not properly function during restore due to missing tenancy objects.
entPersister,
cePersister,
} {
// Check for nil, since the enterprise version may not exist in CE.
if fn == nil {
continue
}
if err := fn(s, sink, encoder); err != nil {
sink.Cancel()
return err
Expand Down
3 changes: 1 addition & 2 deletions agent/consul/fsm/snapshot_ce.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@ import (
)

func init() {
registerPersister(persistCE)

cePersister = persistCE
registerRestorer(structs.RegisterRequestType, restoreRegistration)
registerRestorer(structs.KVSRequestType, restoreKV)
registerRestorer(structs.TombstoneRequestType, restoreTombstone)
Expand Down

0 comments on commit d0af8cf

Please sign in to comment.