changeset 599:3284428f525e dispose

add MetaCodeSegment & MetaDSM
author Nozomi Teruya <e125769@ie.u-ryukyu.ac.jp>
date Mon, 15 Feb 2016 01:16:35 +0900
parents 35f83005271e
children 0564f38e9bfe
files src/main/java/alice/codesegment/CloseEventCodeSegment.java src/main/java/alice/codesegment/InputDataSegment.java src/main/java/alice/codesegment/MetaCodeSegment.java src/main/java/alice/codesegment/OutputDataSegment.java src/main/java/alice/daemon/CommandMessage.java src/main/java/alice/daemon/IncomingTcpConnection.java src/main/java/alice/datasegment/Command.java src/main/java/alice/datasegment/DataSegment.java src/main/java/alice/datasegment/ReceiveData.java src/main/java/alice/datasegment/Receiver.java src/main/java/alice/topology/manager/CheckComingHost.java src/main/java/alice/topology/manager/ComingServiceHosts.java src/main/java/alice/topology/manager/ConfigWaiter.java src/main/java/alice/topology/manager/CreateHash.java src/main/java/alice/topology/manager/CreateTreeTopology.java src/main/java/alice/topology/manager/IncomingHosts.java src/main/java/alice/topology/manager/RecodeTopology.java src/main/java/alice/topology/manager/SearchHostName.java src/main/java/alice/topology/manager/StartTopologyManager.java src/main/java/alice/topology/manager/TopologyFinish.java src/main/java/alice/topology/manager/keeparive/CreateTask.java src/main/java/alice/topology/manager/keeparive/RemoveTask.java src/main/java/alice/topology/manager/keeparive/RespondPing.java src/main/java/alice/topology/manager/keeparive/StartKeepAlive.java src/main/java/alice/topology/manager/keeparive/TaskExecuter.java src/main/java/alice/topology/node/CloseRemoteDataSegment.java src/main/java/alice/topology/node/ClosedEventManager.java src/main/java/alice/topology/node/ConfigurationFinish.java src/main/java/alice/topology/node/CreateConnectionList.java src/main/java/alice/topology/node/ExecuteEvent.java src/main/java/alice/topology/node/IncomingAbstractHostName.java src/main/java/alice/topology/node/IncomingConnectionInfo.java src/main/java/alice/topology/node/IncomingReverseKey.java src/main/java/alice/topology/node/PrepareToAddList.java src/main/java/alice/topology/node/PrepareToClose.java src/main/java/alice/topology/node/ReceiveCloseMessage.java src/main/java/alice/topology/node/RegisterEvent.java src/main/java/alice/topology/node/SaveCookie.java src/main/java/alice/topology/node/Start.java src/main/java/alice/topology/node/StartTopologyNode.java
diffstat 40 files changed, 185 insertions(+), 62 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/alice/codesegment/CloseEventCodeSegment.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/codesegment/CloseEventCodeSegment.java	Mon Feb 15 01:16:35 2016 +0900
@@ -4,7 +4,7 @@
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public abstract class CloseEventCodeSegment extends CodeSegment {
+public abstract class CloseEventCodeSegment extends MetaCodeSegment {
 
     public Receiver metaInfo = ids.create(CommandType.PEEK);
 
--- a/src/main/java/alice/codesegment/InputDataSegment.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/codesegment/InputDataSegment.java	Mon Feb 15 01:16:35 2016 +0900
@@ -18,6 +18,7 @@
 public class InputDataSegment {
 
     public CodeSegment cs;
+    private String metaState = "";
     private AtomicInteger count = new AtomicInteger(1); // 1 for no input data segments
     private AtomicInteger keyCount = new AtomicInteger(0); // number of DataSegments
 
@@ -30,25 +31,29 @@
         keyCount = new AtomicInteger(0);
     }
 
+    public void setMeta(){
+        metaState = "meta";
+    }
+
     public void quickPeek(Receiver receiver) {//SEDAで実行
         cs.register(receiver);
-        DataSegment.get(receiver.managerKey).peek(receiver, cs, true);
+        DataSegment.get(metaState + receiver.managerKey).peek(receiver, cs, true);
     }
 
 
     public void peek(Receiver receiver) {
         cs.register(receiver);
-        DataSegment.get(receiver.managerKey).peek(receiver, cs, false);
+        DataSegment.get(metaState + receiver.managerKey).peek(receiver, cs, false);
     }
 
     public void quickTake(Receiver receiver) {
         cs.register(receiver);
-        DataSegment.get(receiver.managerKey).take(receiver, cs, true);
+        DataSegment.get(metaState + receiver.managerKey).take(receiver, cs, true);
     }
 
     public void take(Receiver receiver) {
         cs.register(receiver);
-        DataSegment.get(receiver.managerKey).take(receiver, cs, false);
+        DataSegment.get(metaState + receiver.managerKey).take(receiver, cs, false);
     }
 
     public void reply(Receiver receiver, Command reply) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/main/java/alice/codesegment/MetaCodeSegment.java	Mon Feb 15 01:16:35 2016 +0900
@@ -0,0 +1,17 @@
+package alice.codesegment;
+
+/**
+ * Created by e125769 on 2/14/16.
+ */
+public class MetaCodeSegment extends CodeSegment {
+
+    public MetaCodeSegment(){
+        ids.setMeta();
+        ods.setMeta();
+    }
+
+    @Override
+    public void run() {
+
+    }
+}
--- a/src/main/java/alice/codesegment/OutputDataSegment.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/codesegment/OutputDataSegment.java	Mon Feb 15 01:16:35 2016 +0900
@@ -8,31 +8,42 @@
 
 public class OutputDataSegment {
 
-    /**
-     * for local
-     */
+    private String metaState = "";
 
     /**
      * input→ds変更→outputのときコピーを防ぐ
      */
+    public void setMeta(){
+        metaState = "meta";
+    }
+
     public void flip(Receiver receiver) {
         if (receiver.isCompressed()){
-            DataSegment.getCompressedLocal().put(receiver.key, receiver.getReceiveData(), false);
+            DataSegment.get(metaState + "compressedlocal").put(receiver.key, receiver.getReceiveData(), false);
         } else {
-            DataSegment.getLocal().put(receiver.key, receiver.getReceiveData(), false);
+            DataSegment.get(metaState + "local").put(receiver.key, receiver.getReceiveData(), false);
         }
     }
 
     public void flip(String managerKey, String key, Receiver receiver){
+
+        receiver.setMeta(metaState != "");
+
         if (receiver.isCompressed()){
-            DataSegment.get("compressed" + managerKey).put(key, receiver.getReceiveData(), false);
+            if (!managerKey.startsWith("compressed")){
+                managerKey = "compressed" + managerKey;
+            }
+            DataSegment.get(metaState + managerKey).put(key, receiver.getReceiveData(), false);
         } else {
-            DataSegment.get(managerKey).put(key, receiver.getReceiveData(), false);
+            DataSegment.get(metaState + managerKey).put(key, receiver.getReceiveData(), false);
         }
 
     }
 
     public void flip(Receiver receiver, CommandType type) {
+
+        receiver.setMeta(metaState != "");
+
         switch (type) {
             case PUT:
                 if (receiver.isCompressed()){
@@ -55,56 +66,67 @@
     }
 
     public void put(String key, ReceiveData rData) {
-        DataSegment.getLocal().put(key, rData, false);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + "local").put(key, rData, false);
     }
 
     public void put(String key, Object val) {
         ReceiveData rData = new ReceiveData(val);
-        DataSegment.getLocal().put(key, rData, false);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + "local").put(key, rData, false);
     }
 
     public void update(String key, Object val) {
         ReceiveData rData = new ReceiveData(val);
-        DataSegment.getLocal().update(key, rData, false);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + "local").update(key, rData, false);
     }
 
     /**
      * for remote
      */
     public void put(String managerKey, String key, ReceiveData rData) {
-        DataSegment.get(managerKey).put(key, rData, false);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).put(key, rData, false);
     }
 
     public void put(String managerKey, String key, Object val) {//追加
         ReceiveData rData = new ReceiveData(val);
-        DataSegment.get(managerKey).put(key, rData, false);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).put(key, rData, false);
     }
 
     public void quickPut(String managerKey, String key, ReceiveData rData) {
-        DataSegment.get(managerKey).put(key, rData, true);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).put(key, rData, true);
     }
 
     public void quickPut(String managerKey, String key, Object val) {
         ReceiveData rData = new ReceiveData(val);
-        DataSegment.get(managerKey).put(key, rData, true);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).put(key, rData, true);
     }
 
     public void update(String managerKey, String key, ReceiveData rData) {
-        DataSegment.get(managerKey).update(key, rData, false);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).update(key, rData, false);
     }
 
     public void update(String managerKey, String key, Object val) {
         ReceiveData rData = new ReceiveData(val);
-        DataSegment.get(managerKey).update(key, rData, false);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).update(key, rData, false);
     }
 
     public void quickUpdate(String managerKey, String key, ReceiveData rData) {
-        DataSegment.get(managerKey).update(key, rData, true);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).update(key, rData, true);
     }
 
     public void quickUpdate(String managerKey, String key, Object val, boolean cFlag) {
         ReceiveData rData = new ReceiveData(val);
-        DataSegment.get(managerKey).update(key, rData, true);
+        rData.setMeta(metaState != "");
+        DataSegment.get(metaState + managerKey).update(key, rData, true);
     }
 
     /**
--- a/src/main/java/alice/daemon/CommandMessage.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/daemon/CommandMessage.java	Mon Feb 15 01:16:35 2016 +0900
@@ -14,6 +14,7 @@
     public boolean quickFlag = false;//SEDAを挟まずに処理を行うかどうか
     public boolean compressed = false;//圧縮されているかどうか
     public int dataSize = 0;//圧縮前のサイズ
+    public boolean meta = false;
 
     //計測用
     public boolean setTime = false;
@@ -25,7 +26,7 @@
     public CommandMessage() {}
 
     public CommandMessage(int type, int index, int seq, String key
-            , boolean qFlag, boolean cFlag, int datasize) {
+            , boolean qFlag, boolean cFlag, int datasize, boolean mFlag) {
         this.type = type;
         this.index = index;
         this.seq = seq;
@@ -33,6 +34,7 @@
         this.quickFlag = qFlag;
         this.compressed = cFlag;
         this.dataSize = datasize;
+        this.meta = mFlag;
     }
 
 }
--- a/src/main/java/alice/daemon/IncomingTcpConnection.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/daemon/IncomingTcpConnection.java	Mon Feb 15 01:16:35 2016 +0900
@@ -16,7 +16,9 @@
     protected DataSegmentManager manager;
     protected String reverseKey;
     private LocalDataSegmentManager lmanager = DataSegment.getLocal();
+    private LocalDataSegmentManager metalmanager = DataSegment.getMetaLocal();
     private CompressedLocalDataSegmentManager compressedlmanager = DataSegment.getCompressedLocal();
+    private CompressedLocalDataSegmentManager compressedmetalmanager = DataSegment.getCompressedMetaLocal();
     private static final MessagePack packer = new MessagePack();
 
     public IncomingTcpConnection(DataSegmentManager manager) {
@@ -61,6 +63,7 @@
                 case PUT:
                     int dataSize = unpacker.readInt();
                     rData = new ReceiveData(unpacker.getSerializedByteArray(dataSize), msg.compressed, msg.dataSize);
+                    rData.setMeta(msg.meta);
 
                     if (msg.setTime) {
                         rData.setTimes(msg.time, true, msg.depth);
@@ -74,10 +77,18 @@
                     cmd = new Command(type, null, null, rData, 0, 0, null, null, reverseKey);
                     cmd.setCompressFlag(msg.compressed);
 
-                    if (rData.compressed()){
-                        compressedlmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                    if (msg.meta){
+                        if (msg.compressed){
+                            compressedmetalmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        } else {
+                            metalmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        }
                     } else {
-                        lmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        if (msg.compressed){
+                            compressedlmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        } else {
+                            lmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        }
                     }
 
                     break;
@@ -86,10 +97,18 @@
                     cmd = new Command(type, null, null, null, msg.index, msg.seq, null, null, connection);
                     cmd.setCompressFlag(msg.compressed);
 
-                    if (msg.compressed){
-                        compressedlmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                    if (msg.meta){
+                        if (msg.compressed){
+                            compressedmetalmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        } else {
+                            metalmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        }
                     } else {
-                        lmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        if (msg.compressed){
+                            compressedlmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        } else {
+                            lmanager.getDataSegmentKey(msg.key).runCommand(cmd);
+                        }
                     }
 
                     break;
--- a/src/main/java/alice/datasegment/Command.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/datasegment/Command.java	Mon Feb 15 01:16:35 2016 +0900
@@ -98,7 +98,7 @@
                         data = rData.getMessagePack();
                     }
 
-                    CommandMessage cm = new CommandMessage(type.id, index, seq, key, false, compressFlag, rData.getDataSize());
+                    CommandMessage cm = new CommandMessage(type.id, index, seq, key, false, compressFlag, rData.getDataSize(),rData.getMeta());
                     if (rData.getSetTime()) {
                         cm.setTime = true;
                         cm.time = rData.getTime();
@@ -118,7 +118,7 @@
                     buf.put(data);
                     break;
                 default:
-                    header = packer.write(new CommandMessage(type.id, index, seq, key, quickFlag, compressFlag, 0));
+                    header = packer.write(new CommandMessage(type.id, index, seq, key, quickFlag, compressFlag, 0,rData.getMeta()));
                     buf = ByteBuffer.allocate(header.length);
                     buf.put(header);
                     break;
--- a/src/main/java/alice/datasegment/DataSegment.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/datasegment/DataSegment.java	Mon Feb 15 01:16:35 2016 +0900
@@ -10,13 +10,17 @@
 
     private static DataSegment dataSegment = new DataSegment();
     private LocalDataSegmentManager local = new LocalDataSegmentManager();
+    private LocalDataSegmentManager metaLocal = new LocalDataSegmentManager();
     private CompressedLocalDataSegmentManager compressedLocal = new CompressedLocalDataSegmentManager(local);//追加
+    private CompressedLocalDataSegmentManager compressedMetaLocal = new CompressedLocalDataSegmentManager(metaLocal);//追加
     private ConcurrentHashMap<String, DataSegmentManager> dataSegmentManagers = new ConcurrentHashMap<String, DataSegmentManager>(); //TODO Over Head
     private ConcurrentHashMap<String, IncomingTcpConnection> acceptHash = new ConcurrentHashMap<String, IncomingTcpConnection>();
 
     private DataSegment() {
         dataSegmentManagers.put("local", local);
+        dataSegmentManagers.put("metalocal", metaLocal);
         dataSegmentManagers.put("compressedlocal", compressedLocal);
+        dataSegmentManagers.put("metacompressedlocal", compressedMetaLocal);
     }
 
     public static DataSegmentManager get(String key) {
@@ -31,10 +35,18 @@
         return dataSegment.local;
     }
 
+    public static LocalDataSegmentManager getMetaLocal() {
+        return dataSegment.metaLocal;
+    }
+
     public static CompressedLocalDataSegmentManager getCompressedLocal() {//追加
         return dataSegment.compressedLocal;
     }
 
+    public static CompressedLocalDataSegmentManager getCompressedMetaLocal() {//追加
+        return dataSegment.compressedMetaLocal;
+    }
+
     public static void register(String key, DataSegmentManager manager) {
         dataSegment.dataSegmentManagers.put(key, manager);
     }
--- a/src/main/java/alice/datasegment/ReceiveData.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/datasegment/ReceiveData.java	Mon Feb 15 01:16:35 2016 +0900
@@ -25,6 +25,8 @@
     private boolean setZepped = false;
     private int zippedDataSize;//圧縮後のデータサイズ
 
+    private boolean meta = false;
+
     private static final MessagePack packer = new MessagePack();
 
     /**
@@ -277,4 +279,12 @@
         return this.setZepped;
     }
 
+    public  void setMeta(boolean mFlag){
+        this.meta = mFlag;
+    }
+
+    public boolean getMeta(){
+        return this.meta;
+    }
+
 }
--- a/src/main/java/alice/datasegment/Receiver.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/datasegment/Receiver.java	Mon Feb 15 01:16:35 2016 +0900
@@ -78,6 +78,7 @@
     }
 
     public void setKey(String key, int index) {
+        this.managerKey = "local";
         this.key = key;
         this.index = index;
         switch (type) {
@@ -125,4 +126,8 @@
     public boolean isCompressed(){
         return data.compressed();
     }
+
+    public void setMeta(boolean mFlag){
+        data.setMeta(mFlag);
+    }
 }
--- a/src/main/java/alice/topology/manager/CheckComingHost.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/CheckComingHost.java	Mon Feb 15 01:16:35 2016 +0900
@@ -2,6 +2,7 @@
 
 import java.util.HashMap;
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
@@ -9,7 +10,7 @@
 /**
  * This class check hash and put "newHost"(host info) for CreateTopology when putted "host"(join request) from topology node
  */
-public class CheckComingHost extends CodeSegment {
+public class CheckComingHost extends MetaCodeSegment {
     // checkIncomingHost
     private Receiver host = ids.create(CommandType.TAKE);
     private Receiver absCookieTable = ids.create(CommandType.PEEK); // cookie, AbsName HashMap
--- a/src/main/java/alice/topology/manager/ComingServiceHosts.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/ComingServiceHosts.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,13 +1,14 @@
 package alice.topology.manager;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
 /**
  * This class create topology when putted newHost by CheckComingHost
  */
-public class ComingServiceHosts extends CodeSegment{
+public class ComingServiceHosts extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.PEEK);
 
--- a/src/main/java/alice/topology/manager/ConfigWaiter.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/ConfigWaiter.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,12 +1,13 @@
 package alice.topology.manager;
 
+import alice.codesegment.MetaCodeSegment;
 import org.msgpack.type.ValueFactory;
 
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class ConfigWaiter extends CodeSegment {
+public class ConfigWaiter extends MetaCodeSegment {
 
     public Receiver done = ids.create(CommandType.TAKE);
     public int count;
--- a/src/main/java/alice/topology/manager/CreateHash.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/CreateHash.java	Mon Feb 15 01:16:35 2016 +0900
@@ -4,6 +4,7 @@
 import java.security.NoSuchAlgorithmException;
 import java.util.LinkedList;
 
+import alice.codesegment.MetaCodeSegment;
 import org.apache.commons.lang3.RandomStringUtils;
 
 import alice.codesegment.CodeSegment;
@@ -13,7 +14,7 @@
 /**
  * create host cookie
  */
-public class CreateHash extends CodeSegment{
+public class CreateHash extends MetaCodeSegment {
     // this CodeSegment change raw string to MD5
 
     private Receiver info = ids.create(CommandType.TAKE); // order to create
--- a/src/main/java/alice/topology/manager/CreateTreeTopology.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/CreateTreeTopology.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,6 +1,8 @@
 package alice.topology.manager;
 
 import java.util.HashMap;
+
+import alice.codesegment.MetaCodeSegment;
 import org.msgpack.type.ValueFactory;
 
 import alice.codesegment.CodeSegment;
@@ -9,7 +11,7 @@
 import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
 
-public class CreateTreeTopology extends CodeSegment{
+public class CreateTreeTopology extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.TAKE);
     private Receiver info1 = ids.create(CommandType.TAKE);
--- a/src/main/java/alice/topology/manager/IncomingHosts.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/IncomingHosts.java	Mon Feb 15 01:16:35 2016 +0900
@@ -3,6 +3,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
+import alice.codesegment.MetaCodeSegment;
 import org.msgpack.type.ValueFactory;
 
 import alice.codesegment.CodeSegment;
@@ -11,7 +12,7 @@
 import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
 
-public class IncomingHosts extends CodeSegment {
+public class IncomingHosts extends MetaCodeSegment {
 
     private Receiver topology = ids.create(CommandType.TAKE);  // Topology from parse file
     private Receiver nodeNames = ids.create(CommandType.TAKE); // nodeName list
--- a/src/main/java/alice/topology/manager/RecodeTopology.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/RecodeTopology.java	Mon Feb 15 01:16:35 2016 +0900
@@ -4,6 +4,7 @@
 import java.util.LinkedList;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
@@ -12,7 +13,7 @@
  * This class update "topology"(topology info).
  * "topology" has HashMap<String:nodeName, LinkedList<HostMessage>>
  */
-public class RecodeTopology extends CodeSegment {
+public class RecodeTopology extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.TAKE);  // NodeInfo
     private Receiver info1 = ids.create(CommandType.TAKE); // HashMap
--- a/src/main/java/alice/topology/manager/SearchHostName.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/SearchHostName.java	Mon Feb 15 01:16:35 2016 +0900
@@ -3,6 +3,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
+import alice.codesegment.MetaCodeSegment;
 import org.msgpack.type.ValueFactory;
 
 import alice.codesegment.CodeSegment;
@@ -11,7 +12,7 @@
 import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
 
-public class SearchHostName extends CodeSegment {
+public class SearchHostName extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.TAKE);  // reconnect NodeInfo
     private Receiver info1 = ids.create(CommandType.TAKE); // topology recode (HashMap)
--- a/src/main/java/alice/topology/manager/StartTopologyManager.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/StartTopologyManager.java	Mon Feb 15 01:16:35 2016 +0900
@@ -7,6 +7,7 @@
 import java.util.HashMap;
 import java.util.LinkedList;
 
+import alice.codesegment.MetaCodeSegment;
 import org.apache.log4j.Logger;
 
 import alice.codesegment.CodeSegment;
@@ -19,7 +20,7 @@
 import com.alexmerz.graphviz.objects.Graph;
 import com.alexmerz.graphviz.objects.Node;
 
-public class StartTopologyManager extends CodeSegment {
+public class StartTopologyManager extends MetaCodeSegment {
 
     TopologyManagerConfig conf;
     Logger logger = Logger.getLogger(StartTopologyManager.class);
--- a/src/main/java/alice/topology/manager/TopologyFinish.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/TopologyFinish.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,10 +1,11 @@
 package alice.topology.manager;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class TopologyFinish extends CodeSegment {
+public class TopologyFinish extends MetaCodeSegment {
     public Receiver finish = ids.create(CommandType.TAKE);
     @Override
     public void run() {
--- a/src/main/java/alice/topology/manager/keeparive/CreateTask.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/CreateTask.java	Mon Feb 15 01:16:35 2016 +0900
@@ -3,10 +3,11 @@
 import java.util.List;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class CreateTask extends CodeSegment{
+public class CreateTask extends MetaCodeSegment {
     private Receiver info = ids.create(CommandType.PEEK);
     private Receiver info1 = ids.create(CommandType.TAKE);
     public static int INTERVAL = 5;
--- a/src/main/java/alice/topology/manager/keeparive/RemoveTask.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/RemoveTask.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,10 +1,11 @@
 package alice.topology.manager.keeparive;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class RemoveTask extends CodeSegment {
+public class RemoveTask extends MetaCodeSegment {
     private Receiver info1 = ids.create(CommandType.TAKE); // list
     private Receiver info2 = ids.create(CommandType.TAKE); // remove task
 
--- a/src/main/java/alice/topology/manager/keeparive/RespondPing.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/RespondPing.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,10 +1,11 @@
 package alice.topology.manager.keeparive;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class RespondPing extends CodeSegment{
+public class RespondPing extends MetaCodeSegment{
     private Receiver respond = ids.create(CommandType.TAKE);
 //    private long pingedTime = System.currentTimeMillis();
 
--- a/src/main/java/alice/topology/manager/keeparive/StartKeepAlive.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/StartKeepAlive.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,8 +1,9 @@
 package alice.topology.manager.keeparive;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 
-public class StartKeepAlive extends CodeSegment {
+public class StartKeepAlive extends MetaCodeSegment {
 
     @Override
     public void run() {
--- a/src/main/java/alice/topology/manager/keeparive/TaskExecuter.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/manager/keeparive/TaskExecuter.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,11 +1,12 @@
 package alice.topology.manager.keeparive;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.DataSegment;
 import alice.datasegment.Receiver;
 
-public class TaskExecuter extends CodeSegment {
+public class TaskExecuter extends MetaCodeSegment {
     private Receiver info = ids.create(CommandType.TAKE);
     private TaskInfo nowTask;
     private boolean sleepFlag = false;
--- a/src/main/java/alice/topology/node/CloseRemoteDataSegment.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/CloseRemoteDataSegment.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,12 +1,13 @@
 package alice.topology.node;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.DataSegment;
 import alice.datasegment.Receiver;
 import alice.topology.manager.keeparive.ListManager;
 
-public class CloseRemoteDataSegment extends CodeSegment {
+public class CloseRemoteDataSegment extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.TAKE);
     private Receiver info1 = ids.create(CommandType.TAKE);
--- a/src/main/java/alice/topology/node/ClosedEventManager.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/ClosedEventManager.java	Mon Feb 15 01:16:35 2016 +0900
@@ -3,10 +3,11 @@
 import java.util.ArrayList;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class ClosedEventManager extends CodeSegment{
+public class ClosedEventManager extends MetaCodeSegment{
 
     private Receiver info = ids.create(CommandType.PEEK);
     private static ClosedEventManager instance = new ClosedEventManager();
--- a/src/main/java/alice/topology/node/ConfigurationFinish.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/ConfigurationFinish.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,5 +1,6 @@
 package alice.topology.node;
 
+import alice.codesegment.MetaCodeSegment;
 import org.msgpack.type.ValueFactory;
 
 import alice.codesegment.CodeSegment;
@@ -7,7 +8,7 @@
 import alice.datasegment.Receiver;
 import alice.topology.manager.keeparive.StartKeepAlive;
 
-public class ConfigurationFinish extends CodeSegment {
+public class ConfigurationFinish extends MetaCodeSegment {
 
     public Receiver reverseCount = ids.create(CommandType.PEEK);
     public Receiver configNodeNum = ids.create(CommandType.PEEK);
--- a/src/main/java/alice/topology/node/CreateConnectionList.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/CreateConnectionList.java	Mon Feb 15 01:16:35 2016 +0900
@@ -3,10 +3,11 @@
 import java.util.List;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class CreateConnectionList extends CodeSegment {
+public class CreateConnectionList extends MetaCodeSegment {
     private Receiver info = ids.create(CommandType.TAKE);  // connection List
     private Receiver info1 = ids.create(CommandType.TAKE); // connection names
 
--- a/src/main/java/alice/topology/node/ExecuteEvent.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/ExecuteEvent.java	Mon Feb 15 01:16:35 2016 +0900
@@ -4,10 +4,11 @@
 
 import alice.codesegment.CloseEventCodeSegment;
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class ExecuteEvent<T> extends CodeSegment {
+public class ExecuteEvent<T> extends MetaCodeSegment {
 
     public Receiver info = ids.create(CommandType.TAKE);
     public Receiver info1 = ids.create(CommandType.TAKE);
--- a/src/main/java/alice/topology/node/IncomingAbstractHostName.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/IncomingAbstractHostName.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,10 +1,11 @@
 package alice.topology.node;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class IncomingAbstractHostName extends CodeSegment {
+public class IncomingAbstractHostName extends MetaCodeSegment {
 
     public Receiver absName = ids.create(CommandType.PEEK);
     private int topMNumber;
--- a/src/main/java/alice/topology/node/IncomingConnectionInfo.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/IncomingConnectionInfo.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,12 +1,13 @@
 package alice.topology.node;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.DataSegment;
 import alice.datasegment.Receiver;
 import alice.topology.HostMessage;
 
-public class IncomingConnectionInfo extends CodeSegment {
+public class IncomingConnectionInfo extends MetaCodeSegment {
 
     public Receiver hostInfo = ids.create(CommandType.TAKE);
     private String absName;//nodeName
--- a/src/main/java/alice/topology/node/IncomingReverseKey.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/IncomingReverseKey.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,11 +1,12 @@
 package alice.topology.node;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.DataSegment;
 import alice.datasegment.Receiver;
 
-public class IncomingReverseKey extends CodeSegment {
+public class IncomingReverseKey extends MetaCodeSegment {
 
     public Receiver reverseKey = ids.create(CommandType.TAKE);
     public Receiver reverseCount = ids.create(CommandType.PEEK);
--- a/src/main/java/alice/topology/node/PrepareToAddList.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/PrepareToAddList.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,10 +1,11 @@
 package alice.topology.node;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class PrepareToAddList extends CodeSegment {
+public class PrepareToAddList extends MetaCodeSegment {
 
     public Receiver info = ids.create(CommandType.TAKE);
     public Receiver info2 = ids.create(CommandType.TAKE);
--- a/src/main/java/alice/topology/node/PrepareToClose.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/PrepareToClose.java	Mon Feb 15 01:16:35 2016 +0900
@@ -3,12 +3,13 @@
 import java.util.List;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.DataSegment;
 import alice.datasegment.DataSegmentManager;
 import alice.datasegment.Receiver;
 
-public class PrepareToClose extends CodeSegment {
+public class PrepareToClose extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.PEEK);
     private Receiver info1 = ids.create(CommandType.TAKE);
--- a/src/main/java/alice/topology/node/ReceiveCloseMessage.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/ReceiveCloseMessage.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,10 +1,11 @@
 package alice.topology.node;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class ReceiveCloseMessage extends CodeSegment {
+public class ReceiveCloseMessage extends MetaCodeSegment {
 
     private Receiver info;
 
--- a/src/main/java/alice/topology/node/RegisterEvent.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/RegisterEvent.java	Mon Feb 15 01:16:35 2016 +0900
@@ -3,10 +3,11 @@
 import java.util.List;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class RegisterEvent<T> extends CodeSegment {
+public class RegisterEvent<T> extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.TAKE);  // new event
     private Receiver info1 = ids.create(CommandType.TAKE); // event list
--- a/src/main/java/alice/topology/node/SaveCookie.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/SaveCookie.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,10 +1,11 @@
 package alice.topology.node;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class SaveCookie extends CodeSegment{
+public class SaveCookie extends MetaCodeSegment {
 
     private Receiver info = ids.create(CommandType.PEEK);
 
--- a/src/main/java/alice/topology/node/Start.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/Start.java	Mon Feb 15 01:16:35 2016 +0900
@@ -1,12 +1,13 @@
 package alice.topology.node;
 
+import alice.codesegment.MetaCodeSegment;
 import org.apache.log4j.Logger;
 
 import alice.codesegment.CodeSegment;
 import alice.datasegment.CommandType;
 import alice.datasegment.Receiver;
 
-public class Start extends CodeSegment {
+public class Start extends MetaCodeSegment {
 
     public Receiver done = ids.create(CommandType.PEEK);
 
--- a/src/main/java/alice/topology/node/StartTopologyNode.java	Wed Feb 10 20:55:51 2016 +0900
+++ b/src/main/java/alice/topology/node/StartTopologyNode.java	Mon Feb 15 01:16:35 2016 +0900
@@ -6,10 +6,11 @@
 import java.util.LinkedList;
 
 import alice.codesegment.CodeSegment;
+import alice.codesegment.MetaCodeSegment;
 import alice.datasegment.DataSegment;
 import alice.topology.HostMessage;
 
-public class StartTopologyNode extends CodeSegment {
+public class StartTopologyNode extends MetaCodeSegment {
 
     private LinkedList<TopologyNodeConfig> configs;
     private TopologyNodeConfig conf;