I'd want to make a new attempt to discuss JCache metrics, especially
time-based metrics.
As discussed earlier (
http://apache-ignite-developers.2346864.n4.nabble.com/Cache-Metrics-tt19699.html
),
there are two approaches (and at first glance, the second one is
preferable):
    #1 Node that starts some operation is responsible for updating the
cache metrics.
    #2 Primary node (node that actually executes a request)

I have one question/concern about time-based metrics for transactional
caches.
The JCache specification does not have definition like a transaction,
partitioned cache etc,
and, therefore, cannot provide convenience and clear understanding about
the average time for that case.

Let's assume, for example, we have the following code:

        try (Transaction tx =
transactions.txStart(TransactionConcurrency.OPTIMISTIC,
TransactionIsolation.READ_COMMITTED)) {
            value = cache.get(key);
            // calculate new value for the given key
            ...
            cache.put(key, new_value);     // (1)

            // some additional operations

            // another update
            value = cache.get(key);        // (2)
            ...
            cache.put(key, new_value);

            tx.commit();                   // (3)
        }

What is the average time for write operation? Is it a time needed for
enlisting an entry in the transaction scope, acquiring locks, committing
changes?
For that particular case, current implementation accumulates both timings
(1)&(2) on the local node during performing put operation, but 'write'
counter is updated only once on data node during commit phase.
I think this behavior is not obvious at least.

Thanks,
Slava.

Reply via email to