private boolean nameResolvedSuccessfully(int fileId) throws IOException {
    int nameId = recordsStorage.getNameId(fileId);
    if (nameId == DataEnumerator.NULL_ID) {
      return false;
    }
    try {
      String name = namesStorage.valueOf(nameId);
      if (name == null) {
        addProblem(NAME_STORAGE_INCOMPLETE,
                   "file[#" + fileId + "].nameId(=" + nameId + ") is not present in namesEnumerator");
        return false;
      }
      else if (!FSRecordsImpl.USE_FAST_NAMES_IMPLEMENTATION) {
        int reCheckNameId = namesStorage.tryEnumerate(name);
        if (reCheckNameId != nameId) {
          addProblem(NAME_STORAGE_INCOMPLETE,
                     "namesEnumerator is corrupted: file[#" + fileId + "]" +
                     ".nameId(=" + nameId + ") -> [" + name + "] -> tryEnumerate() -> " + reCheckNameId
          );
          return false;
        }
        //Fast (DurableStringEnumerator) implementation persists only forward (id->name) index, and re-build inverse
        // (name->id) index in memory, on each loading, so:
        // 1) no need to check inverse index since it can't be corrupted on disk
        // 2) inverse index is building async, so by trying to check it we force the building and ruin async-ness
      }
    }
    catch (Throwable t) {
      addProblem(NAME_STORAGE_INCOMPLETE,
                 "file[#" + fileId + "].nameId(=" + nameId + ") failed resolution in namesEnumerator", t
      );
      return false;
    }
    return true;
  }
private boolean nameResolvedSuccessfully(int fileId)