docs: public Result readCacheEntry(Object id, boolean calledFromRemove) {
          final String methodName = "readCacheEntry()";
          Result result = getFromResultPool();
          CacheEntry answer = null;
          if (this.invalidationBuffer.contains(id)) {
              return result;
          }
          HashtableEntry htEntry = null;
          boolean checkExpired = true;
          if (cache.isEnableListener() && cache.getEventSource().getInvalidationListenerCount() > 0 && this.cod.ignoreValueInInvalidationEvent == false) {
              checkExpired = false;
          }
          Object obj = null;
          try {
              rwLock.readLock().lock();
              //if (this.testException) {
              //    throw new FileManagerException("*** Generate filemanager exception");
              //}
              htEntry = object_cache.getHashTableEntry(id, checkExpired); // retrieve from HTOD
          } catch (FileManagerException ex) {
              this.diskCacheException = ex;
              result.diskException = ex;
              result.returnCode = DISK_EXCEPTION;
          } catch (HashtableOnDiskException ex) {
              this.diskCacheException = ex;
              result.diskException = ex;
              result.returnCode = DISK_EXCEPTION;
          } catch (IOException ex) {
              this.diskCacheException = ex;
              result.diskException = ex;
              result.returnCode = DISK_EXCEPTION;
          } catch (Exception ex) {
              result.returnCode = OTHER_EXCEPTION;
              result.diskException = ex;
          } finally {
              rwLock.readLock().unlock();
              if (result.returnCode != NO_EXCEPTION) {
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, methodName, "cacheName=" + this.cacheName + "\n Exception: " + ExceptionUtility.getStackTrace(result.diskException));
              }
              if (result.returnCode == DISK_EXCEPTION || result.returnCode == OTHER_EXCEPTION) {
                  com.ibm.ws.ffdc.FFDCFilter.processException(result.diskException, "com.ibm.ws.cache.HTODDynacache.readCacheEntry", "916", this);
                  return result;
              }
          }
  
          boolean expired = false;
          boolean alias = false;
          int dataSize = 0;
          Object origId = id;
          if (htEntry != null) {
              if (htEntry.isAliasId()) {
                  alias = true;
                  obj = htEntry.getValue();
                  origId = obj;
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, methodName, "cacheName=" + this.cacheName + " found alias=" + id + " cacheId=" + origId);
                  returnToHashtableEntryPool(htEntry);
                  try {
                      rwLock.readLock().lock();
                      if (this.invalidationBuffer.contains(origId)) {
                          return result;
                      }
                      htEntry = object_cache.getHashTableEntry(origId, checkExpired); // retrieve from HTOD
                  } catch (FileManagerException ex) {
                      this.diskCacheException = ex;
                      result.diskException = ex;
                      result.returnCode = DISK_EXCEPTION;
                  } catch (HashtableOnDiskException ex) {
                      this.diskCacheException = ex;
                      result.diskException = ex;
                      result.returnCode = DISK_EXCEPTION;
                  } catch (IOException ex) {
                      this.diskCacheException = ex;
                      result.diskException = ex;
                      result.returnCode = DISK_EXCEPTION;
                  } catch (Exception ex) {
                      result.returnCode = OTHER_EXCEPTION;
                      result.diskException = ex;
                  } finally {
                      rwLock.readLock().unlock();
                      if (result.returnCode != NO_EXCEPTION) {
                          if (tc.isDebugEnabled())
                              Tr.debug(tc, methodName, "cacheName=" + this.cacheName + "\n Exception: " + ExceptionUtility.getStackTrace(result.diskException));
                      }
                      if (result.returnCode == DISK_EXCEPTION || result.returnCode == OTHER_EXCEPTION) {
                          com.ibm.ws.ffdc.FFDCFilter.processException(result.diskException, "com.ibm.ws.cache.HTODDynacache.readCacheEntry", "916", this);
                          return result;
                      }
                  }
              }
              if (htEntry != null) {
                  if (htEntry.isExpired()) {
                      expired = true;
                      if (checkExpired) {
                          if (cache.isEnableListener() && cache.getEventSource().getInvalidationListenerCount() > 0) {
                              // In here - ignoreValueInInvalidationEvent = true
                              InvalidationEvent ie = new InvalidationEvent(origId, null, InvalidationEvent.DISK_TIMEOUT, InvalidationEvent.LOCAL, this.cache.getCacheName());
                              if (!this.invalidationBuffer.contains(origId)) {
                                  this.cache.getEventSource().fireEvent(ie);
                              }
                          }
                          this.invalidationBuffer.add(origId, HTODInvalidationBuffer.EXPLICIT_BUFFER, CachePerf.TIMEOUT, CachePerf.LOCAL, !Cache.FROM_DEPID_TEMPLATE_INVALIDATION,
                                                      !HTODInvalidationBuffer.FIRE_EVENT, !HTODInvalidationBuffer.ALIAS_ID);
                          if (alias) {
                              this.invalidationBuffer.add(id, HTODInvalidationBuffer.EXPLICIT_BUFFER, CachePerf.TIMEOUT, CachePerf.LOCAL, !Cache.FROM_DEPID_TEMPLATE_INVALIDATION,
                                                          !HTODInvalidationBuffer.FIRE_EVENT, HTODInvalidationBuffer.ALIAS_ID);
                          }
                          if (this.cod.diskCachePerformanceLevel != CacheConfig.HIGH && !calledFromRemove) {
                              this.cache.internalInvalidateByDepId(origId, CachePerf.TIMEOUT, CachePerf.LOCAL, Cache.FIRE_INVALIDATION_LISTENER);
                          }
                          returnToHashtableEntryPool(htEntry);
                          return result;
                      }
                  }
                  // Retrieve CE and put data back in CE
                  obj = htEntry.getValue();
                  dataSize = htEntry.size();
                  if (obj != null) {
                      try {
                          answer = (CacheEntry) SerializationUtility.deserialize((byte[]) obj, cacheName);
                          answer.setValidatorExpirationTime(htEntry.validatorExpirationTime());
                          byte[] serializedCacheValue = htEntry.getSerializedCacheValue();
                          if (serializedCacheValue != null) {
                              answer.serializedValue = serializedCacheValue;
                          }
                      } catch (Exception ex) {
                          result.returnCode = SERIALIZATION_EXCEPTION;
                          result.diskException = ex;
                          com.ibm.ws.ffdc.FFDCFilter.processException(result.diskException, "com.ibm.ws.cache.HTODDynacache.readCacheEntry", "953", this);
                          if (tc.isDebugEnabled())
                              Tr.debug(tc, methodName, "cacheName=" + this.cacheName + "\n Exception: " + ExceptionUtility.getStackTrace(result.diskException));
                      } finally {
                          returnToHashtableEntryPool(htEntry);
                      }
                  }
              }
          }
          if (answer != null) {
              if (expired) {
                  if (this.cache.isEnableListener() && cache.getEventSource().getInvalidationListenerCount() > 0) {
                      // In here - ignoreValueInInvalidationEvent = false
                      InvalidationEvent ie = new InvalidationEvent(answer.id, answer.serializedValue, InvalidationEvent.DISK_TIMEOUT, InvalidationEvent.LOCAL, this.cache.getCacheName());
                      if (!this.invalidationBuffer.contains(answer.id)) {
                          this.cache.getEventSource().fireEvent(ie);
                      }
                  }
                  this.invalidationBuffer.add(answer.id, HTODInvalidationBuffer.EXPLICIT_BUFFER, CachePerf.TIMEOUT, CachePerf.LOCAL, !Cache.FROM_DEPID_TEMPLATE_INVALIDATION,
                                              !HTODInvalidationBuffer.FIRE_EVENT, !HTODInvalidationBuffer.ALIAS_ID);
                  for (int i = 0; i < answer.aliasList.length; i++) {
                      this.invalidationBuffer.add(answer.aliasList[i], HTODInvalidationBuffer.EXPLICIT_BUFFER, CachePerf.TIMEOUT, CachePerf.LOCAL,
                                                  !Cache.FROM_DEPID_TEMPLATE_INVALIDATION, !HTODInvalidationBuffer.FIRE_EVENT, HTODInvalidationBuffer.ALIAS_ID);;
                  }
                  if (this.cod.diskCachePerformanceLevel != CacheConfig.HIGH && !calledFromRemove) {
                      //if (tc.isDebugEnabled()) Tr.debug(tc, methodName, "cacheName=" + this.cacheName + " id=" + answer.id + " check id as dep id");
                      this.cache.internalInvalidateByDepId(answer.id, CachePerf.TIMEOUT, CachePerf.LOCAL, Cache.FIRE_INVALIDATION_LISTENER);
                  }
                  answer = null;
              } else {
                  if (!calledFromRemove && answer.serializedValue != null) {
                      this.cache.getCacheStatisticsListener().readEntryFromDisk(answer.id, dataSize);
                  }
              }
          }
          result.data = answer;
          if (tc.isDebugEnabled())
              Tr.debug(tc, methodName, "cacheName=" + this.cacheName + " id=" + id + " cacheSizeInBytes=" + this.cod.currentCacheSizeInBytes);
          return result;
      }