okuyamaをマルチマスター化するための最初のokuyamaクライアントの改造を完了したところ
@@ -610,8 +610,14 @@ | ||
610 | 610 | } |
611 | 611 | |
612 | 612 | |
613 | - // 全てのマスターノードの接続情報 | |
614 | - imdstKeyValueClient.setValue(ImdstDefine.ConfigSaveNodePrefix + ImdstDefine.Prop_DistributionAlgorithm, dispatchMode); | |
613 | + // 分散アルゴリズム情報 | |
614 | + nodeRet = imdstKeyValueClient.getValue(ImdstDefine.ConfigSaveNodePrefix + ImdstDefine.Prop_DistributionAlgorithm); | |
615 | + if (nodeRet[0].equals("false") && StatusUtil.isMainMasterNode()) { | |
616 | + // 設定情報の枠がない場合は自身の情報を登録 | |
617 | + imdstKeyValueClient.setValue(ImdstDefine.ConfigSaveNodePrefix + ImdstDefine.Prop_DistributionAlgorithm, dispatchMode); | |
618 | + } else if (nodeRet[0].equals("error")) { | |
619 | + // 何もしない | |
620 | + } | |
615 | 621 | |
616 | 622 | |
617 | 623 | // ConsistentHashModeの場合はノードの追加要望がないかを調べる |
@@ -238,8 +238,9 @@ | ||
238 | 238 | // Defaultエンコーディング |
239 | 239 | private static String platformDefaultEncoding = Charset.defaultCharset().name(); |
240 | 240 | |
241 | + // okuyamaをマルチクラスター化した場合のスレーブのクラスターのMasterNodeのアドレス:port名 | |
242 | + private String slaveOkuyamaClusterNode = null; | |
241 | 243 | |
242 | - | |
243 | 244 | /** |
244 | 245 | * コンストラクタ |
245 | 246 | * |
@@ -296,6 +297,19 @@ | ||
296 | 297 | * @param masterNodes 接続情報の配列 "IP:PORT"の形式 |
297 | 298 | */ |
298 | 299 | public void setConnectionInfos(String[] masterNodes) { |
300 | + this.setConnectionInfos(masterNodes, null); | |
301 | + } | |
302 | + | |
303 | + /** | |
304 | + * MasterNodeの接続情報を設定する.<br> | |
305 | + * 本メソッドでセットし、autoConnect()メソッドを<br> | |
306 | + * 呼び出すと、自動的にその時稼動しているMasterNodeにバランシングして<br> | |
307 | + * 接続される。接続出来ない場合は、別のMasterNodeに再接続される.<br> | |
308 | + * | |
309 | + * @param masterNodes 接続情報の配列 "IP:PORT"の形式 | |
310 | + * @param slaveOkuyamaClusterNode スレーブのokuyamaのMasterNodeのアドレスとポート番号(フォーマットは"アドレス:ポート番号") | |
311 | + */ | |
312 | + public void setConnectionInfos(String[] masterNodes, String slaveOkuyamaClusterNode) { | |
299 | 313 | this.initParamMasterNodes = masterNodes; |
300 | 314 | |
301 | 315 | this.masterNodesList = new ArrayList(masterNodes.length); |
@@ -302,6 +316,8 @@ | ||
302 | 316 | for (int i = 0; i < masterNodes.length; i++) { |
303 | 317 | this.masterNodesList.add(masterNodes[i]); |
304 | 318 | } |
319 | + | |
320 | + this.slaveOkuyamaClusterNode = slaveOkuyamaClusterNode; | |
305 | 321 | } |
306 | 322 | |
307 | 323 | /** |
@@ -420,7 +436,21 @@ | ||
420 | 436 | } |
421 | 437 | if(tmpMasterNodeList.size() < 1) { |
422 | 438 | |
423 | - throw new OkuyamaClientException(e); | |
439 | + if (this.slaveOkuyamaClusterNode == null) { | |
440 | + throw new OkuyamaClientException(e); | |
441 | + } else { | |
442 | + // スレーブのokuyamaクラスターが存在する場合はこちらの処理 | |
443 | + while (true) { | |
444 | + // スレーブに接続を試みる | |
445 | + try { | |
446 | + // スレーブのポートを起動するのは手動なので、繋がるまでリトライ | |
447 | + String[] slaveOkuyamaClusterNodeInfo = slaveOkuyamaClusterNode.split(":"); | |
448 | + this.connect(slaveOkuyamaClusterNodeInfo[0], Integer.parseInt(slaveOkuyamaClusterNodeInfo[1])); | |
449 | + return; | |
450 | + } catch (Exception slaveConnectEx){ | |
451 | + } | |
452 | + } | |
453 | + } | |
424 | 454 | } |
425 | 455 | } |
426 | 456 | } |