Robert Varga [Wed, 19 Mar 2025 10:46:54 +0000 (11:46 +0100)]
Clean up deserializeSnapshot() implementations
Eliminate unneeded casting.
Change-Id: I16fef02797d196c5c44fef5548fff4685274feec
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 19 Mar 2025 10:25:52 +0000 (11:25 +0100)]
Eliminate SnapshotManager.createSnapshotProcedure
The Consumer indirection here is not nice: just acknowledge we are
talking to RaftActorSnapshotCohort and eliminate the indirection.
JIRA: CONTROLLER-2134
Change-Id: Ia1c364c66d30d27ec1fe88e023171eefbdcc84ff
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 18 Mar 2025 15:19:54 +0000 (16:19 +0100)]
Make GetSnapshotReply a record
This is a very simple class, use a record for its function, eliminating
an unneeded suppression in the process of doing so.
Change-Id: Ibfe412bfa5a26fac5db68b583499d2727d626c69
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 18 Mar 2025 15:23:26 +0000 (16:23 +0100)]
Update SpotBugs issue reference
SpotBugs has closed the reported issue, but the problem is still there.
Update the pointer to the new issue.
Change-Id: Ibed7fe90c09d98c9b29095202bb3a11ed69de175
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 18 Mar 2025 14:44:06 +0000 (15:44 +0100)]
Clean up documentation
We have a tad of mess with method documentation. Turn the comment into a
proper javadoc block and update references.
JIRA: CONTROLLER-2134
Change-Id: I445123e801aa1b4e295a93a7487528bdfb429dfa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 18 Mar 2025 04:03:08 +0000 (05:03 +0100)]
Clean up AbstracMXBean
Make most methods final and enforce non-null invariants.
Change-Id: Ic3ca4bb76b2e70eb9fdf898ae970edc52dea2899
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 18 Mar 2025 04:20:53 +0000 (05:20 +0100)]
Modernize OwnerSupervisor
Use scala.jdk.javaapi.CollectionConverters, as recommended by
documentation. Also use local variable type inference and instanceof
patterns to simplify code.
Change-Id: I2751b688f2fed5484ff7297ccd94451bf35effce
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 18 Mar 2025 03:53:21 +0000 (04:53 +0100)]
Modernize sal-remoterpc-connector
Use java.time.Duration-based timers, which pushes us towards
CompletionStage -- reducing our exposure to Scala constructs.
Change-Id: I977d43bba5bdadcc8b713930482f0b2a3a58034c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 23:46:12 +0000 (00:46 +0100)]
More FiniteDuration conversions
Use java.time.Duration instead, converting to FiniteDuration where
needed.
Change-Id: Ifb8d61dbde0d450bd30c5786a56f22e1dfa59631
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 23:56:13 +0000 (00:56 +0100)]
Remove ActorUtils.getTransactionCommitOperationTimeout()
This method is no longer used, remove it. Also clean up ActorUtilsTest a
bit.
Change-Id: I859aa142c244208f4ca7727ea26dc35906a65f51
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 23:24:42 +0000 (00:24 +0100)]
Reduce use of FiniteDuration in cds-access-client
Use java.time.Duration instead.
Change-Id: I34ad2c608c1a24e712058ed65c447ac8a5f69728
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 17:39:06 +0000 (18:39 +0100)]
Use Duration instead for FiniteDuration
Pekko provides java.time.Duration-based timers, use those instead of
Scala's FiniteDuration.
Change-Id: I0aa1c112a2b0124df2eca91781317658ed485b39
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 13:53:41 +0000 (14:53 +0100)]
Remove RemoteOpsProviderConfig.newInstance()
Just use the builder, as we are no longer tied to Blueprint.
Change-Id: I1da0f3d74a5d3f3ddd3f4b2d0b27e2c83f4a9235
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 13:41:25 +0000 (14:41 +0100)]
Use an instanceof pattern
Remove explicit cast in favor of an instanceof pattern.
Change-Id: Iaedfbf3aa333692b99e30c7106ce6da0d9f1b546
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 13:17:08 +0000 (14:17 +0100)]
Workaround Follower SpotBugs suppression
MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR is being flagged here because
electionDuration() is non-final for Candidate override.
Ditch the suppression by invoking super.electionDuration(), which makes
it clear the call cannot be overridden.
Change-Id: Ia791129648b199dc86e662623ec8ceacf98d3fbd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 12:33:50 +0000 (13:33 +0100)]
Improve possiblyUpdateCommitIndex()
The ReplicatedLog is invariant during execution of this method, hence we
can just access it once. Also clean up logic to reduce if/else blocks,
making the logic more linear.
JIRA: CONTROLLER-2137
Change-Id: I336f687a254a18c38c29060efb827df6c2888d6a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 11:51:48 +0000 (12:51 +0100)]
Hide ReplicateLogEntry.setPersistencePending()
The control over persistence should be hidden from casual users. Update
appendAndPersist() prototype to prevent loss of implementation identity
and make the setPersistencePending() an implementation detail.
JIRA: CONTROLLER-2137
Change-Id: Idbdee4f00a7a23498f303cb0e7f7347e2318386f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 10:58:26 +0000 (11:58 +0100)]
Drop use of org.apache.pekko.japi.Procedure
Callbacks are not allowed to throw, so let's use
java.util.function.Consumer instead. This simplifies the code a bit
at the expense of a single object when we meet AbstractPersistentActor's
methods. That is fine, as those touch points are going away.
JIRA: CONTROLLER-2137
Change-Id: Icbc9e564b7720a5c3f381242fbf6eaa720781ded
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 10:37:35 +0000 (11:37 +0100)]
Modernize ExecuteInSelf{Actor,Message}
Use a record for ExecuteInSelfMessage and correct ExecuteInSelfActor's
documentation.
Change-Id: Id5039b4617c5776bdef4eb0a4f790469bc95dd57
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 10:23:38 +0000 (11:23 +0100)]
Split out TestDataProvider
Make NonPersistentDataProvider abstract, making shared methods final.
Introduce TestDataProvider to concentrate the functionality needed for
testing.
JIRA: CONTROLLER-2134
Change-Id: I374c29f5dd1d73e45255a2a757be717b7d4f96cf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 17 Mar 2025 09:13:05 +0000 (10:13 +0100)]
Split out TransientDataProvider
We have a subclass of NonPersistentDataProvider, split it out and make
sure the transitions are kept inside RaftActorDataPersistenceProvider.
JIRA: CONTROLLER-2134
Change-Id: If4d1cbb6eca0e256aea5d0d34cb9f2fb1157de26
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 14 Mar 2025 13:24:41 +0000 (14:24 +0100)]
Improve ShardTest
Now that we have a guaranteed Snapshot, we do not need to have an
explicit cast.
JIRA: CONTROLLER-2134
Change-Id: Icec7676b6d159492ed94ed7bd3a6652146e07fd4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 14 Mar 2025 10:20:17 +0000 (11:20 +0100)]
Use RaftActor in PersistentDataProvider
Disconnect from Pekko persistence.
JIRA: CONTROLLER-2134
Change-Id: Ib9d7d26f182dde933a4884d1191915f6c0fdea84
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 14 Mar 2025 09:19:25 +0000 (10:19 +0100)]
Clean up RaftActor.persistData()
- use simpler names
- use context directly
- reuse replicated log
Change-Id: Ic45b2e6f36593e4fe10879f3edefa3b736656cb5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 13 Mar 2025 13:00:37 +0000 (14:00 +0100)]
Remove redundant checks for existing snapshot
We have two callers who have checked the Optional for presence, so they
should be bypass the check, making the flow a bit clearer.
JIRA: CONTROLLER-2134
Change-Id: I31877288b1bb00d6f0ddfd35558a00e96027bb08
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 13 Mar 2025 09:03:39 +0000 (10:03 +0100)]
Update DataPersistenceProvider
All arguments are required to be non-null, let's annotate that.
Furthermore we know we are always saving a Snapshot, not a plain Object.
JIRA: CONTROLLER-2134
Change-Id: I9411cc6bdcea19ae4d6113485aed925f1bca3674
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 12 Mar 2025 15:50:55 +0000 (16:50 +0100)]
Hide (Non)PersistentDataProvider
These two implementations are really just an internal detail, which is
not being used outside of RaftActor/testing.
Hide them and also integrate DelegatingPersistentDataProvider with
RaftActorDataPersistenceProvider, making relationships a tad clearer.
JIRA: CONTROLLER-2134
Change-Id: I27885b31f6652a2093a9e52b131786e610a0b642
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 12 Mar 2025 15:17:14 +0000 (16:17 +0100)]
Rename RaftActorDelegatingPersistentDataProvider
DelegatingPersistentDataProvider is not really useful, let's start with
eliminating some of the tangles we have going through it.
JIRA: CONTROLLER-2134
Change-Id: I310bb6f02b2218522dd59f0ea53f3291aed67aaf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 12 Mar 2025 15:11:56 +0000 (16:11 +0100)]
Initialize MockRaftActor.state
There is no need to initialize in constructor, just use an expression.
Change-Id: Ida71c0147e63e8084ed6d858b038146d89442900
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 12 Mar 2025 11:48:18 +0000 (12:48 +0100)]
Migrate sal-akka-raft messages tests to JUnit5
Move to using JUnit5 for simple tests.
Change-Id: I2c6da396ba7af50c57ef8370d451bb4db854ad02
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 12 Mar 2025 11:27:52 +0000 (12:27 +0100)]
Hide LocalAccess
Refactor CandidateTest to use the same infrastructure as the rest of the
tests, allowing us to hide LocalAccess.
JIRA: CONTROLLER-2134
Change-Id: I50fe061abb6e565e78c09bf72dcf543df5a46d00
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 11 Mar 2025 12:50:03 +0000 (13:50 +0100)]
Hide SnapshotManager methods
Most of the methods, as well as the constructor, does not need to be
exposed to the outside world. Hide them and make SnapshotManager final.
JIRA: CONTROLLER-2134
Change-Id: I4e8de5dc8ace4afbf2fbe1d0834a3511c0da5f26
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 11 Mar 2025 10:37:13 +0000 (11:37 +0100)]
Move DataPersistenceProvider
DataPersistenceProvider is used only coupled with RaftActor, so this
patch moves it to cluster.raft.spi for further evolution.
JIRA: CONTROLLER-2134
Change-Id: I4cb3e35eaa5a45c2772f1fbf7ec535d96d0240f2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 11 Mar 2025 10:25:52 +0000 (11:25 +0100)]
Clean up MockRaftActorContext
- remove unused logger
- improve equals() implementation
- fixup @Override annotation placement
- add java.io.Serial annotation
Change-Id: Ib4430b8096f2b356be91772e5d3bca7d286ee8e4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 11 Mar 2025 10:12:20 +0000 (11:12 +0100)]
Remove DatastoreContext.GLOBAL_DATASTORE_NAMES
This is a global field, which is really not used -- remove it.
Change-Id: If9bfe72661154978f57b9429bd6f405116256e23
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 11 Mar 2025 08:40:56 +0000 (09:40 +0100)]
Fix VO_VOLATILE_INCREMENT
Make the variable non-volatile and guard it properly, eliminating a
SpotBugs violation.
Change-Id: I9284e5e623d90e6f6ff719030c15702a068f4e3c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 11 Mar 2025 08:25:15 +0000 (09:25 +0100)]
Use List.reversed()
We have more modern collections, ditch use of Lists.reversed().
Change-Id: I95a2f1bda581543ae88249ecaa8009b52b23fdd0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 10 Mar 2025 16:34:25 +0000 (17:34 +0100)]
Modernize ClusterAdminRpcServiceTest
Address the issues pointed out by modernizer and enable enforcement
again.
Change-Id: I837ee8656304021ec41f7175d18a89b8f3dbbc06
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 10 Mar 2025 13:16:58 +0000 (14:16 +0100)]
Reduce use of Optional
Use @Nullable returns instead.
Change-Id: Idd0d0e83cd979d71d8365115a3f53cd9a535bb8f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 10 Mar 2025 13:11:30 +0000 (14:11 +0100)]
Clean up CaptureSnapshotReply
Do not store an Optional, just use a @Nullable.
Change-Id: Ic540f775d9458e39526698d513e353f31093b684
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sat, 8 Mar 2025 06:33:55 +0000 (07:33 +0100)]
Bump upstreams
Adopt:
- odlparent-14.0.8
- yangtools-14.0.11
- mdsal-14.0.11
Change-Id: I4204a7233b97a65e5eb361606d6f8e8b7682e3b5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sat, 8 Mar 2025 06:40:11 +0000 (07:40 +0100)]
Bump Scala to 2.13.16
https://github.com/scala/scala/releases/tag/v2.13.16
Change-Id: I6d979677b852d2228d10e37d14773def9702b2b1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 5 Mar 2025 12:52:39 +0000 (13:52 +0100)]
Split RaftActor.setPersistence(boolean)
We have two cases -- we are either becoming transient or persistent.
Split the two cases into separate methods.
Change-Id: I29d5a8df07bcd9bf0fe385b92e17583df6253311
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 5 Mar 2025 12:46:22 +0000 (13:46 +0100)]
Enforce persistence provider
The persistence provider should never be null.
Change-Id: Ic95480b0fefe5c74cc55ed827f43ef34dab3b723
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 5 Mar 2025 12:29:07 +0000 (13:29 +0100)]
Reduce RaftActor.persistence() visibility
This method exposes some of the internals. Make sure it is hidden from
public view.
Change-Id: I3fdf6654f122615b650ccd629be9683d20f1e7b3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Wed, 5 Mar 2025 12:00:53 +0000 (13:00 +0100)]
Fix error printout
This is a day-zero bug: we should use persistenceId(), not
persistence().
Change-Id: Idda9f396acb6f7f886d0d1bcb8b88cd89f8bbd15
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 27 Feb 2025 06:14:04 +0000 (07:14 +0100)]
Bump upstreams
Adopt:
- yangtools-14.0.10
- mdsal-14.0.10
Change-Id: I7e678275a7f5e011906601a3844efcf5ec0da211
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 18 Feb 2025 12:01:10 +0000 (13:01 +0100)]
Remove SnapshotState
The split between Snapshot{Manager,State} is miniscule-to-none. Squash
them into a single class.
Change-Id: I326fad889136b8db4aa390f5c59d420b134e991e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 10 Feb 2025 08:51:12 +0000 (09:51 +0100)]
Re-enable IT tests
Override surefire configuration and re-enable the integration tests
which were hanging.
Change-Id: Ic3cf47714e563a528c9c2942af80480b4b3d5b24
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sat, 8 Feb 2025 19:12:03 +0000 (20:12 +0100)]
Bump upstreams
Adopt:
- odlparent-14.0.7
- yangtools-14.0.9
- mdsal-14.0.9
This also peppers pom.xmls with odlparent.modernizer.enforce, which will
be cleaned up in subsequent patches.
We also disable integration tests, as they are using mockito-5.11, which
is not compatible with recent SureFire configuration.
Change-Id: Ia2082118162a547fe3eca24b07685c6ebd22f408
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Anil Belur [Thu, 28 Nov 2024 06:41:15 +0000 (16:41 +1000)]
CI: Enable Gerrit Verify workflows with GHA
This is a pre-req to move Jenkins jobs to GHA.
Change-Id: I3f39dbe603eac800b441db60929f803067a4f105
Signed-off-by: Anil Belur <abelur@linuxfoundation.org>
Anil Belur [Thu, 5 Dec 2024 07:34:01 +0000 (17:34 +1000)]
CI: Enable Github2Gerrit workflow
This allows Github devs/users to contribute to the repo using the
Github workflow.
Change-Id: I833c194196e591b36a30dabd8466f7c1adf06aab
Signed-off-by: Anil Belur <abelur@linuxfoundation.org>
Robert Varga [Tue, 28 Jan 2025 09:26:03 +0000 (10:26 +0100)]
TermInfoStore load/store methods can report IOException
This is a persistence operation which the RaftActor cannot recover from.
Declare IOException as thrown, so that callers are forced to deal with
it.
JIRA: CONTROLLER-2133
Change-Id: Ia9d1a340d3472534087a0e89876061169fbdf75a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 6 Feb 2025 14:03:16 +0000 (15:03 +0100)]
Use state/odl.cluster.server for Shard storage
This makes the storage layer symmetric with odl.cluster.client from
cds-access-client.
JIRA: CONTROLLER-2073
Change-Id: Ic1637c8092b4c3034736f7fd7d8d7ac83013f115
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 28 Jan 2025 09:07:44 +0000 (10:07 +0100)]
Reimplement TermInfoStore
This patch introduces storage of TermInfo in a property file rather than
in Akka/Pekko persistence. We also refactor the
RaftActor/RaftActorRecoverySupport surface to give recovery direct
access to AbstractPersistentActor, without indirection through
DataPersistenceProvider.
This patch is quite invasive as we need to push down the location of
state directory.
JIRA: CONTROLLER-2133
Change-Id: I24d296fc232fb62de30a8f00bdd5f381dc862115
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 6 Feb 2025 14:13:55 +0000 (15:13 +0100)]
Improve bnd-parent
Make sure we do not allow superfluous headers and fill out
Bundle-Symbolic-Name as well as Bundle-DocURL.
Change-Id: I6e96507199b999eb5695429facff0c97b27b1532
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 13:31:24 +0000 (14:31 +0100)]
Modernize sal-akka-segmented-journal
Use java.nio.file.Path instead of java.io.File for most operations.
Change-Id: I330eb7fbed9dfe0fd05ff0fb796fbe30b6437c8d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 3 Feb 2025 18:06:59 +0000 (19:06 +0100)]
Use Acquire/Release for MemberName.serialized
We are an immutable structure with built-in cache. Improve concurrency
by using getAcquire()/setRelease() consistency.
Change-Id: I24085b54ded6ea6e6f816fba02bb869840979b14
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 3 Feb 2025 15:15:23 +0000 (16:15 +0100)]
Modernize DTNListenerRegistrationActor
Add logging of incoming message, use an enhanced switch for dispatch
and use java.time.Duration.
Change-Id: Ic3ce7c6da5d8b25e6da0a2e0ff202bc1d788b10b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 13:57:43 +0000 (14:57 +0100)]
Modernize file IO in sal-distributed-datastore
Use Files.new{Input,Output}Stream instead of a direct reference to
File{Input,Ouput}Stream.
Change-Id: I5f24ebc04791b8b9659f47174b494092e514a956
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 13:21:28 +0000 (14:21 +0100)]
Use Path.of() in AbstractActorTest
Simplify deletion by eliminating unneeded check and using Path-derived
File.
Change-Id: I1f34d36de0865ad870dd9f7858750cedd47c5e38
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 3 Feb 2025 15:19:16 +0000 (16:19 +0100)]
Modernize DTCListenerSupportTest
Use Map.entry() and local variable type inference.
Change-Id: I691d8df6cd19c22e1dcd4f7b638014c2f5d91d28
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 3 Feb 2025 15:53:31 +0000 (16:53 +0100)]
Use instanceof pattern in SDTNPublisherActor
This is a simple lift up.
Change-Id: Ie6fd2e059642cd6f131e2df514fbf4722f9e0298
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 3 Feb 2025 13:21:31 +0000 (14:21 +0100)]
Rename persistInfo() to setAndStoreInfo()
This is a more descriptive name and will pair nicely with future
evolution.
JIRA: CONTROLLER-2133
Change-Id: If10eb078f9644644548cf697b64c880ee650e9dd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Mon, 3 Feb 2025 16:00:13 +0000 (17:00 +0100)]
Check listener state before forwarding notification
We have an intermittently-failing test because we are not checking
whether the registration is closed -- relying instead on the much slower
process of removing the listener.
Add the missing check, improving the turnaround on stopping event
delivery.
Change-Id: Ia51e5798dce8c322ca9d9a477ffae041ecffd5ef
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 14:01:31 +0000 (15:01 +0100)]
Reduce use of File in AbstractModuleShardConfigProvider
Use NIO and only convert to File when talking to ConfigFactory.
Change-Id: I067e87f324b6b719782b92d6731a0a26e5d81027
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 15:34:59 +0000 (16:34 +0100)]
Use Duration for graceful stop
This code harks back to when pre-Java 8 Akka, modernize it to use
java.time.Duration.
Change-Id: I178cf32fedc25fc566645a6449daaccf36187865
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 15:07:23 +0000 (16:07 +0100)]
Improve ShardManager dispatch
Use an enhanced switch for message type dispatch and instanceof patterns
where applicable.
Change-Id: I4c696469064618b66269a7f218695d20d157e7a6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 14:54:26 +0000 (15:54 +0100)]
Add ShardManager.logName()
Do not use persistenceId() as that is going away with persistence.
Change-Id: I4cb24d2773fa02be0f99a0f647ff0053d71a1e23
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 14:46:18 +0000 (15:46 +0100)]
Modernize ShardManager a bit
Use local variable type inference and simplify a few response methods.
Change-Id: I65312cdf75e4d486f0ad2fcd3a54e9a2901131a6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 13:47:18 +0000 (14:47 +0100)]
Clean up AbstractUntypedPersistentActor
Fix the two suppressions we have by using a private Logger. We also
rehost persistenceId() from RaftAftor and use it consistently in
messages.
Change-Id: Ie8c2f2e414a396060eee5aa7e16975ff5514e972
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 13:33:21 +0000 (14:33 +0100)]
Do not pass Logger to ShardSnapshotCohort
We are already identifying the shard through memberName, let's use our
own logger.
Change-Id: Idcb06205f34d5ba01cd62715e72c1d04d65286bb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 13:59:30 +0000 (14:59 +0100)]
Fix ActionRegistry persistenceId
We are passing down the RPC registry id, hence we have a clash. Fix that
up.
Change-Id: I9f177df639258c47b2ee2d446bcfe0ce185391db
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 13:30:38 +0000 (14:30 +0100)]
Fix missing return in applySnapshot()
The log indicates we are about the ignore a payload -- but then we
continue, leading to a CCE. Fix it by adding a return statement.
Change-Id: Ieffa2bdd98611cba0905659c59a4c287353465f8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sun, 2 Feb 2025 13:09:03 +0000 (14:09 +0100)]
Do not pass logger to ShardRecoveryCoordinator
We are already logging our member name, so use a normal, per-class
logger instead of getting it passed from Shard.
Change-Id: I1075c6dd8bfb4fce41d8baa04750a2aaf4ae6c91
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sat, 1 Feb 2025 03:28:23 +0000 (04:28 +0100)]
Do not pass around logger and other clean ups
This patch performs a sweeep on sal-akka-raft logging, using per-class
loggers rather than passing one logger around.
AbstractLeader.printFollowerStates() is improved slightly to use fluent
StringBuilder append() calls.
Candidate.handleRequestVoteReply() is improved to be more linear in an
effort to make it clearer.
SnapshotTrackerTest is converted to JUnit5 to for accurate tracking of
which method call throws the expected exception.
Change-Id: I5e7142f2b1776da8edd21d302da55b1b0ab29d18
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 31 Jan 2025 21:29:47 +0000 (22:29 +0100)]
Eliminate shard-operation-result
Inline it into its sole user, where it can be properly specialized.
We also remodel it to correctly express extensible success/failure
cases, where error message is optional.
Change-Id: Icd6de68211bbe9a087d2c87e700fd199ba905f42
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Sat, 1 Feb 2025 13:32:38 +0000 (14:32 +0100)]
Use manual Karaf-Commands property
We do not need the full tooling plugin, just define the appropriate
property.
Change-Id: Ibed33d47dd26d5d687d932b86f52fe2e28cc53df
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 31 Jan 2025 20:30:11 +0000 (21:30 +0100)]
Use 'member-name' from odl-controller-cds-types
We already have this construct, it just needs strengthening a bit.
Change-Id: Icd858c9991f39f7399c96cefc13a61559ddaf2a8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 31 Jan 2025 23:37:39 +0000 (00:37 +0100)]
Add ClusterConfig
RAFT paper mentions cluster configuration, which is what we have in
ServerConfigurationPayload.
Note that while we currently only transport ServerInfo, the structure is
flexible at the end of the day.
For now we call the ServerInfos we have serverInfo(), but really that
should be fused with the logic that uses it -- because this feels like
the List should be a Map and encapsulated in something called
ElectionPolicy or something.
We also remove PersistentPayload, as we are the only user -- and any
further access to being this special means you are part of
ClusterConfig, so explicit updates are in order.
JIRA: CONTROLLER-2137
Change-Id: Ie3eee97bbf71401889f835f2b8be9757c3f76c22
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 31 Jan 2025 20:15:57 +0000 (21:15 +0100)]
Make 'local' a presence container
It does not change on-wire representation and it is more expressive.
Also spell out case statements to have them bear different names.
Change-Id: Ibade66fb29080f0601ca701ef3e93dbbdff45d30
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 31 Jan 2025 20:03:55 +0000 (21:03 +0100)]
Fix member-voting-state
The list here is meant to carry each member name once and for each
positively identify whether or not it is voting. The list has to be
non-empty, as already enforced by the implementation.
Change-Id: Idc5e9dd37812e9b4af4a71bee9e8178c9ad7bbc2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Fri, 31 Jan 2025 19:45:23 +0000 (20:45 +0100)]
Separate out shard-name as a separate typedef
This allows us to rely it as a source of type safety, foregoing a few
checks.
Change-Id: Id27b7ffe0d6c09dd94547006f5f334f7c8a7599b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 12:19:37 +0000 (13:19 +0100)]
Modernize LocalSnapshotStore
Use java.nio.file.Path and related NIO utilities to provide the same
functionality with more modern tools.
Change-Id: I4a2999e267f38189f7aa55bb40ac534142425d16
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 12:18:46 +0000 (13:18 +0100)]
Modernize InputOutputStreamFactory
Use java.nio.file.Path internally, while keeping the external interface
unchanged.
Change-Id: Ib10c6094a8d3f746e64502c8023b4a5c1d05cf30
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 12:17:52 +0000 (13:17 +0100)]
Modernize FileAkkaConfigurationReader
Use java.nio.file.Path instead of java.io.File and simplify code a bit.
Change-Id: I107cf5044975c2ee3b6dd473b68ecd17c6510994
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 11:54:54 +0000 (12:54 +0100)]
Modernize atomix-storage path management
Use java.nio.file.Path in most places, so we have a more modern
interface.
Change-Id: I6c42a9f88102063961af7615a12372f6372cfa89
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Tue, 7 Jan 2025 11:39:40 +0000 (12:39 +0100)]
Modernize DataStoreAppConfigMetadata path management
Use java.nio.file.Path for better instantiation, eliminating the need to
split path into its components.
Change-Id: Ia3aaf1276ac310862790be89ab741675cac84be4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 11:36:03 +0000 (12:36 +0100)]
Clean up payloadVersion lifecycle
This is something that cannot ever change, make sure we have that
covered.
Change-Id: I1ce6a888ce39af7722f0c33640387ca158a19f41
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 03:50:18 +0000 (04:50 +0100)]
Split out WaitCallback
There is a lot going on for an anonymous class. Refactor into a
method-private class, which makes things a tad easier on the eyes.
Change-Id: I06f433fa830f53a7fa4002ae9ff6c9fcb8c661c2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 08:39:40 +0000 (09:39 +0100)]
Clean up minor nits in tests
Mostly assertTrue()/assertFalse() to use explicit binding to boolean
instead of going through objects.
Change-Id: Ib6a4c21ac75ec4ccadc83678f6330faea6ebd2bf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 03:41:06 +0000 (04:41 +0100)]
Simplify sendMessageToManagerForConfiguredShards()
We are always sending messages to all datastores, so this refactors
the basic primitive and its users to be much more friendly.
Change-Id: Ia8bd477808d40f74c2faa791b84ada650cf27d27
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 02:08:02 +0000 (03:08 +0100)]
Improve toChangeShardMembersVotingStatus()
Use a stream with a collector to create the HashMap we need.
Change-Id: I6bc2bc88e5b92e1363c04b1478b72d662180a583
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 01:59:55 +0000 (02:59 +0100)]
Improve processReplies()
Use BindingMap.toMap() to simply index resuts via a streaming pipeline.
Makes things a lot easier on the eyes.
Change-Id: I8f108a097aa4f6a55e874776125eec89a5b67fa3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 01:48:47 +0000 (02:48 +0100)]
Inline getAllShardLeadersClients()
This method has a single caller, which can realize it much more neatly
when inlined.
Change-Id: Ifc5f1daaa5679a4acf5c643970ad36cd97af6809
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 01:41:39 +0000 (02:41 +0100)]
Inline sendMessageToShardManagers()
This method has a single caller, which is much better served with
using sendMessageToShardManager().
Change-Id: I82524ade1d0e93707e5fb9211f67264ffab7944d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 01:34:16 +0000 (02:34 +0100)]
Modernize callback dispatch
Use proper generics and local variable type inference to streamline
bridging to ListenableFuture.
Change-Id: If4158288463611cb0ee15120436ce2ed524de6f6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 08:08:33 +0000 (09:08 +0100)]
Remove TransactionRateLimiter
This component is completely unused. Remove it along with all its
surrounding wiring -- including marking its configuration as obsolete.
Change-Id: Ica980f21109ca80d19660a6327e00e10073c9610
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 07:02:58 +0000 (08:02 +0100)]
Specialize UnsignedLongSet.EntryImpl
Separate out the interface and implementations, so that we now have two
record covering the case of a singleton range or a range encompassing
multiple values.
Change-Id: I08e86f2f4e58c50734ec34433b946ceaa3f55b17
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
Robert Varga [Thu, 30 Jan 2025 06:17:01 +0000 (07:17 +0100)]
Promote UnsignedLong{Bitmap,Set}
Tracking unsigned long things is useful in RAFT context, not just where
sal-distributed-datastore is concerned.
Promote these utilities to cluster.raft.spi for wider exposure.
Change-Id: Iab9f9a326ee60101230b7a3130cc48134182c48f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>