+1 for Jake’s approach.

Jake’s approach seems to address the only concern that I know of which is  
backward compatibility.
 
Thanks,
Mark
> On Jun 10, 2019, at 11:20 AM, Robert Houghton <rhough...@pivotal.io> wrote:
> 
> +1 to @Udo Kohlmeyer <ukohlme...@pivotal.io> comment. If the memory has
> been used, might as well allow us to query the values
> 
> On Fri, Jun 7, 2019 at 2:18 PM Udo Kohlmeyer <ukohlme...@pivotal.io> wrote:
> 
>> +1, if the LongAdders have already added and the additional memory usage
>> has already been dealt with, then adding the accessors does not really
>> make a difference anymore.
>> 
>> On 6/7/19 13:47, Jacob Barrett wrote:
>>> I like this!
>>> 
>>> I’d go ahead and change all the usage of the int methods to the long
>> methods. I’d deprecate the int methods to make it very clear.
>>> 
>>> If some consumer is using the int methods they will still work with the
>> same rollover issues but perhaps with the deprecated warning they will
>> update their code. Without the warning they may never know.
>>> 
>>> -jake
>>> 
>>> 
>>>> On Jun 7, 2019, at 1:32 PM, Darrel Schneider <dschnei...@pivotal.io>
>> wrote:
>>>> 
>>>> We have had a couple of tickets that have problems with 32-bit counters
>>>> changing too fast and causing them to be hard to understand when they
>> wrap
>>>> around (see GEODE-6425 and GEODE-6834). We have also had problems with
>> some
>>>> stats being broken because they were changing the 32-bit one when they
>>>> should have been changing the 64-bit one (see GEODE-6776).
>>>> The current implementation has one array of values for the 32-bit stats
>> and
>>>> another array of values for the 64-bit stats. We use indexes into these
>>>> arrays when changing a stat. Given an int "id" used to index these
>> arrays,
>>>> we can not tell if we should be indexing the 32-bit array or 64-bit
>> array.
>>>> The first 32-bit stat for a type will have an id of 0 and the first
>> 64-bit
>>>> stat on that type will also have an id of 0. But our current
>> implementation
>>>> has the same type of value in both arrays (LongAdder
>>>> see: StripedStatisticsImpl fields intAdders and longAdders). So if we
>>>> simply change our implementation to have a single array, then the ids
>> will
>>>> no longer be overloaded.
>>>> 
>>>> Changing this internal implementation also improves backward
>> compatibility.
>>>> Currently when we change one of our counters from 32-bit to 64-bit it is
>>>> possible we would break existing applications that are using the
>> Statistics
>>>> interface. It has methods on it that allow stats to be read given an it:
>>>> getInt(int id) and getLong(int id). If they are currently reading a
>> 32-bit
>>>> stat using getInt(id) and we change that stat to be 64-bit (like we did
>> in
>>>> GEODE-6425) then they will now be reading the wrong stat when they call
>>>> getInt(id). If they used getInt(String) or getInt(StatisticDescriptor)
>> they
>>>> will be okay. But if we make this simple change to have 32-bit and
>> 64-bit
>>>> stats stored in the same array then getInt(id) will do the right thing
>> when
>>>> we change a stat from 32-bit to 64-bit.
>>>> 
>>>> Does anyone see a problem with making this change?
>>>> 
>>>> After we do it I think we should change all of our counters to 64-bit
>> since
>>>> they are always stored in a LongAdder anyway and we should deprecate the
>>>> methods that support 32-bit stats.
>> 

Reply via email to