okuyama.imdst.util
クラス DataDispatcher

java.lang.Object
  上位を拡張 okuyama.imdst.util.DataDispatcher

public class DataDispatcher
extends java.lang.Object

MasterNodeが使用するDataNode決定モジュール.

作成者:
T.Okuyama

フィールドの概要
static int[] oldRules
           
static java.lang.String rule
           
static int ruleInt
           
 
コンストラクタの概要
DataDispatcher()
           
 
メソッドの概要
static java.util.HashMap addNode4ConsistentHash(java.lang.String keyNodeFullName, java.lang.String subKeyNodeFullName, java.lang.String thirdKeyNodeFullName)
          ConsitentHashモード時にノードの追加をおこなう.
static void clearConsistentHashOldCircle()
          旧サークルが存在する場合は削除する.
static java.lang.String[] dispatchKeyNode(java.lang.String key, boolean reverse)
          Rule値に従って、キー値を渡すことで、KeyNodeの名前とポートの配列を返す.
static java.lang.String[] dispatchKeyNode(java.lang.String key, boolean reverse, int useRule)
          Rule値に従って、キー値を渡すことで、KeyNodeの名前とポートの配列を返す.
static java.util.HashMap getAllDataNodeInfo()
          全てのノードの情報を返す.
static int getDispatchMode()
          振り分けモードを返す.
static boolean getInitFlg()
          初期化の状態を返す.
static int[] getOldRules()
          過去ルールを返す.
static java.util.ArrayList getTransactionManagerInfo()
          TransactionManagerの情報を返す.
static boolean hasOldRule()
          旧ルールの存在有無を返す
static void init(java.lang.String ruleStr, int[] oldRules, java.lang.String keyMapNodes, java.lang.String subKeyMapNodes, java.lang.String thirdKeyMapNodes, java.lang.String transactionManagerStr)
          初期化

以下の要素を設定する.
static void initConsistentHashMode(java.lang.String keyMapNodes, java.lang.String subKeyMapNodes, java.lang.String thirdKeyMapNodes, java.lang.String transactionManagerStr)
          初期化
ConsistentHash専用.
static boolean isRangeData(java.lang.String key, int[][] rangs)
          引数のKey値が引数のレンジの範囲のデータか確認し結果を返す.
static boolean isRuleMatchKey(java.lang.String key, int rule, int matchNo)
          引数のKey値が引数のルールのもと引数のmatchNoと合致するかを返す.
static boolean isStandby()
          本メソッド呼び出すと本クラスを使用できるまで呼び出し元をロック停止させる.
static void setDispatchMode(java.lang.String mode)
           
static int sha1Hash4Int(java.lang.String target)
          sha1のアルゴリズムでHashした値をjavaのhashCodeして返す.
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

rule

public static volatile java.lang.String rule

ruleInt

public static volatile int ruleInt

oldRules

public static volatile int[] oldRules
コンストラクタの詳細

DataDispatcher

public DataDispatcher()
メソッドの詳細

setDispatchMode

public static void setDispatchMode(java.lang.String mode)

getDispatchMode

public static int getDispatchMode()
振り分けモードを返す.

戻り値:
int 0=mod, 1=ConsistentHash

init

public static void init(java.lang.String ruleStr,
                        int[] oldRules,
                        java.lang.String keyMapNodes,
                        java.lang.String subKeyMapNodes,
                        java.lang.String thirdKeyMapNodes,
                        java.lang.String transactionManagerStr)
初期化

以下の要素を設定する.
KeyMapNodesRule=ルール値(2,9,99,999)
KeyMapNodesInfo=Keyノードの設定(KeyNodeName1:11111, KeyNodeName2:22222)
SubKeyMapNodesInfo=スレーブKeyノードの設定(KeyNodeName1:11111, KeyNodeName2:22222)
SubKeyMapNodesInfoは設定なしも可能。その場合はnullを設定
ThirdKeyMapNodesInfo=サードKeyノードの設定(KeyNodeName1:11111, KeyNodeName2:22222)
ThirdKeyMapNodesInfoは設定なしも可能。その場合はnullを設定
※SubKeyMapNodesInfoは設定しないとThirdKeyMapNodesInfoは設定することは出来ない
記述の決まり.

KeyMapNodesRule:KeyNodeの数を記載
ここでの記述は過去の台数の経緯を記載する必要がある
たとえは5台でまずKeyNodeを稼動させその後10台に増やした場合の記述は「10,5」となる。その後15台にした場合は
「15,10,5」となる

KeyMapNodesInfo:KeyNode(データ保存ノード)をIPアドレス(マシン名)とポート番号を":"で連結した状態で記述

SubKeyMapNodesInfo:スレーブとなるのKeyNodeをKeyMapNodesInfoと同様の記述方法で記述。KeyMapNodesInfoと同様の数である必要がある。

ThirdKeyMapNodesInfo:サードとなるのKeyNodeをKeyMapNodesInfoと同様の記述方法で記述。KeyMapNodesInfoと同様の数である必要がある。

パラメータ:
ruleStr - ルール設定
oldRules - 過去ルール設定
keyMapNodes - データノードを指定
subKeyMapNodes - スレーブデータノードを指定
thirdKeyMapNodes - スレーブデータノードを指定
transactionManagerStr - トランザクションマネージャの指定

initConsistentHashMode

public static void initConsistentHashMode(java.lang.String keyMapNodes,
                                          java.lang.String subKeyMapNodes,
                                          java.lang.String thirdKeyMapNodes,
                                          java.lang.String transactionManagerStr)
初期化
ConsistentHash専用.

以下の要素を設定する.
KeyMapNodesInfo=Keyノードの設定(KeyNodeName1:11111, KeyNodeName2:22222)
SubKeyMapNodesInfo=スレーブKeyノードの設定(KeyNodeName1:11111, KeyNodeName2:22222)
SubKeyMapNodesInfoは設定なしも可能。その場合はnullを設定
ThirdKeyMapNodesInfo=スレーブKeyノードの設定(KeyNodeName1:11111, KeyNodeName2:22222)
ThirdKeyMapNodesInfoは設定なしも可能。その場合はnullを設定
※SubKeyMapNodesInfoは設定しないがThirdKeyMapNodesInfoは設定することは出来ない
記述の決まり.


KeyMapNodesInfo:KeyNode(データ保存ノード)をIPアドレス(マシン名)とポート番号を":"で連結した状態で記述

SubKeyMapNodesInfo:スレーブとなるのKeyNodeをKeyMapNodesInfoと同様の記述方法で記述。KeyMapNodesInfoと同様の数である必要がある。

ThirdKeyMapNodesInfo:サードとなるのKeyNodeをKeyMapNodesInfoと同様の記述方法で記述。KeyMapNodesInfoと同様の数である必要がある。

パラメータ:
keyMapNodes - データノードを指定
subKeyMapNodes - スレーブデータノードを指定
thirdKeyMapNodes - スレーブデータノードを指定
transactionManagerStr - トランザクションマネージャの指定

getInitFlg

public static boolean getInitFlg()
初期化の状態を返す.


addNode4ConsistentHash

public static java.util.HashMap addNode4ConsistentHash(java.lang.String keyNodeFullName,
                                                       java.lang.String subKeyNodeFullName,
                                                       java.lang.String thirdKeyNodeFullName)
ConsitentHashモード時にノードの追加をおこなう.
本メソッドを呼びだすと、新しいノードのサークルを作りなおす前に、旧ノードのサークルを作成し、keyNodeMapに
"oldNodeCircle"という名前で登録する.
返却値はノード登録によって移動しなければいけないデータのHash化した数値の範囲データ。このデータをノードの
FullNameをキー値としてHashMapに詰めて返す.
メインデータノードは返却値のHashMapに"main"というキー値で、スレーブは"sub"というキーとで、サードは"third"というキーとでMapが格納されている.
移動先のノードはメインノードが"tomain"というキー値で、スレーブが"tosub"というキー値で、サードが"tothird"というキー値で格納されている.

パラメータ:
keyNodeFullName - 追加するメインデータノード フォーマット"192.168.1.3:5555"
subKeyNodeFullName - 追加するスレーブデータノード フォーマット"192.168.2.3:5555"
thirdKeyNodeFullName - 追加するサードデータノード フォーマット"192.168.2.3:5555"
戻り値:
HashMap 変更対象データの情報

clearConsistentHashOldCircle

public static void clearConsistentHashOldCircle()
旧サークルが存在する場合は削除する.


getOldRules

public static int[] getOldRules()
過去ルールを返す.

戻り値:
int[] 過去ルールリスト

dispatchKeyNode

public static java.lang.String[] dispatchKeyNode(java.lang.String key,
                                                 boolean reverse)
Rule値に従って、キー値を渡すことで、KeyNodeの名前とポートの配列を返す.
スレーブノードの指定がある場合は同時に値を返す。その場合は配列のレングスが6、Thirdが存在する場合は9となる
振り分けアルゴリズムはMod or ConsistentHash
[Mod]
ノード振り分けアルゴリズムは除算のあまりより決定
hash値 % ノード台数 = 振り分け先

[ConsistentHash]
ConsistentHash法にもとづき決定.

パラメータ:
key - キー値
reverse - 逆転指定
戻り値:
String 対象キーノードの情報(サーバ名、ポート番号)

dispatchKeyNode

public static java.lang.String[] dispatchKeyNode(java.lang.String key,
                                                 boolean reverse,
                                                 int useRule)
Rule値に従って、キー値を渡すことで、KeyNodeの名前とポートの配列を返す.
スレーブノードの指定がある場合は同時に値を返す。その場合は配列のレングスが6、Thirdが存在する場合は9となる
振り分けアルゴリズムはMod or ConsistentHash
本メソッドはノードを追加後に旧ノード構成時のルールで格納しているノードを返す.
Modではノード追加に合わせて過去の履歴でそれぞれのノードに問い合わせる
[Mod]
ノード振り分けアルゴリズムは除算のあまりより決定
hash値 % ノード台数 = 振り分け先

[ConsistentHash]
ConsistentHash法にもとづき決定.

パラメータ:
key - キー値
reverse - 逆転指定
useRule - 旧ルール世代値
戻り値:
String[] 対象キーノードの情報(サーバ名、ポート番号)

isRuleMatchKey

public static boolean isRuleMatchKey(java.lang.String key,
                                     int rule,
                                     int matchNo)
引数のKey値が引数のルールのもと引数のmatchNoと合致するかを返す.

パラメータ:
key - 対象のキー値
rule - 使用ルール
matchNo - 検証No
戻り値:
boolean 結果

isRangeData

public static boolean isRangeData(java.lang.String key,
                                  int[][] rangs)
引数のKey値が引数のレンジの範囲のデータか確認し結果を返す.

パラメータ:
key - 対象のキー値
rangs - 範囲
戻り値:
boolean 結果

getAllDataNodeInfo

public static java.util.HashMap getAllDataNodeInfo()
全てのノードの情報を返す.
その際返却値のMapには"main"と"sub"と"third"という文字列Keyで、それぞれArrayListに
名前とポート番号を":"で連結した状態で格納して返す.
"sub"はスレーブノードが設定しれていない場合はなしとなる
"third"はサードノードが設定しれていない場合はなしとなる
※subは設定しないがthirdは設定することは出来ない

戻り値:

getTransactionManagerInfo

public static java.util.ArrayList getTransactionManagerInfo()
TransactionManagerの情報を返す.


sha1Hash4Int

public static int sha1Hash4Int(java.lang.String target)
sha1のアルゴリズムでHashした値をjavaのhashCodeして返す.
マイナス値は返さない

パラメータ:
targete -
int -

hasOldRule

public static boolean hasOldRule()
旧ルールの存在有無を返す

戻り値:
boolean

isStandby

public static boolean isStandby()
本メソッド呼び出すと本クラスを使用できるまで呼び出し元をロック停止させる.

戻り値:
boolean