[ 
https://issues.apache.org/jira/browse/KUDU-2776?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Grant Henke updated KUDU-2776:
------------------------------
    Labels: backup  (was: )

> Java AUTO_FLUSH_BACKGROUND behaves like "AUTO_FLUSH_FOREGROUND" when tablet 
> locations are cached
> ------------------------------------------------------------------------------------------------
>
>                 Key: KUDU-2776
>                 URL: https://issues.apache.org/jira/browse/KUDU-2776
>             Project: Kudu
>          Issue Type: Bug
>    Affects Versions: 1.9.0
>            Reporter: Will Berkeley
>            Priority: Major
>              Labels: backup
>         Attachments: image-2019-04-16-14-37-07-908.png
>
>
> !image-2019-04-16-14-37-07-908.png!
> The above piece of a Java flamegraph shows the main application thread 
> {{apply}}ing operations to a {{KuduSession}} in {{AUTO_FLUSH_BACKGROUND}} 
> mode. The {{doFlush}} call is meant to set up a callbacks that actually send 
> the rows to Kudu and that are triggered by the fulfillment of a Deferred for 
> the tablet locations. However, when the tablet locations are cached, this 
> Deferred can be fulfilled basically instantly, so by the time that the 
> {{apply}}ing thread calls {{addCallbacks}}, the deferred is complete, and as 
> an optimization the async library executes the callbacks on the thread that 
> is adding them to the fulfilled Deferred. This means the {{apply}}ing thread 
> executes the code that sends rows to Kudu, which is the opposite of how 
> {{AUTO_FLUSH_BACKGROUND}} is meant to work.
> We lose out on the ability to have multiple batches in flight at once, and we 
> serialize the application logic, {{apply}}, and actually sending rows to Kudu.



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

Reply via email to