Move snapshot parsing to ShardManager 67/114467/15
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 12 Nov 2024 19:38:02 +0000 (20:38 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 21 Nov 2024 09:59:49 +0000 (10:59 +0100)
commit6a56828d4d3086710f5da805433baf7139604f66
tree03aeab0dbb566716cfeef94b30e93544682c9a13
parent4a93eb63b9939611fef47d10f9f92d8a0b002c4f
Move snapshot parsing to ShardManager

ApplySnapshot is an asynchronous triggered via a message-to-self. This
means that if we are being particularly slow about installing a snapshot
from leader, we could end up parsed user state to be present multiple
times in the pipeline.

Move user state parsing from Follower to ShardManager, so that it
remains in its ByteSource form until we are ready to process it --
thus containing the heap allocation and its application as an atomic
actor work unit.

JIRA: CONTROLLER-2135
Change-Id: I8f09709a8e38bf5a959ef5f02eb8d8377d8399d5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
16 files changed:
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorRecoverySupport.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorSnapshotMessageSupport.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/SnapshotManager.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/SnapshotState.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/base/messages/ApplyLeaderSnapshot.java [new file with mode: 0644]
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/base/messages/ApplySnapshot.java [deleted file]
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/SnapshotTracker.java
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/persisted/Snapshot.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupportTest.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorSnapshotMessageSupportTest.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RecoveryIntegrationTest.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicationAndSnapshotsWithLaggingFollowerIntegrationTest.java
opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/behaviors/FollowerTest.java
opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/ShardTest.java