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

Geoffrey Jacoby commented on PHOENIX-3997:
------------------------------------------

[~jamestaylor] [~sergey.soldatov] - there are two issues being discussed here, 
and it's important not to conflate them. There's a copy/paste of the identical 
flush waiting code in two different places:

1. commitBatchWithHTable() - This was introduced as part of PHOENIX-3271, and 
is used for committing UPSERT SELECTs that select from one table and commit to 
a _different_ table. In this case, the flush waiting code does not seem to 
serve a purpose, because it will not create additional flushes on the Region 
the coprocessor is executing on. 

2. commitBatch(). This was introduced as part of PHOENIX-3111 to prevent a 
split deadlock issue. (PHOENIX-3827 then fixed another one.) Something like it 
is still necessary given the way ReentrantReadWriteLocks are still a little bit 
fair even in NonFair mode (they won't starve a write lock at the top of the 
queue, which makes deadlocks possible.)

*This patch only deals with case 1.* 

[~apurtell] has also suggested a refactoring of Case 2's logic to instead use 
the built-in logic HRegions have for waiting for flushes and compactions, which 
seems to me a good idea, but something to do in a separate JIRA because the 
behavior between the current code and the HRegion method isn't quite the same 
(no explicit timeout in Region/HRegion, for example, and no check for the 
region closing, which would probably have to be maintained in some form in the 
coprocessor) and that would need more testing.



> UngroupedAggregateRegionObserver.commitBatchWithHTable() should not check the 
> memstore size and wait for flush. 
> ----------------------------------------------------------------------------------------------------------------
>
>                 Key: PHOENIX-3997
>                 URL: https://issues.apache.org/jira/browse/PHOENIX-3997
>             Project: Phoenix
>          Issue Type: Bug
>            Reporter: Thomas D'Silva
>            Assignee: Geoffrey Jacoby
>             Fix For: 4.12.0
>
>         Attachments: PHOENIX-3997.patch
>
>
> [~ankit.singhal] 
> In UngroupedAggregateRegionObserver.commitBatchWithHTable() do we need to 
> check the memstore size and wait for the flush. We are using a htable to 
> write the mutations.
> {code}
>  // When memstore size reaches blockingMemstoreSize we are waiting 3 seconds 
> for the
>         // flush happen which decrease the memstore size and then writes 
> allowed on the region.
>         for (int i = 0; region.getMemstoreSize().get() > blockingMemstoreSize 
> && i < 30; i++) {
>             try {
>                 checkForRegionClosing();
>                 Thread.sleep(100);
>             } catch (InterruptedException e) {
>                 Thread.currentThread().interrupt();
>                 throw new IOException(e);
>             }
>         }
>         logger.debug("Committing batch of " + mutations.size() + " mutations 
> for " + table);
>         try {
>             table.batch(mutations);
>         } catch (InterruptedException e) {
>             throw new RuntimeException(e);
>         }
> {code}
> FYI [~jamestaylor] [~apurtell]



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to