docs: public ExceptionResponse getExceptions(
        ExceptionRequest request) {
      synchronized (CacheCore.class) {
        List<ExceptionDatum> response = new ArrayList<>();
  
        Map<String, Set<String>> componentNameInstanceId = request.getComponentNameInstanceId();
  
        // candidate component names
        Set<String> componentNameFilter;
        if (componentNameInstanceId == null) {
          componentNameFilter = idxComponentInstance.keySet();
        } else {
          componentNameFilter = componentNameInstanceId.keySet();
        }
  
        for (String componentName : componentNameFilter) {
          // candidate instance ids
          Set<String> instanceIdFilter;
          if (componentNameInstanceId == null
              || componentNameInstanceId.get(componentName) == null) {
            instanceIdFilter = idxComponentInstance.get(componentName).keySet();
          } else {
            instanceIdFilter = componentNameInstanceId.get(componentName);
          }
  
          for (String instanceId : instanceIdFilter) {
            int idx = idxComponentInstance.get(componentName).get(instanceId);
            for (ExceptionDatapoint exceptionDatapoint : cacheException.get(idx)) {
              response.add(new ExceptionDatum(componentName, instanceId, exceptionDatapoint));
            }
          }
        }
  
        return new ExceptionResponse(response);
      }
    }