こちらのエントリの続きです。
InfinispanのDistributed Cacheのput/getをトレースする(Local NodeがOnwerの場合) - CLOVER
長さの関係で分割しただけなので、詳細は前のエントリをご覧ください…。
Local Nodeにエントリがない場合
続いて、Local Nodeにエントリがないパターン。この場合は、Cache#get時にもRPCが発生するはずですね。
こちらのパターンは、キーは「key4」が選ばれました。結果はこちら。
===== NOT ASSIGNED KEY = key4 START ===== [Interceptor] DistributionBulkInterceptor:visitGetKeyValueCommand, entry [Interceptor] InvocationContextInterceptor:visitGetKeyValueCommand, entry [Interceptor] CacheMgmtInterceptor:visitGetKeyValueCommand, entry [Interceptor] StateTransferInterceptor:visitGetKeyValueCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitGetKeyValueCommand, entry [Interceptor] EntryWrappingInterceptor:visitGetKeyValueCommand, entry [EntryFactory] EntryFactoryImpl:wrapEntryForReading, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryFactory] EntryFactoryImpl:getFromContainer, entry [EntryFactory] EntryFactoryImpl:getFromContainer, exit [EntryFactory] EntryFactoryImpl:wrapEntryForReading, exit [Interceptor] NonTxDistributionInterceptor:visitGetKeyValueCommand, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [RpcManager] RpcManagerImpl:invokeRemotely, entry [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [Command] ClusteredGetCommand:perform, entry [Interceptor] DistributionBulkInterceptor:visitGetCacheEntryCommand, entry [Interceptor] InvocationContextInterceptor:visitGetCacheEntryCommand, entry [Interceptor] CacheMgmtInterceptor:visitGetCacheEntryCommand, entry [Interceptor] StateTransferInterceptor:visitGetCacheEntryCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitGetCacheEntryCommand, entry [Interceptor] EntryWrappingInterceptor:visitGetCacheEntryCommand, entry [EntryFactory] EntryFactoryImpl:wrapEntryForReading, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryFactory] EntryFactoryImpl:getFromContainer, entry [DataContainer] DefaultDataContainer:get, entry [DataContainer] DefaultDataContainer:get, exit [EntryFactory] EntryFactoryImpl:getFromContainer, exit [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, exit [EntryFactory] EntryFactoryImpl:wrapEntryForReading, exit [Interceptor] NonTxDistributionInterceptor:visitGetCacheEntryCommand, entry [Interceptor] CallInterceptor:visitGetCacheEntryCommand, entry [Command] GetCacheEntryCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] GetCacheEntryCommand:perform, exit [Interceptor] CallInterceptor:visitGetCacheEntryCommand, exit [Interceptor] NonTxDistributionInterceptor:visitGetCacheEntryCommand, exit [Interceptor] EntryWrappingInterceptor:visitGetCacheEntryCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitGetCacheEntryCommand, exit [Interceptor] StateTransferInterceptor:visitGetCacheEntryCommand, exit [Interceptor] CacheMgmtInterceptor:visitGetCacheEntryCommand, exit [Interceptor] InvocationContextInterceptor:visitGetCacheEntryCommand, exit [Interceptor] DistributionBulkInterceptor:visitGetCacheEntryCommand, exit [Command] ClusteredGetCommand:perform, exit [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [RpcManager] RpcManagerImpl:invokeRemotely, exit [EntryFactory] EntryFactoryImpl:wrapExternalEntry, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, exit [EntryFactory] EntryFactoryImpl:wrapExternalEntry, exit [Interceptor] CallInterceptor:visitGetKeyValueCommand, entry [Command] GetKeyValueCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] GetKeyValueCommand:perform, exit [Interceptor] CallInterceptor:visitGetKeyValueCommand, exit [Interceptor] NonTxDistributionInterceptor:visitGetKeyValueCommand, exit [Interceptor] EntryWrappingInterceptor:visitGetKeyValueCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitGetKeyValueCommand, exit [Interceptor] StateTransferInterceptor:visitGetKeyValueCommand, exit [Interceptor] CacheMgmtInterceptor:visitGetKeyValueCommand, exit [Interceptor] InvocationContextInterceptor:visitGetKeyValueCommand, exit [Interceptor] DistributionBulkInterceptor:visitGetKeyValueCommand, exit ===== NOT ASSIGNED KEY = key4 END =====
エントリがLocal Node(InvocationContextおよびDataContainer)にないので、RPCが発生していますね。
で、RPCを投げた後ですが中身を見てみると、ClusterGetCommand#performから先はLocal Nodeにデータがあった時と似たような動きをしていますね。
そりゃあそうだ、という感じかもですが。
[RpcManager] RpcManagerImpl:invokeRemotely, entry [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [Command] ClusteredGetCommand:perform, entry [Interceptor] DistributionBulkInterceptor:visitGetCacheEntryCommand, entry [Interceptor] InvocationContextInterceptor:visitGetCacheEntryCommand, entry [Interceptor] CacheMgmtInterceptor:visitGetCacheEntryCommand, entry [Interceptor] StateTransferInterceptor:visitGetCacheEntryCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitGetCacheEntryCommand, entry [Interceptor] EntryWrappingInterceptor:visitGetCacheEntryCommand, entry [EntryFactory] EntryFactoryImpl:wrapEntryForReading, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryFactory] EntryFactoryImpl:getFromContainer, entry [DataContainer] DefaultDataContainer:get, entry [DataContainer] DefaultDataContainer:get, exit [EntryFactory] EntryFactoryImpl:getFromContainer, exit [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, exit [EntryFactory] EntryFactoryImpl:wrapEntryForReading, exit [Interceptor] NonTxDistributionInterceptor:visitGetCacheEntryCommand, entry [Interceptor] CallInterceptor:visitGetCacheEntryCommand, entry [Command] GetCacheEntryCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] GetCacheEntryCommand:perform, exit [Interceptor] CallInterceptor:visitGetCacheEntryCommand, exit [Interceptor] NonTxDistributionInterceptor:visitGetCacheEntryCommand, exit [Interceptor] EntryWrappingInterceptor:visitGetCacheEntryCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitGetCacheEntryCommand, exit [Interceptor] StateTransferInterceptor:visitGetCacheEntryCommand, exit [Interceptor] CacheMgmtInterceptor:visitGetCacheEntryCommand, exit [Interceptor] InvocationContextInterceptor:visitGetCacheEntryCommand, exit [Interceptor] DistributionBulkInterceptor:visitGetCacheEntryCommand, exit [Command] ClusteredGetCommand:perform, exit [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [RpcManager] RpcManagerImpl:invokeRemotely, exit
では、put時の挙動。
===== PUT KEY = key4 START [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, entry [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, entry [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, entry [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, entry [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, entry [Command] PutKeyValueCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] PutKeyValueCommand:perform, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, exit [RpcManager] RpcManagerImpl:invokeRemotely, entry [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [Command] SingleRpcCommand:perform, entry [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, entry [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, entry [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, entry [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, entry [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, entry [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryFactory] EntryFactoryImpl:getFromContainer, entry [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [EntryFactory] EntryFactoryImpl:getFromContainer, exit [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, exit [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, entry [Command] PutKeyValueCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] PutKeyValueCommand:perform, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, exit [RpcManager] RpcManagerImpl:invokeRemotely, entry [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [Command] SingleRpcCommand:perform, entry [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, entry [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, entry [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, entry [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, entry [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, entry [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryFactory] EntryFactoryImpl:getFromContainer, entry [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [EntryFactory] EntryFactoryImpl:getFromContainer, exit [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, exit [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, entry [Command] PutKeyValueCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] PutKeyValueCommand:perform, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, exit [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [DataContainer] DefaultDataContainer:put, entry [DataContainer] DefaultDataContainer:put, exit [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, exit [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, exit [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, exit [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, exit [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, exit [Command] SingleRpcCommand:perform, exit [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [RpcManager] RpcManagerImpl:invokeRemotely, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, exit [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [DataContainer] DefaultDataContainer:put, entry [DataContainer] DefaultDataContainer:put, exit [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, exit [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, exit [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, exit [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, exit [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, exit [Command] SingleRpcCommand:perform, exit [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [RpcManager] RpcManagerImpl:invokeRemotely, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, exit [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, exit [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, exit [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, exit [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, exit [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, exit ===== PUT KEY = key4 END
Local Nodeにデータがあっても、Primary Ownerでない時と似たような感じになっていますね。
更新時。
===== UPDATE KEY = key4 START ===== [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, entry [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, entry [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, entry [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, entry [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, entry [Command] PutKeyValueCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] PutKeyValueCommand:perform, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, exit [RpcManager] RpcManagerImpl:invokeRemotely, entry [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [Command] SingleRpcCommand:perform, entry [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, entry [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, entry [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, entry [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, entry [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, entry [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryFactory] EntryFactoryImpl:getFromContainer, entry [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [EntryFactory] EntryFactoryImpl:getFromContainer, exit [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, exit [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, entry [Command] PutKeyValueCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] PutKeyValueCommand:perform, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, exit [RpcManager] RpcManagerImpl:invokeRemotely, entry [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [Command] SingleRpcCommand:perform, entry [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, entry [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, entry [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, entry [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, entry [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, entry [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, entry [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, entry [EntryFactory] EntryFactoryImpl:getFromContext, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [EntryFactory] EntryFactoryImpl:getFromContext, exit [EntryFactory] EntryFactoryImpl:getFromContainer, entry [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [EntryFactory] EntryFactoryImpl:getFromContainer, exit [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:putLookedUpEntry, exit [EntryFactory] EntryFactoryImpl:wrapEntryForWriting, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, entry [Command] PutKeyValueCommand:perform, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, entry [EntryLookup] SingleKeyNonTxInvocationContext:lookupEntry, exit [Command] PutKeyValueCommand:perform, exit [Interceptor] CallInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, exit [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [DataContainer] DefaultDataContainer:put, entry [DataContainer] DefaultDataContainer:put, exit [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, exit [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, exit [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, exit [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, exit [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, exit [Command] SingleRpcCommand:perform, exit [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [RpcManager] RpcManagerImpl:invokeRemotely, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, exit [DataContainer] DefaultDataContainer:peek, entry [DataContainer] DefaultDataContainer:peek, exit [DataContainer] DefaultDataContainer:put, entry [DataContainer] DefaultDataContainer:put, exit [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, exit [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, exit [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, exit [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, exit [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, exit [Command] SingleRpcCommand:perform, exit [Marshaller] GlobalMarshaller:objectToBuffer, entry [Marshaller] GlobalMarshaller:objectToBuffer, exit [Marshaller] GlobalMarshaller:objectFromByteBuffer, entry [Marshaller] GlobalMarshaller:objectFromByteBuffer, exit [RpcManager] RpcManagerImpl:invokeRemotely, exit [Interceptor] NonTxDistributionInterceptor:visitPutKeyValueCommand, exit [Interceptor] EntryWrappingInterceptor:visitPutKeyValueCommand, exit [Interceptor] NonTransactionalLockingInterceptor:visitPutKeyValueCommand, exit [Interceptor] StateTransferInterceptor:visitPutKeyValueCommand, exit [Interceptor] CacheMgmtInterceptor:visitPutKeyValueCommand, exit [Interceptor] InvocationContextInterceptor:visitPutKeyValueCommand, exit [Interceptor] DistributionBulkInterceptor:visitPutKeyValueCommand, exit ===== UPDATE KEY = key4 END =====
こちらも、そう変わらず。
まとめ
InfinispanのDistributed Cacheにおける、putとgetの挙動をトレースしてみました。
Interceptor、CommandやInvocationContext、DataContainerといったクラスの関係や、RPCの発生などについて基礎的なところは見れた感じですが、Commandのバリエーションはもっと多いですし、トランザクションの有無などで挙動が大きく変わりそうなので、ホント初歩ですよねぇと。
ただ、これまでボヤッとしか見ていなかった部分をそれなりにマジメに追ってみたので、その点は勉強になりました。
まー、このあたりのコード、Infinispan 9.0.0でガッツリ変わりそうですけどね!
今回作成したコードは、こちらに置いています。
https://github.com/kazuhira-r/infinispan-getting-started/tree/master/embedded-trace-distributed-putget