2017-07-19 73 views
0

我想爲我的地圖使用Quorum進行地圖鎖定操作:myMap。Hazelcast - IMAP如何使用鎖定操作的法定人數?

我使用法定配置的編程配置。

 QuorumConfig quorumConfig = new QuorumConfig(); 
     quorumConfig.setName("xxx"); 
     quorumConfig.setEnabled(true); 

     quorumConfig.setQuorumFunctionImplementation(new QuorumFunction() { 
      @Override 
      public boolean apply(Collection<Member> members) { 
       ... 
      } 
     }); 

我用com.hazelcast.config.MapConfig.setQuorumName方法來設置仲裁IMPL。

我的地圖配置似乎低於法定人數設置爲xxx。

MapConfig {名稱= 'MYMAP',inMemoryFormat = BINARY」,...,mapAttributeConfigs = NULL,quorumName = XXX,queryCacheConfigs = NULL,cacheDeserializedValues = INDEX_ONLY}

的問題是,用於鎖定的操作,仲裁函數未被調用。

對於映射放置/刪除操作,我看到法定函數受到尊重。

com.hazelcast.quorum.QuorumException: Cluster quorum failed at com.hazelcast.quorum.impl.QuorumImpl.newQuorumException(QuorumImpl.java:164) at com.hazelcast.quorum.impl.QuorumImpl.ensureQuorumPresent(QuorumImpl.java:158) at com.hazelcast.quorum.impl.QuorumServiceImpl.ensureQuorumPresent(QuorumServiceImpl.java:127) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.ensureQuorumPresent(OperationRunnerImpl.java:237) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:178) at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.process(OperationThread.java:120) at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:100) at ------ submitted from ------.(Unknown Source) at java.lang.Thread.getStackTrace(Thread.java:1117) at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolve(InvocationFuture.java:114) at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveAndThrowIfException(InvocationFuture.java:75) at com.hazelcast.spi.impl.AbstractInvocationFuture.get(AbstractInvocationFuture.java:155) at com.hazelcast.map.impl.proxy.MapProxySupport.invokeOperation(MapProxySupport.java:373) at com.hazelcast.map.impl.proxy.MapProxySupport.removeInternal(MapProxySupport.java:508) at com.hazelcast.map.impl.proxy.MapProxyImpl.remove(MapProxyImpl.java:211)

但仲裁不用於鎖定操作。

在文檔xml config中給出了鎖定操作。

http://docs.hazelcast.org/docs/latest-development/manual/html/Distributed_Data_Structures/Map/Locking_Maps.html

實施例的配置被給定爲:

聲明性結構的一個例子:

<map name="myMap"> 
    <quorum-ref>map-actions-quorum</quorum-ref> 
</map> 

<lock name="myMap"> 
    <quorum-ref>map-lock-actions-quorum</quorum-ref> 
</lock> 

這裏所配置的映射將使用的地圖鎖定動作-仲裁仲裁 用於地圖鎖定操作以及其他地圖 操作的地圖操作 - 法定人數法定人數。

這是什麼程序對等?

問候

回答

1

下面是配置法定人數鎖定一個樣本:

Config config = new Config(); 
LockConfig lockConfig = new LockConfig(); 
lockConfig.setName("myLock") 
      .setQuorumName("quorum-name"); 
config.addLockConfig(lockConfig); 

退房的鏈接瞭解詳細信息:http://docs.hazelcast.org/docs/3.8.3/manual/html-single/index.html#lock-configuration

+0

所以我應該設置lockConfig的名稱的名稱我地圖?在我的情況lockConfig.setName(「myMap」)? – simpleusr

+0

您需要適當地設置仲裁名稱。請參閱文檔中的註釋:「如上所述,具有相同名稱或與地圖名稱匹配的模式的鎖的仲裁定義將強制地圖鎖定操作使用定義的仲裁。重要的是在記住時注意這一點使用鎖定仲裁和地圖鎖定操作。「 – wildnez