changeset 14:b9b3f2241ab4

modify chapter2
author sugi
date Tue, 13 Jan 2015 17:10:56 +0900
parents ef47dab5764f
children 930eae4e8aeb
files paper/chapter1.tex paper/chapter2.tex paper/chapter3.tex paper/images/TopologyFix.pdf paper/images/TopologyFix2.pdf paper/images/TopologyFix3.pdf paper/master_paper.tex paper/source/ShowData.java paper/source/ShowDataFailed.java
diffstat 9 files changed, 97 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/paper/chapter1.tex	Mon Jan 12 19:35:31 2015 +0900
+++ b/paper/chapter1.tex	Tue Jan 13 17:10:56 2015 +0900
@@ -237,7 +237,24 @@
 \end{figure}
 
 \section{Aliceによるプログラミング手法}
+AliceはCode SegmentとData Segmentによってプログラミングを行なう。Code Segmentから別にCode SegmentへData Segmentを引き渡す際、コンストラクタは使わない。Code SegmentがLocal / Remote Data Segmentに対してputを行い、別のCode SegmentがLocal / Remote Data Segmentに対してpeekを行うことで引き渡される。つまり、Code Segmentは実行前後にData Segmentへ通信が行われるのである。この通信の順序がCode Segmentの実行順序を決定している。
+すなわち、Aliceによるプログラミングとは通信の管理を行うことであり、プロトコルを設計することと捉える事ができる。
+
 \subsection{記述に関する注意点}
-\subsubsection{nullpointerException}
-\subsubsection{Message Packの使い方}
+\subsubsection{setKey のシンタックス問題}
+setKeyメソッドをコンストラクタ等で呼ぶ際、setKeyメソッドを必ず最後に呼ばなければならない。
+
+Code Segmentは内部で実行に必要なData Segmentを数えている。Data Segmentの取得に成功するとこの値が、デクリメントされ、0になると必要なData Segmentが全て揃ったことと判断される。全て揃った際にはThread poolへ送られる。
+
+setKey移行に処理を記述した場合、その処理が行われない可能性がありThread poolへと送られNullPointerExceptionを引き起こす。
+
+\begin{table}[html]
+\lstinputlisting[label=src:NullPointerException,caption=NullPointerExceptionになる可能性がある]{source/ShowDataFailed.java}
+\end{table}
+
+ソースコード\ref{src:NullPointerException}は、for文でsetKeyとids.createをcntの回数呼び、動的にData Segmentの取得数を決めようとしている。しかし、setKeyが最初に呼ばれた際に、Data Segmentの取得に成功すると実行可能と判断されてしまう。runの中でinfoの配列の要素だけ中身を表示させようとしてるが、2回目のasClassでNullPointExceptionを引き起こす。今回の場合、コンストラクタ内をソースコード\ref{src:success}のように記述する必要がある。
+
+\begin{table}[html]
+\lstinputlisting[label=src:success,caption=NullPointerExceptionにならない記述]{source/ShowData.java}
+\end{table}
 \subsubsection{singleton Code Segment}
\ No newline at end of file
--- a/paper/chapter2.tex	Mon Jan 12 19:35:31 2015 +0900
+++ b/paper/chapter2.tex	Tue Jan 13 17:10:56 2015 +0900
@@ -98,7 +98,7 @@
 
 %画像挿入
 
-subsection{処理の流れ}
+\subsection{処理の流れ}
 図\ref{fig:NodeToClient}はデータの伝搬の様子をコラボレーションダイアグラムで示したものである。
 \begin{enumerate}
 \item ユーザーが魚を操作することで魚の座標のData SegmentであるfishDataが更新される。
--- a/paper/chapter3.tex	Mon Jan 12 19:35:31 2015 +0900
+++ b/paper/chapter3.tex	Tue Jan 13 17:10:56 2015 +0900
@@ -73,7 +73,6 @@
 接続状態に問題があり、{\tt CLOSE}タスクの実行されるまでにレスポンスがない場合は、{\tt CLOSE}タスクによりRemote Data Segmentが削除される。
 
 heartbeatは、Node AからNode Bに一方向に送られる訳ではなく、Node BからNode Aにも送られている。
-%Singleton Code Segmentの注意点 ids.initが必要とその理由の記述
 
 \section{切断時の処理}
 DataBaseではデータ更新の際にトランザクション処理に障害が起こった場合、DataBase側でトランザクション処理開始前に戻すロールバックという処理が行われる。
@@ -99,7 +98,53 @@
 その際は、もちろんInput Data Segmentが全て揃うまでCode Segmentは実行されない。
 
 \section{Topologyの再構成}
-AliceVNCのTopologyは木構造であるため、木の途中のNodeが切断した場合にTopologyを再構成しなければならない。特定の切断時の処理が終わると自動でTopologyの再構成を行なう。
+ノードは永続的にアプリケーションに参加し続ける訳ではない。目的を果たすとアプリケーションから離脱する。
+Topology次第では、アプリケーションに支障をきたす。
+例えば、AliceVNCは木構造であるため、子ノードを持つノードがアプリケーションから離脱した場合、その子ノードに対してデータを送信することができなくなる。
+
+この問題を解決するには、アプリケーションからノードが切断するたびにTopologyの再構成を行なう必要がある。そこで、Dynamic Topology Managerに、Topologyの再構成を行う機能を追加した。
+
+図 \ref{fig:TopologyFIx}、 \ref{fig:TopologyFIx2}、\ref{fig:TopologyFIx3}はTopologyの再構成をコラボレーションダイアグラムで表したものである。
+
+%コラボレーションダイアグラム図の挿入
+\begin{figure}[htbp]
+\begin{center}
+\includegraphics[width=120mm]{images/TopologyFIx.pdf}
+\end{center}
+\caption{切断ノードの検知}
+\label{fig:TopologyFIx}
+\end{figure}
+
+\begin{enumerate}
+\item Keep AliveがNode1の切断を検知すると、Node3からTopology Managerに対して切断したノードの情報がputされる。keep Aliveは各ノードで動いているため、実際にはNode0とNode4もTopology Managerに対してNode1の情報をputする。
+\item Topology Managerは最後にアプリケーションに参加したNode6とその親Node2に対して互いを切断するための準備を行わせる、CLOSEMESSAGEをputする。
+\item 切断する準備ができるとお互いに準備完了を知らせるCLOSEREADYをputする。
+\item \label {tb:last}CLOSEREADYを受け取ると切断を行い、Remote Data Segmentが使用不可能になる。
+\end{enumerate}
+
+\begin{figure}[htbp]
+ \begin{minipage}{0.5\hsize}
+  \begin{center}
+   \includegraphics[width=90mm]{images/TopologyFix2.pdf}
+  \end{center}
+  \caption{接続すべきノード情報の送信}
+  \label{fig:TopologyFIx2}
+ \end{minipage}
+ \begin{minipage}{0.5\hsize}
+ \begin{center}
+  \includegraphics[width=80mm]{images/TopologyFix3.pdf}
+ \end{center}
+  \caption{再構成の完了}
+  \label{fig:TopologyFIx3}
+ \end{minipage}
+\end{figure}
+
+\begin{enumerate}
+\setcounter{enumi}{4}
+\item Node1、Node3、Node4に対してNode6の情報を送り、接続を行わせる。
+\item Node6に対して、Node1、Node3、Node4の情報を送り、接続を行わせる。
+\item お互いにRemote Data Segmentの名前を贈り合い、Remote Data Segmentが利用可能になる。
+\end{enumerate}
 
 \section{再接続の処理}
 
Binary file paper/images/TopologyFix.pdf has changed
Binary file paper/images/TopologyFix2.pdf has changed
Binary file paper/images/TopologyFix3.pdf has changed
--- a/paper/master_paper.tex	Mon Jan 12 19:35:31 2015 +0900
+++ b/paper/master_paper.tex	Tue Jan 13 17:10:56 2015 +0900
@@ -8,7 +8,7 @@
 \usepackage{url}
 \input{dummy.tex} %% font
 
-\jtitle{分散ネットワークフレームワーク Alice 改良}
+\jtitle{分散フレームワーク Alice の改良と評価}
 \etitle{Design and Implementation Distributed network framework Alice}
 \year{平成23年度}
 \affiliation{\center%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/source/ShowData.java	Tue Jan 13 17:10:56 2015 +0900
@@ -0,0 +1,10 @@
+public ShowData(int cnt) {
+    info = new Receiver[cnt];
+    for (int i= 0;i < cnt; i++) {
+        info[i] = ids.create(CommandType.TAKE);
+    }
+
+   for (int i= 0;i < cnt; i++) {
+        info[i].setKey(SetInfo.array[i]);
+   }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/paper/source/ShowDataFailed.java	Tue Jan 13 17:10:56 2015 +0900
@@ -0,0 +1,19 @@
+public class ShowData extends CodeSegment{
+    private Receiver[] info;
+
+    public ShowData(int cnt) {
+        info = new Receiver[cnt];
+        for (int i= 0;i < cnt; i++) {
+            info[i] = ids.create(CommandType.TAKE);
+            info[i].setKey(SetInfo.array[i]);
+	}
+    }
+
+    @Override
+    public void run() {
+        int size = 0;
+        for (Receiver anInfo : info) {
+            DataList dlist = anInfo.asClass(DataList.class);
+	    dlist.showData();
+        }
+    }
\ No newline at end of file