2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.controller.programs.appendentries;
11 import akka.actor.ActorSelection;
12 import akka.actor.ActorSystem;
13 import akka.actor.Props;
14 import akka.actor.UntypedActor;
15 import com.typesafe.config.ConfigFactory;
16 import java.util.ArrayList;
17 import java.util.List;
18 import org.opendaylight.controller.cluster.datastore.modification.MutableCompositeModification;
19 import org.opendaylight.controller.cluster.datastore.modification.WriteModification;
20 import org.opendaylight.controller.cluster.example.messages.KeyValue;
21 import org.opendaylight.controller.cluster.raft.ReplicatedLogEntry;
22 import org.opendaylight.controller.cluster.raft.messages.AppendEntries;
23 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.CompositeModificationByteStringPayload;
24 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.CompositeModificationPayload;
25 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
26 import org.opendaylight.controller.md.cluster.datastore.model.TestModel;
27 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNodes;
31 private static ActorSystem actorSystem;
33 public static class ClientActor extends UntypedActor {
35 @Override public void onReceive(Object message) throws Exception {
40 public static void main(String[] args){
41 actorSystem = ActorSystem.create("appendentries", ConfigFactory
42 .load().getConfig("ODLCluster"));
44 ActorSelection actorSelection = actorSystem.actorSelection(
45 "akka.tcp://appendentries@127.0.0.1:2550/user/server");
47 AppendEntries appendEntries = modificationAppendEntries();
49 Payload data = appendEntries.getEntries().get(0).getData();
50 if(data instanceof CompositeModificationPayload) {
52 "Sending : " + ((CompositeModificationPayload) data)
56 "Sending : " + ((KeyValue) data)
61 actorSelection.tell(appendEntries.toSerializable(), null);
66 actorSystem.actorOf(Props.create(ClientActor.class), "client");
69 public static AppendEntries modificationAppendEntries() {
70 List<ReplicatedLogEntry> modification = new ArrayList<>();
72 modification.add(0, new ReplicatedLogEntry() {
73 @Override public Payload getData() {
74 WriteModification writeModification =
75 new WriteModification(TestModel.TEST_PATH, ImmutableNodes
76 .containerNode(TestModel.TEST_QNAME));
78 MutableCompositeModification compositeModification =
79 new MutableCompositeModification();
81 compositeModification.addModification(writeModification);
83 return new CompositeModificationByteStringPayload(
84 compositeModification.toSerializable());
87 @Override public long getTerm() {
91 @Override public long getIndex() {
97 return getData().size();
101 return new AppendEntries(1, "member-1", 0, 100, modification, 1, -1);
104 public static AppendEntries keyValueAppendEntries() {
105 List<ReplicatedLogEntry> modification = new ArrayList<>();
107 modification.add(0, new ReplicatedLogEntry() {
108 @Override public Payload getData() {
109 return new KeyValue("moiz", "test");
112 @Override public long getTerm() {
116 @Override public long getIndex() {
122 return getData().size();
126 return new AppendEntries(1, "member-1", 0, 100, modification, 1, -1);