Reputation: 374
I want to use Quorum for map lock operations for my map : myMap.
I use programmatic configuration for quorum.
QuorumConfig quorumConfig = new QuorumConfig();
quorumConfig.setName("xxx");
quorumConfig.setEnabled(true);
quorumConfig.setQuorumFunctionImplementation(new QuorumFunction() {
@Override
public boolean apply(Collection<Member> members) {
...
}
});
I use com.hazelcast.config.MapConfig.setQuorumName method to set quorum ımpl.
My map config seems below as quorum is set to xxx.
MapConfig{name='myMap', inMemoryFormat=BINARY', ...., mapAttributeConfigs=null, quorumName=xxx, queryCacheConfigs=null, cacheDeserializedValues=INDEX_ONLY}
The problem is, for lock operations, quorum function is not invoked.
For map put /remove operations I see that quorum function is respected.
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)
But quorum is NOT USED FOR lock operations.
In the documentation xml config is given for lock operations.
Example config is given as:
An example of declarative configuration:
<map name="myMap"> <quorum-ref>map-actions-quorum</quorum-ref> </map> <lock name="myMap"> <quorum-ref>map-lock-actions-quorum</quorum-ref> </lock>
Here the configured map will use the map-lock-actions-quorum quorum for map lock actions and the map-actions-quorum quorum for other map actions.
What is the programmatic equivalent of this?
Regards
Upvotes: 0
Views: 540
Reputation: 1098
Here is a sample for configuring Quorum for Lock:
Config config = new Config();
LockConfig lockConfig = new LockConfig();
lockConfig.setName("myLock")
.setQuorumName("quorum-name");
config.addLockConfig(lockConfig);
Check out link for details: http://docs.hazelcast.org/docs/3.8.3/manual/html-single/index.html#lock-configuration
Upvotes: 1