[
https://issues.apache.org/jira/browse/TS-162?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12848447#action_12848447
]
John Plevyak commented on TS-162:
---------------------------------
I think there is a race condition in this code if two instances of this code
run at the same time. First,
there is a race condition between the read of last_XXX and the write via swap
and a possible write
on another thread. Also there is a race between the two swaps and two other
swaps on a different thread.
I think these can both be solved by using a CAS to update the last_XXX values
and then using the
difference to update the sum/count via atomic increment. While it is still
possible that the count
and sum will be out of sync, that is always a problem, but at least updates
will not get lost.
The sync problem is solvable as well with an additional loop during read and
sequence numbers
of (updates started, updates ended) in a CAS updated variable attached to the
global.
> inconsistencies in the stats system - there are incorrect assumtions on
> sychronization between threads
> ------------------------------------------------------------------------------------------------------
>
> Key: TS-162
> URL: https://issues.apache.org/jira/browse/TS-162
> Project: Traffic Server
> Issue Type: Bug
> Components: Stats
> Reporter: Bryan Call
> Assignee: Bryan Call
> Fix For: 2.0.0
>
> Attachments: stats_bcall_001.diff
>
>
> There is a problem with the current stats being inconsistent. The problem is
> that the net threads each have their own stats which they modify and the
> aggregation thread also modifies the same stat value. There is no proper
> synchronization for this to work correctly. The aggregation thread does an
> atomic swap to zero the net threads stat value, but the local thread doesn't
> use atomics and only increments the value. This will lead to
> inconsistencies...
> A better design is to *only* have the net threads modify their local stats
> and have the aggregation thread handle totalling the values in a separate
> stat structure.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.