@VisibleForTesting
  byte[] readAttributeValue(int attributesRecordId,
                            int fileId,
                            int attributeId) throws IOException {
    return storage.readRecord(attributesRecordId, buffer -> {
      AttributesRecord attributesRecord = new AttributesRecord(buffer);
      attributesRecord.checkBackrefFile(attributesRecordId, fileId);


      if (!attributesRecord.findAttributeInDirectoryRecord(attributeId)) {
        return null;
      }

      AttributeEntry attributeEntry = attributesRecord.currentEntry();
      if (attributeEntry.isValueInlined()) {
        return attributeEntry.inlinedValueAsByteArray();
      }

      int dedicatedRecordId = attributeEntry.dedicatedValueRecordId();
      return storage.readRecord(
        dedicatedRecordId,
        dedicatedRecordBuffer -> readDedicatedRecordPayload(
          attributesRecordId, fileId, attributeEntry.attributeId,
          dedicatedRecordBuffer
        )
      );
    });
  }
@VisibleForTesting
  byte[] readAttributeValue(int attributesRecordId,
                            int fileId,
                            int attributeId)