class ClientCacheQueryRequest extends ClientCacheDataRequest {
    /** */
    ClientCacheQueryRequest(BinaryRawReader reader) {
        super(reader);
    }

    /** */
    protected void updateAffinityMetrics(ClientConnectionContext ctx, int part) {<FILL_FUNCTION_BODY>}
}

        DynamicCacheDescriptor desc = cacheDescriptor(ctx);
        CacheConfiguration<?, ?> cfg = desc.cacheConfiguration();

        if (cfg.getCacheMode() == CacheMode.PARTITIONED && cfg.isStatisticsEnabled()) {
            String cacheName = desc.cacheName();

            try {
                GridKernalContext kctx = ctx.kernalContext();

                if (kctx.affinity().mapPartitionToNode(cacheName, part, null).isLocal())
                    kctx.clientListener().metrics().onAffinityQryHit();
                else
                    kctx.clientListener().metrics().onAffinityQryMiss();
            }
            catch (Exception ignored) {
                // No-op.
            }
        }
    
<methods>public boolean isTransactional() ,public int txId() <variables>private final non-sealed int txId