【发布时间】:2017-07-19 08:11:40
【问题描述】:
我想使用 Quorum 对我的地图进行地图锁定操作:myMap。
我对仲裁使用编程配置。
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 方法来设置 quorum ımpl。
由于 quorum 设置为 xxx,我的地图配置如下所示。
MapConfig{name='myMap', inMemoryFormat=BINARY', ...., mapAttributeConfigs=null, quorumName=xxx, queryCacheConfigs=null, cacheDeserializedValues=INDEX_ONLY}
问题是,对于锁操作,quorum函数没有被调用。
对于 map put /remove 操作,我看到仲裁功能受到尊重。
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)
但 quorum 不用于锁定操作。
在文档中为锁定操作提供了 xml 配置。
示例配置如下:
声明式配置示例:
<map name="myMap"> <quorum-ref>map-actions-quorum</quorum-ref> </map> <lock name="myMap"> <quorum-ref>map-lock-actions-quorum</quorum-ref> </lock>此处配置的地图将使用 map-lock-actions-quorum quorum 用于地图锁定操作和其他地图的 map-actions-quorum quorum 行动。
什么是程序化的等价物?
问候
【问题讨论】:
标签: java locking hazelcast hazelcast-imap