diff --git a/pkg/settings/cluster/cockroach_versions.go b/pkg/settings/cluster/cockroach_versions.go index a781e655c6e6..008e9e5bce21 100644 --- a/pkg/settings/cluster/cockroach_versions.go +++ b/pkg/settings/cluster/cockroach_versions.go @@ -66,6 +66,7 @@ const ( VersionDirectImport VersionSideloadedStorageNoReplicaID // see versionsSingleton for details VersionPushTxnToInclusive + VersionSnapshotsWithoutLog Version19_1 // Add new versions here (step one of two). @@ -445,6 +446,10 @@ var versionsSingleton = keyedVersions([]keyedVersion{ Version: roachpb.Version{Major: 2, Minor: 1, Unstable: 10}, }, { + // VersionSnapshotsWithoutLog is https://github.com/cockroachdb/cockroach/pull/36714. + Key: VersionSnapshotsWithoutLog, + Version: roachpb.Version{Major: 2, Minor: 1, Unstable: 11}, + }, { // Version19_1 is CockroachDB v19.1. It's used for all v19.1.x patch releases. Key: Version19_1, Version: roachpb.Version{Major: 19, Minor: 1}, diff --git a/pkg/storage/replica_command.go b/pkg/storage/replica_command.go index c5e17476e1de..824365f15b63 100644 --- a/pkg/storage/replica_command.go +++ b/pkg/storage/replica_command.go @@ -27,6 +27,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/keys" "github.com/cockroachdb/cockroach/pkg/roachpb" "github.com/cockroachdb/cockroach/pkg/rpc/nodedialer" + "github.com/cockroachdb/cockroach/pkg/settings/cluster" "github.com/cockroachdb/cockroach/pkg/storage/engine" "github.com/cockroachdb/cockroach/pkg/storage/storagebase" "github.com/cockroachdb/cockroach/pkg/storage/storagepb" @@ -903,7 +904,11 @@ func (r *Replica) sendSnapshot( return errors.Wrap(err, "loading legacy truncated state") } - if !usesReplicatedTruncatedState && snap.State.TruncatedState.Index < snap.State.RaftAppliedIndex { + canAvoidSendingLog := !usesReplicatedTruncatedState && + snap.State.TruncatedState.Index < snap.State.RaftAppliedIndex && + r.store.ClusterSettings().Version.IsActive(cluster.VersionSnapshotsWithoutLog) + + if canAvoidSendingLog { // If we're not using a legacy (replicated) truncated state, we avoid // sending the (past) Raft log in the snapshot in the first place and // send only those entries that are actually useful to the follower.