[ 
https://issues.apache.org/jira/browse/OAK-7259?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16365769#comment-16365769
 ] 

Andrei Dulceanu commented on OAK-7259:
--------------------------------------

[~frm], while I agree with your concern about thread-safety for these newly 
introduced methods, I think we should take into consideration the purpose of 
{{SegmentNodeStoreStats}} which is monitoring. I guess the following excerpt 
from {{ConcurrentHashMap}}'s JavaDoc applies here as well:

{quote}
Otherwise the results of these methods reflect transient states that may be 
adequate for monitoring or estimation purposes, but not for program control.
{quote}

What I wanted to avoid was to introduce yet another lock contention point. 
Suppose multiple threads access {{LockBasedScheduler#schedule}} while the 
commit semaphore is already acquired by some other thread. If we go for a 
synchronized version of {{SegmentNodeStoreStats#getCommitsCountPerWriter}}, as 
found in [0], we'll basically have all those threads contend for the newly 
introduced lock. Moreover, if the thread which acquired the semaphore modifies 
(with the same lock held) the data structures used in 
{{#getCommitsCountPerWriter}}, then we basically block all other threads.

Just writing this, I realized that {{SegmentNodeStoreStats#onCommit}} is only 
called with the commit semaphore acquired so it won't need additional 
synchronization (in the current implementation of {{LockBasedScheduler}}). As 
for {{onCommitQueued}} and {{onCommitDequeued}}, going forward with the current 
approach means that {{getQueuedWriters}} might return an incomplete view of the 
currently queued threads, which should be ok, since this is only about 
monitoring.

WDYT?

[0] 
https://github.com/apache/jackrabbit-oak/blob/trunk/oak-store-composite/src/main/java/org/apache/jackrabbit/oak/composite/CompositeNodeStoreStats.java#L150

> Improve SegmentNodeStoreStats to include number of commits per thread and 
> threads currently waiting on the semaphore
> --------------------------------------------------------------------------------------------------------------------
>
>                 Key: OAK-7259
>                 URL: https://issues.apache.org/jira/browse/OAK-7259
>             Project: Jackrabbit Oak
>          Issue Type: Improvement
>          Components: segment-tar
>            Reporter: Andrei Dulceanu
>            Assignee: Andrei Dulceanu
>            Priority: Major
>              Labels: tooling
>             Fix For: 1.9.0, 1.10
>
>
> When investigating the performance of  {{segment-tar}}, the source of the 
> writes (commits) is a very useful indicator of the cause.
> To better understand which threads are currently writing in the repository 
> and which are blocked on the semaphore, we need to improve 
> {{SegmentNodeStoreStats}} to:
>  * expose the number of commits executed per thread
>  * expose threads currently waiting on the semaphore



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to