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

Reply via email to