2017-07-19 68 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