2017-07-19 15 views
0

map:myMapのマップロック操作にクォーラムを使用したいと思います。Hazelcast - ロック操作のためにクォーラムを使用する方法をIMapする?

私は定足数にプログラム設定を使用します。私は定足数IMPLを設定するcom.hazelcast.config.MapConfig.setQuorumNameメソッドを使用

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

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

クォラムがxxxに設定されているため、私のマップ設定は以下のようです。

MapConfig {NAME = 'MYMAP'、inMemoryFormat = BINARY」、....、mapAttributeConfigs =ヌル、quorumName = XXX、queryCacheConfigs =ヌル、cacheDeserializedValues = INDEX_ONLY}

問題は、ロック操作のため、クォーラム機能が呼び出されません。

マップの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)

しかし、定足数ロック操作には使用されません。

ドキュメントでは、xmlの設定はロック操作に使用されています。

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> 

構成マップがマップ・ロック・アクション・クォーラムクォーラムを使用する マップロックアクションの場合はmap-actions-quorumクォーラム、他のマップの場合は アクション。

プログラム的にこれに相当するものは何ですか?

よろしくここ

答えて

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

関連する問題