docs: @Trivial // return value contains customer data
      @FFDCIgnore(Exception.class) //manually logged
      Object getAllValues(BackedSession sess) {
          @SuppressWarnings("static-access")
          final boolean hideValues = _smc.isHideSessionValues();
          final boolean trace = TraceComponent.isAnyTracingEnabled();
  
          if (trace && tc.isEntryEnabled())
              Tr.entry(this, tc, "getAllValues", sess);
  
          String id = sess.getId();
  
          long startTime = System.nanoTime();
          long readSize = 0;
          Hashtable<String, Object> h = new Hashtable<String, Object>();
  
          try {
  
              if (trace && tc.isDebugEnabled())
                  tcInvoke(tcSessionMetaCache, "get", id);
  
              ArrayList<?> list = sessionMetaCache.get(id);
  
              if (trace && tc.isDebugEnabled())
                  tcReturn(tcSessionMetaCache, "get", list);
  
              Set<String> propIds = list == null ? null : new SessionInfo(list).getSessionPropertyIds();
  
              if (propIds != null) {
                  for (String propId : propIds) {
                      // If an attribute is already in appDataRemovals or appDataChanges, then the attribute was already retrieved from the cache.  Skip retrieval from the cache here.
                      if (sess.appDataRemovals != null && sess.appDataRemovals.containsKey(propId)) {
                          if (trace && tc.isDebugEnabled())
                              Tr.debug(this, tc, "Found property " + propId + " in appDataRemovals, skipping query for this prop");
                          continue;
                      } else if (sess.appDataChanges != null && sess.appDataChanges.containsKey(propId)) {
                          if (trace && tc.isDebugEnabled())
                              Tr.debug(this, tc, "Found property " + propId + " in appDataChanges, skipping query for this prop");
                          continue;
                      }
  
                      String attributeKey = createSessionAttributeKey(id, propId);
  
                      if (trace && tc.isDebugEnabled())
                          tcInvoke(tcSessionAttrCache, "get", attributeKey);
  
                      byte[] b = sessionAttributeCache.get(attributeKey);
  
                      if (b == null) {
                          if (trace && tc.isDebugEnabled())
                              tcReturn(tcSessionAttrCache, "get", "null");
                      } else {
                          Object value;
                          try {
                              value = deserialize(b);
                              readSize += b.length;
  
                              if (trace && tc.isDebugEnabled())
                                  if (hideValues)
                                      tcReturn(tcSessionAttrCache, "get", "byte[" + b.length + "]");
                                  else
                                      tcReturn(tcSessionAttrCache, "get", b, value);
                          } catch (Exception x) {
                              if (trace && tc.isDebugEnabled())
                                  tcReturn(tcSessionAttrCache, "get", hideValues ? ("byte[" + b.length + "]") : b);
  
                              FFDCFilter.processException(x, getClass().getName(), "91", sess, new Object[] { hideValues ? "byte[" + b.length + "]" : TypeConversion.limitedBytesToString(b) });
                              throw x;
                          }                   
                          if (value != null) {
                              h.put(propId, value);
                          }
                      }
                  }
              }
  
              SessionStatistics pmiStats = _iStore.getSessionStatistics();
              if (pmiStats != null) {
                  pmiStats.readTimes(readSize, TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startTime));
              }
          } catch (Exception ex) {
              FFDCFilter.processException(ex, "com.ibm.ws.session.store.cache.CacheHashMap.getAllValues", "448", this, new Object[] { sess });
              Tr.error(tc, "LOAD_VALUE_ERROR", ex);
              throw new RuntimeException(Tr.formatMessage(tc, "INTERNAL_SERVER_ERROR"));
          }
  
          if (trace && tc.isEntryEnabled())
              Tr.exit(this, tc, "getAllValues", hideValues ? h.keySet() : h);
          return h;
      }