kerneltime commented on PR #3091:
URL: https://github.com/apache/ozone/pull/3091#issuecomment-1128112377

   If I get the time, I will see if I can add additional tests but this should 
address my concern for leaving entries in the LRU cache that never get evicted 
   ```
   diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
   index af0958a205..2377bb0b3a 100644
   --- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
   +++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ContainerCache.java
   @@ -143,7 +143,7 @@ public ReferenceCountedDB getDB(long containerID, String 
containerDBType,
          lock.lock();
          try {
            db = (ReferenceCountedDB) this.get(containerDBPath);
   -        if (db != null) {
   +        if (db != null && !db.isClosed()) {
              metrics.incNumCacheHits();
              db.incrementReference();
              return db;
   @@ -170,7 +170,7 @@ public ReferenceCountedDB getDB(long containerID, String 
containerDBType,
          try {
            ReferenceCountedDB currentDB =
                (ReferenceCountedDB) this.get(containerDBPath);
   -        if (currentDB != null) {
   +        if (currentDB != null && !db.isClosed()) {
              // increment the reference before returning the object
              currentDB.incrementReference();
              // clean the db created in previous step
   diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
   index 5fe61a85b0..d20dd6fd80 100644
   --- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
   +++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/utils/ReferenceCountedDB.java
   @@ -95,4 +95,8 @@ public DatanodeStore getStore() {
      public void close() {
        decrementReference();
      }
   +
   +  public boolean isClosed() {
   +    return store.isClosed();
   +  }
    }
   \ No newline at end of file
   diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/AbstractDatanodeStore.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/AbstractDatanodeStore.java
   index f9f794df7d..56c44455c7 100644
   --- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/AbstractDatanodeStore.java
   +++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/AbstractDatanodeStore.java
   @@ -189,6 +189,11 @@ public BatchOperationHandler getBatchHandler() {
                blockDataTableWithIterator.iterator(), filter);
      }
    
   +  @Override
   +  public boolean isClosed() {
   +    return store.isClosed();
   +  }
   +
      @Override
      public void flushDB() throws IOException {
        store.flushDB();
   diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeStore.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeStore.java
   index 5a0ce7a646..2bc3b7a46b 100644
   --- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeStore.java
   +++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/metadata/DatanodeStore.java
   @@ -91,4 +91,6 @@
    
      BlockIterator<BlockData>
          getBlockIterator(MetadataKeyFilters.KeyPrefixFilter filter);
   +
   +  boolean isClosed();
    }
   diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStore.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStore.java
   index 2ac2bdc730..e4b8bd02b6 100644
   --- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStore.java
   +++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/DBStore.java
   @@ -197,4 +197,6 @@ DBUpdatesWrapper getUpdatesSince(long sequenceNumber)
       */
      DBUpdatesWrapper getUpdatesSince(long sequenceNumber, long limitCount)
          throws SequenceNumberNotFoundException;
   +
   +  boolean isClosed();
    }
   diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
   index 467cf4462d..baaa17e49a 100644
   --- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
   +++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RDBStore.java
   @@ -327,6 +327,11 @@ public DBUpdatesWrapper getUpdatesSince(long 
sequenceNumber, long limitCount)
        return dbUpdatesWrapper;
      }
    
   +  @Override
   +  public boolean isClosed() {
   +    return db.isClosed();
   +  }
   +
      @VisibleForTesting
      public RocksDatabase getDb() {
        return db;
   diff --git 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RocksDatabase.java
 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RocksDatabase.java
   index 4457551602..963d894562 100644
   --- 
a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RocksDatabase.java
   +++ 
b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/utils/db/RocksDatabase.java
   @@ -62,6 +62,7 @@
      static final Logger LOG = LoggerFactory.getLogger(RocksDatabase.class);
    
      static final String ESTIMATE_NUM_KEYS = "rocksdb.estimate-num-keys";
   +  boolean dbClosed;
    
      /**
       * Read DB and return existing column families.
   @@ -172,6 +173,10 @@ private static void runWithTryCatch(Runnable runnable, 
Object name) {
        };
      }
    
   +  public boolean isClosed() {
   +    return isClosed.get();
   +  }
   +
      /**
       * Represents a checkpoint of the db.
       *
   ```


-- 
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]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to