private ImmutableCollection<HStoreFile> closeWithoutLock() throws IOException {
    memstore.close();
    // Clear so metrics doesn't find them.
    ImmutableCollection<HStoreFile> result = storeEngine.getStoreFileManager().clearFiles();
    Collection<HStoreFile> compactedfiles = storeEngine.getStoreFileManager().clearCompactedFiles();
    // clear the compacted files
    if (CollectionUtils.isNotEmpty(compactedfiles)) {
      removeCompactedfiles(compactedfiles,
        getCacheConfig() != null ? getCacheConfig().shouldEvictOnClose() : true);
    }
    if (!result.isEmpty()) {
      // initialize the thread pool for closing store files in parallel.
      ThreadPoolExecutor storeFileCloserThreadPool =
        this.region.getStoreFileOpenAndCloseThreadPool("StoreFileCloser-"
          + this.region.getRegionInfo().getEncodedName() + "-" + this.getColumnFamilyName());

      // close each store file in parallel
      CompletionService<Void> completionService =
        new ExecutorCompletionService<>(storeFileCloserThreadPool);
      for (HStoreFile f : result) {
        completionService.submit(new Callable<Void>() {
          @Override
          public Void call() throws IOException {
            boolean evictOnClose =
              getCacheConfig() != null ? getCacheConfig().shouldEvictOnClose() : true;
            f.closeStoreFile(!warmup && evictOnClose);
            return null;
          }
        });
      }

      IOException ioe = null;
      try {
        for (int i = 0; i < result.size(); i++) {
          try {
            Future<Void> future = completionService.take();
            future.get();
          } catch (InterruptedException e) {
            if (ioe == null) {
              ioe = new InterruptedIOException();
              ioe.initCause(e);
            }
          } catch (ExecutionException e) {
            if (ioe == null) {
              ioe = new IOException(e.getCause());
            }
          }
        }
      } finally {
        storeFileCloserThreadPool.shutdownNow();
      }
      if (ioe != null) {
        throw ioe;
      }
    }
    LOG.trace("Closed {}", this);
    return result;
  }
This method should only be called from Region. It is assumed that the ranges of values in the
HFile fit within the stores assigned region. (assertBulkLoadHFileOk checks this)
@param seqNum sequence Id associated with the HFile
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HStore.java