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

ASF GitHub Bot updated HBASE-29466:
-----------------------------------
    Labels: pull-request-available  (was: )

> Failure in compacting createStoreFileAndReader causes commitPath files to be 
> omitted
> ------------------------------------------------------------------------------------
>
>                 Key: HBASE-29466
>                 URL: https://issues.apache.org/jira/browse/HBASE-29466
>             Project: HBase
>          Issue Type: Bug
>            Reporter: yuting sun
>            Priority: Minor
>              Labels: pull-request-available
>
> {code:java}
> //代码占位符
> {code}
> public List<HStoreFile> commitStoreFiles(List<Path> files, boolean 
> isCompaction, boolean validate)
> throws IOException {
> List<HStoreFile> committedFiles = new ArrayList<>(files.size());
> HRegionFileSystem hfs = ctx.getRegionFileSystem();
> String familyName = ctx.getFamily().getNameAsString();
> Path storeDir = hfs.getStoreDir(familyName);
> for (Path file : files) {
> try {
> if (validate) {
> validateStoreFile(file, isCompaction);
> }
> Path committedPath;
> // As we want to support writing to data directory directly, here we need to 
> check whether
> // the store file is already in the right place
> if (file.getParent() != null && file.getParent().equals(storeDir)) {
> // already in the right place, skip renaming
> committedPath = file;
> } else {
> // Write-out finished successfully, move into the right spot
> committedPath = hfs.commitStoreFile(familyName, file);
> }
> *HStoreFile sf = createStoreFileAndReader(committedPath);*
> committedFiles.add(sf);
> } catch (IOException e) {
> LOG.error("Failed to commit store file {}", file, e);
> // Try to delete the files we have committed before.
> // It is OK to fail when deleting as leaving the file there does not cause 
> any data
> // corruption problem. It just introduces some duplicated data which may 
> impact read
> // performance a little when reading before compaction.
> for (HStoreFile sf : committedFiles) {
> Path pathToDelete = sf.getPath();
> try {
> sf.deleteStoreFile();
> } catch (IOException deleteEx) {
> LOG.warn(HBaseMarkers.FATAL, "Failed to delete committed store file {}", 
> pathToDelete,
> deleteEx);
> }
> }
> throw new IOException("Failed to commit the flush", e);
> }
> }
> return committedFiles;
> }
> {code:java}
> //代码占位符
> {code}
> If the createStoreFileAndReader process fails, only the committedFiles are 
> rolled back and cleaned up, but the committedPath of this 
> createStoreFileAndReader execution is not rolled back and cleaned up. 
> Therefore, the committedPath cleanup logic is added. Please see if it is 
> reasonable.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to