CLOVER🍀

That was when it all began.

InfinispanのDistributed Cacheのput/getをトレースする(Local NodeがOnwerではない場合)

こちらのエントリの続きです。

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