Add RaftActorServerConfigurationSupport.raftActor
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / ElectionTermImpl.java
index e918f75273483cd11ab73a68bdc7ab36db8a59cf..8e2e3d507d1752fe470d0da778e4d62c11ba2fa5 100644 (file)
@@ -1,47 +1,59 @@
 /*
- * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
+ * Copyright (c) 2015 Cisco Systems, Inc. and others.  All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.controller.cluster.raft;
 
-import java.util.concurrent.atomic.AtomicLong;
+import org.opendaylight.controller.cluster.DataPersistenceProvider;
+import org.opendaylight.controller.cluster.raft.base.messages.UpdateElectionTerm;
+import org.slf4j.Logger;
 
-public class ElectionTermImpl implements ElectionTerm{
+/**
+ * Implementation of ElectionTerm for the RaftActor.
+ */
+class ElectionTermImpl implements ElectionTerm {
     /**
      * Identifier of the actor whose election term information this is
      */
-    private final String id;
-
-    private AtomicLong currentTerm;
+    private long currentTerm = 0;
+    private String votedFor = null;
 
-    private String votedFor;
+    private final DataPersistenceProvider persistence;
 
-    public ElectionTermImpl(String id) {
-        this.id = id;
+    private final Logger log;
+    private final String logId;
 
-        // TODO: Read currentTerm from some persistent state
-        currentTerm = new AtomicLong(0);
-
-        // TODO: Read votedFor from some file
-        votedFor = "";
+    ElectionTermImpl(DataPersistenceProvider persistence, String logId, Logger log) {
+        this.persistence = persistence;
+        this.logId = logId;
+        this.log = log;
     }
 
-    public AtomicLong getCurrentTerm() {
+    @Override
+    public long getCurrentTerm() {
         return currentTerm;
     }
 
+    @Override
     public String getVotedFor() {
         return votedFor;
     }
 
-    public void update(AtomicLong currentTerm, String votedFor){
+    @Override public void update(long currentTerm, String votedFor) {
+        if(log.isDebugEnabled()) {
+            log.debug("{}: Set currentTerm={}, votedFor={}", logId, currentTerm, votedFor);
+        }
         this.currentTerm = currentTerm;
         this.votedFor = votedFor;
+    }
 
-        // TODO : Write to some persistent state
+    @Override
+    public void updateAndPersist(long currentTerm, String votedFor){
+        update(currentTerm, votedFor);
+        // FIXME : Maybe first persist then update the state
+        persistence.persist(new UpdateElectionTerm(this.currentTerm, this.votedFor), NoopProcedure.instance());
     }
-}
+}
\ No newline at end of file