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

ASF subversion and git services commented on ASTERIXDB-1938:
------------------------------------------------------------

Commit 16b57d8e39aa877aa6b4bbb124a261727d46409d in asterixdb's branch 
refs/heads/master from [~luochen01]
[ https://git-wip-us.apache.org/repos/asf?p=asterixdb.git;h=16b57d8 ]

ASTERIXDB-1938: Keep empty disk components when merge/flush

During flush/merge, it is possible that the new disk component
is empty. However, the current LSMDiskComponentBulkLoader would
clean up empty disk component. This patch fix this behavior by
introducing an extra parameter cleanupEmptyComponent.

Change-Id: Ic4f7ec41f56a2f9124920d67657f88160634f0e7
Reviewed-on: https://asterix-gerrit.ics.uci.edu/1826
Sonar-Qube: Jenkins <[email protected]>
Tested-by: Jenkins <[email protected]>
BAD: Jenkins <[email protected]>
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Dmitry Lychagin <[email protected]>
Reviewed-by: Yingyi Bu <[email protected]>


> AppendOnlyLinkedMetadataPageManager.put() is called after close(). HYR0012 is 
> thrown
> ------------------------------------------------------------------------------------
>
>                 Key: ASTERIXDB-1938
>                 URL: https://issues.apache.org/jira/browse/ASTERIXDB-1938
>             Project: Apache AsterixDB
>          Issue Type: Bug
>          Components: Storage
>            Reporter: Dmitry Lychagin
>            Assignee: Chen Luo
>
> We're getting this exception:
> rg.apache.hyracks.api.exceptions.HyracksDataException: HYR0012: Invalid 
> attempt to write to a flushed append only metadata page
>       at 
> org.apache.hyracks.api.exceptions.HyracksDataException.create(HyracksDataException.java:49)
>       at 
> org.apache.hyracks.storage.am.common.freepage.AppendOnlyLinkedMetadataPageManager.put(AppendOnlyLinkedMetadataPageManager.java:311)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.DiskComponentMetadata.put(DiskComponentMetadata.java:38)
>       at 
> org.apache.asterix.common.ioopcallbacks.AbstractLSMIOOperationCallback.putLSNIntoMetadata(AbstractLSMIOOperationCallback.java:105)
>       at 
> org.apache.asterix.common.ioopcallbacks.AbstractLSMIOOperationCallback.afterOperation(AbstractLSMIOOperationCallback.java:188)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.LSMHarness.flush(LSMHarness.java:503)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.LSMTreeIndexAccessor.flush(LSMTreeIndexAccessor.java:121)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:42)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:30)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at java.lang.Thread.run(Thread.java:745)
> However at that time the AppendOnlyLinkedMetadataPageManager is already 
> closed.
> The stack trace for the close() method invocation is the following:
> at 
> org.apache.hyracks.storage.am.common.freepage.AppendOnlyLinkedMetadataPageManager.close(AppendOnlyLinkedMetadataPageManager.java:216)
>       at 
> org.apache.hyracks.storage.am.common.impls.AbstractTreeIndex.deactivate(AbstractTreeIndex.java:163)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMDiskComponentBulkLoader.cleanupArtifacts(AbstractLSMDiskComponentBulkLoader.java:170)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.AbstractLSMDiskComponentBulkLoader.end(AbstractLSMDiskComponentBulkLoader.java:158)
>       at 
> org.apache.hyracks.storage.am.lsm.btree.impls.LSMBTree.flush(LSMBTree.java:357)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.LSMHarness.flush(LSMHarness.java:502)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.LSMTreeIndexAccessor.flush(LSMTreeIndexAccessor.java:121)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:42)
>       at 
> org.apache.hyracks.storage.am.lsm.common.impls.FlushOperation.call(FlushOperation.java:30)
>       at java.util.concurrent.FutureTask.run(FutureTask.java:266)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>       at java.lang.Thread.run(Thread.java:745)
> So AppendOnlyLinkedMetadataPageManager.close() is called from LSMHarness:502 
> (flush), then the next line (LSMHarness:503) calls the callback which tries 
> to write data into the closed page manager. At that point its 
> 'confiscatedPage' is 'null'  and therefore HYR0012 is thrown



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

Reply via email to