2015-06-27 19 views
2

Hazelcast是否始終阻止以防未到達initial.min.cluster.size?如果不是,在哪種情況下不是?initial.min.cluster.size的行爲


詳情: 我用下面的代碼來初始化hazelcast:

Config cfg = new Config(); 
cfg.setProperty("hazelcast.initial.min.cluster.size",Integer. 
    toString(minimumInitialMembersInHazelCluster)); //2 in this case 
cfg.getGroupConfig().setName(clusterName); 

NetworkConfig network = cfg.getNetworkConfig(); 
JoinConfig join = network.getJoin(); 
join.getMulticastConfig().setEnabled(false); 
join.getTcpIpConfig().addMember("192.168.0.1").addMember("192.168.0.2"). 
    addMember("192.168.0.3").addMember("192.168.0.4"). 
    addMember("192.168.0.5").addMember("192.168.0.6"). 
    addMember("192.168.0.7").setRequiredMember(null).setEnabled(true); 
network.getInterfaces().setEnabled(true).addInterface("192.168.0.*"); 
join.getMulticastConfig().setMulticastTimeoutSeconds(MCSOCK_TIMEOUT/100);   
hazelInst = Hazelcast.newHazelcastInstance(cfg); 
distrDischargedTTGs = hazelInst.getList(clusterName); 

,並得到日誌消息像

調試:從Hazelcluster開始淡褐色pullExternal 1組的成員。

這是否意味着還有其他成員已經加入並離開了?它看起來不像其他實例的日誌文件。因此,我想知道是否存在那些hazelInst = Hazelcast.newHazelcastInstance(cfg);不會阻止的情況,即使它是榛樹羣集中的唯一實例。

+0

更多詳情請參閱http://stackoverflow.com/a/20716919/750378 – DaveFar

回答

2

newHazelcastInstance阻塞,直到羣集具有所需數量的成員。

查看下列它是如何實現的代碼:

private static void awaitMinimalClusterSize(HazelcastInstanceImpl hazelcastInstance, Node node, boolean firstMember) 
     throws InterruptedException { 

    final int initialMinClusterSize = node.groupProperties.INITIAL_MIN_CLUSTER_SIZE.getInteger(); 
    while (node.getClusterService().getSize() < initialMinClusterSize) { 
     try { 
      hazelcastInstance.logger.info("HazelcastInstance waiting for cluster size of " + initialMinClusterSize); 
      //noinspection BusyWait 
      Thread.sleep(TimeUnit.SECONDS.toMillis(1)); 
     } catch (InterruptedException ignored) { 
     } 
    } 
    if (initialMinClusterSize > 1) { 
     if (firstMember) { 
      node.partitionService.firstArrangement(); 
     } else { 
      Thread.sleep(TimeUnit.SECONDS.toMillis(3)); 
     } 
     hazelcastInstance.logger.info("HazelcastInstance starting after waiting for cluster size of " 
       + initialMinClusterSize); 
    } 
} 

如果你設置調試日誌記錄,那麼也許你可以看得更清楚發生了什麼。會員加入和離開應已在信息下可見。

+1

感謝您的快速和良好的答案,pveentjer。一如既往:)我想知道最後一句話:newHazelcastInstance調用awaitMinimalClusterSize,它等待至少initialMinClusterSize實例存在! (但是Thread.sleep可能不會阻止!?) – DaveFar

+0

我不知道這個newHazelcastInstance的調用是否會阻塞,或者是否有任何後續的與集羣的交互會阻塞。我剛剛證實; newHazelcastInstance的調用會阻塞,直到簇具有所需的大小。 – pveentjer

+0

非常感謝,pveentjer :) – DaveFar