geode-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anthony Baker (JIRA)" <>
Subject [jira] [Closed] (GEODE-1494) Allow users to provide callbacks to sample statistics
Date Mon, 22 Aug 2016 16:56:24 GMT


Anthony Baker closed GEODE-1494.

> Allow users to provide callbacks to sample statistics
> -----------------------------------------------------
>                 Key: GEODE-1494
>                 URL:
>             Project: Geode
>          Issue Type: Improvement
>            Reporter: Dan Smith
>            Assignee: Dan Smith
>             Fix For: 1.0.0-incubating.M3
> The Statistics interface has methods to increment, set, and get the value of various
statistics. The statistics are sampled at the sample-rate by the stat sampling thread.
> We should add a way to provide a callback that computes the value of the statistic. The
callback can be called by the stat sampling thread to compute the value at the sample time.
> This is useful because some statistics are hard to update correctly using using increment
operations. For example, tracking the total number of entries in a parallel async event queue
is tricky, because buckets may move on and off of a node while concurrent operations are also
adding entries. But measuring the current size of the queue is easy by just calling size on
the underlying regions.
> Here are the proposed new methods on the statistics interface:
> {code}
>    /**
>    * Provide a callback to compute the value of this statistic
>    * every sample interval and use that as the value of the stat.
>    * <p>
>    * The callback should return quickly because it is invoked on a shared thread.
>    * It should not do any expensive computations, network calls, or access any resources
>    * under locks that may be locked by long running processes.
>    * <p>
>    * This callback will only be invoked if the distributed system property
>    * statistic-sampling-enabled is set to true, and it will be invoked at intervals
>    * determined by the statistic-sampling-rate.
>    * <p>
>    * Get methods are not guaranteed to recompute a new value, they may return
>    * the last sampled value
>    * @param id a statistic id obtained with {@link #nameToId}
>    * or {@link StatisticsType#nameToId}.
>    * @param supplier a callback that will return the value of the stat. This
>    * replaces any previously registered supplier. If the passed in suppplier is null,
>    * will remove any existing supplier
>    * @return the previously registered supplier, or null if there was no previously registered
>    * @throws ArrayIndexOutOfBoundsException If the id is invalid.
>    * @throws IllegalArgumentException if the type of this
>    * stat is not int
>    */
>   public IntSupplier setIntSupplier(int id, IntSupplier supplier);
>   public LongSupplier setLongSupplier(int id, LongSupplier supplier);
>   public DoubleSupplier setDoubleSupplier(int id, DoubleSupplier supplier);
>   public IntSupplier setIntSupplier(String name, IntSupplier supplier);
>   public LongSupplier setLongSupplier(String name, LongSupplier supplier);
>   public DoubleSupplier setDoubleSupplier(String name, DoubleSupplier supplier);
>   public IntSupplier setIntSupplier(StatisticDescriptor descriptor, IntSupplier supplier);
>   public LongSupplier setLongSupplier(StatisticDescriptor descriptor, LongSupplier supplier);
>   public DoubleSupplier setDoubleSupplier(StatisticDescriptor descriptor, DoubleSupplier
> {code}

This message was sent by Atlassian JIRA

View raw message