[CARBONDATA-4154] Fix various concurrent issues with clean files
authorVikram Ahuja <vikramahuja8803@gmail.com>
Tue, 16 Mar 2021 11:27:10 +0000 (16:57 +0530)
committerajantha-bhat <ajanthabhat@gmail.com>
Fri, 26 Mar 2021 05:31:18 +0000 (11:01 +0530)
commitd535a1e22f1800afab9a148f42a9124efc6df192
tree3db2d7b414924aa74656cd5cc7922007bcc8d25c
parent865ec9b908783a6169d380415aa6598c41b275d5
[CARBONDATA-4154] Fix various concurrent issues with clean files

Why is this PR needed?
There are 2 issues in clean files operation when ran concurrently with multiple load operations:

Dry run can show negative space freed for clean files with concurrent load.
Accidental deletion of Insert in progress(ongoing load) during clean files operation.
What changes were proposed in this PR?
To solve the dry run negative result, saving the old metadatadetails before the clean files operation and comparing it with loadmetadetails after the clean files operation and just ignoring any new entry that has been added, basically doing an intersection of new and old metadatadetails to show the correct space freed.
In case of load failure issue, there can be scenarios where load in going on(insert in progress state and segment lock is occupied) and as during clean files operation when the final table status lock is removed, there can be scenarios where the load has completed and the segment lock is released but in the clean files in the final list of loadmetadatadetails to be deleted, that load can still be in Insert In Progress state with segment lock released by the load. The clean files operation will delete such loads. To solve this issue, instead of sending a boolean which check if update is required or not in the tablestatus, can send a list of load numbers and will only delete those loadnumbers.

Does this PR introduce any user interface change?
No

Is any new testcase added?
No

This closes #4109
core/src/main/java/org/apache/carbondata/core/statusmanager/SegmentStatusManager.java
core/src/main/java/org/apache/carbondata/core/util/DeleteLoadFolders.java
integration/spark/src/main/scala/org/apache/carbondata/trash/DataTrashManager.scala