Slava and Igniters,

Do you have any suggestions about described problem?

>From my point of view JCache API metrics specification has a number of
statements that can't be uniquely treated by Ignite user because of
implementations details. Most obvious problems here are related with
transactions that are distributed and have some properties that affect
their behaviour. Pessimistic transactions during entry modification
will enlist entry into transaction (read operation), acquire lock (it
can take some time if another transaction is already lock owner) and
eventually write modified entry into the cache. Where is modification
operation start? What if after cache.put() and before commit user
performs some time consuming operation? For optimistic transactions
still there is lock waiting time that affects metrics.

So JCache API metrics are useless for transactions and could confuse
user. It seems that we shouldn't support JCache metrics at all in case
of transactional operations. May be we can offer another metrics that
could be more useful.

Thoughts?

On Tue, Sep 19, 2017 at 8:19 PM, Вячеслав Коптилин
<[email protected]> wrote:
> 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