wchevreuil commented on code in PR #6439:
URL: https://github.com/apache/hbase/pull/6439#discussion_r1827974158
##########
hbase-server/src/main/java/org/apache/hadoop/hbase/mob/RSMobFileCleanerChore.java:
##########
@@ -116,14 +120,32 @@ protected void chore() {
Set<String> regionMobs = new HashSet<String>();
Path currentPath = null;
try {
- // collectinng referenced MOBs
+ // collecting referenced MOBs
for (HStoreFile sf : sfs) {
currentPath = sf.getPath();
- sf.initReader();
- byte[] mobRefData =
sf.getMetadataValue(HStoreFile.MOB_FILE_REFS);
- byte[] bulkloadMarkerData =
sf.getMetadataValue(HStoreFile.BULKLOAD_TASK_KEY);
- // close store file to avoid memory leaks
- sf.closeStoreFile(true);
+ byte[] mobRefData = null;
+ byte[] bulkloadMarkerData = null;
+ boolean needCreateReader = false;
+ if (sf.getReader() == null) {
+ synchronized (sf) {
+ if (sf.getReader() == null) {
+ needCreateReader = true;
+ sf.initReader();
+ mobRefData =
sf.getMetadataValue(HStoreFile.MOB_FILE_REFS);
+ bulkloadMarkerData =
sf.getMetadataValue(HStoreFile.BULKLOAD_TASK_KEY);
+ // close store file to avoid memory leaks
+ sf.closeStoreFile(true);
+ }
+ }
+ }
+ // If the StoreFileReader object was created by another
thread, even if the reader
+ // has been closed now, we can still obtain the data by
HStoreFile.metataMap,
+ // because the map will not be cleared when the reader is
closed.
+ if (!needCreateReader) {
+ mobRefData = sf.getMetadataValue(HStoreFile.MOB_FILE_REFS);
+ bulkloadMarkerData =
sf.getMetadataValue(HStoreFile.BULKLOAD_TASK_KEY);
+ }
Review Comment:
Could we save some lines here? Seems we only need to avoid the
`sf.closeStoreFile(true);` if the reader was not yet null, so maybe just the
below would do:
boolean needCreateReader = sf.getReader() == null;
sf.initReader();
byte[] mobRefData =
sf.getMetadataValue(HStoreFile.MOB_FILE_REFS);
byte[] bulkloadMarkerData =
sf.getMetadataValue(HStoreFile.BULKLOAD_TASK_KEY);
// close store file to avoid memory leaks
if(needCreateReader) {
sf.closeStoreFile(true);
}
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]