@Override
    public void run() {
      List<RAMQueueEntry> entries = new ArrayList<>();
      try {
        while (isCacheEnabled() && writerEnabled) {
          try {
            try {
              // Blocks
              entries = getRAMQueueEntries(inputQueue, entries);
            } catch (InterruptedException ie) {
              if (!isCacheEnabled() || !writerEnabled) {
                break;
              }
            }
            doDrain(entries, metaBuff);
          } catch (Exception ioe) {
            LOG.error("WriterThread encountered error", ioe);
          }
        }
      } catch (Throwable t) {
        LOG.warn("Failed doing drain", t);
      }
      LOG.info(this.getName() + " exiting, cacheEnabled=" + isCacheEnabled());
    }
Free the space if the used size reaches acceptableSize() or one size block couldn't be
allocated. When freeing the space, we use the LRU algorithm and ensure there must be some
blocks evicted
@param why Why we are being called
hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java