[ 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)