[
https://issues.apache.org/jira/browse/HBASE-13393?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14558983#comment-14558983
]
ramkrishna.s.vasudevan commented on HBASE-13393:
------------------------------------------------
The threading model in this case would be like
-> The memstore add() is going to be called by multiple threads and so the
volatile variable would be read every time and the first thread that sees a tag
tries to update it. Other threads once written would see the updated value.
In the snapshot() API there is going to be only one thread that is going to
read the updated value. During snapshot() we hold a write lock so there is no
updates happening via add().
Wanted to confirm the behaviour of volatile so went thro this blog
http://tutorials.jenkov.com/java-concurrency/volatile.html.
{code}
But in case one thread reads and writes the value of a volatile variable, and
other threads only read the variable, then the reading threads are guaranteed
to see the latest value written to the volatile variable. Without making the
variable volatile, this would not be guaranteed.
{code}
Here once the update happens then it is only reads by multiple threads.
I think we would need a volatile here because multiple threads could update the
value of tagsAvailable but the flush thread may not see the actual updated
value. It may be better to remove the !tagsAvailable check and always update
the tagsAvailable boolean to true. Does that make sense here?
> Add facility to disable tags after parent goes in
> -------------------------------------------------
>
> Key: HBASE-13393
> URL: https://issues.apache.org/jira/browse/HBASE-13393
> Project: HBase
> Issue Type: Sub-task
> Reporter: stack
> Assignee: stack
> Attachments: HBASE-13393.patch, HBASE-13393_1.patch
>
>
> We used to specify 'no tags' by choosing to write files that were version 2.
> After parent goes in, make it so can ask a v3 file not to write tags.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)