This is an automated email from the ASF dual-hosted git repository.
jinrongtong pushed a commit to branch dledger-controller-snapshot
in repository https://gitbox.apache.org/repos/asf/rocketmq.git
The following commit(s) were added to refs/heads/dledger-controller-snapshot by
this push:
new 664bddd87 [ISSUE #5585] Implement statemachine snapshot interface
664bddd87 is described below
commit 664bddd878b783fbd32f5cb7cd0a306d1b5f1291
Author: hzh0425 <[email protected]>
AuthorDate: Tue Dec 6 10:28:15 2022 +0800
[ISSUE #5585] Implement statemachine snapshot interface
---
.../DLedgerControllerStateMachine.java | 24 +++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)
diff --git
a/controller/src/main/java/org/apache/rocketmq/controller/impl/statemachine/DLedgerControllerStateMachine.java
b/controller/src/main/java/org/apache/rocketmq/controller/impl/statemachine/DLedgerControllerStateMachine.java
index ee10775d6..5e3fb24e6 100644
---
a/controller/src/main/java/org/apache/rocketmq/controller/impl/statemachine/DLedgerControllerStateMachine.java
+++
b/controller/src/main/java/org/apache/rocketmq/controller/impl/statemachine/DLedgerControllerStateMachine.java
@@ -29,6 +29,9 @@ import
org.apache.rocketmq.controller.impl.manager.ReplicasInfoManager;
import org.apache.rocketmq.logging.org.slf4j.Logger;
import org.apache.rocketmq.logging.org.slf4j.LoggerFactory;
+import java.io.IOException;
+import java.util.Collections;
+
/**
* The state machine implementation of the DLedger controller
*/
@@ -37,12 +40,14 @@ public class DLedgerControllerStateMachine implements
StateMachine {
private final ReplicasInfoManager replicasInfoManager;
private final EventSerializer eventSerializer;
private final String dLedgerId;
+ private final StatemachineSnapshotFileGenerator snapshotFileGenerator;
public DLedgerControllerStateMachine(final ReplicasInfoManager
replicasInfoManager,
final EventSerializer
eventSerializer, final String dLedgerId) {
this.replicasInfoManager = replicasInfoManager;
this.eventSerializer = eventSerializer;
this.dLedgerId = dLedgerId;
+ this.snapshotFileGenerator = new
StatemachineSnapshotFileGenerator(Collections.singletonList(replicasInfoManager));
}
@Override
@@ -62,22 +67,35 @@ public class DLedgerControllerStateMachine implements
StateMachine {
@Override
public boolean onSnapshotSave(SnapshotWriter writer) {
- return false;
+ final String snapshotStorePath = writer.getSnapshotStorePath();
+ try {
+ this.snapshotFileGenerator.generateSnapshot(snapshotStorePath);
+ return true;
+ } catch (IOException e) {
+ log.error("Failed to generate controller statemachine snapshot",
e);
+ return false;
+ }
}
@Override
public boolean onSnapshotLoad(SnapshotReader reader) {
- return false;
+ try {
+ return
this.snapshotFileGenerator.loadSnapshot(reader.getSnapshotStorePath());
+ } catch (IOException e) {
+ log.error("Failed to load controller statemachine snapshot", e);
+ return false;
+ }
}
@Override
public void onShutdown() {
+ log.info("Controller statemachine shutdown!");
}
@Override
public void onError(DLedgerException e) {
-
+ log.error("Error happen in controller statemachine", e);
}
@Override