diff options
author | alexvru <[email protected]> | 2023-08-22 17:04:52 +0300 |
---|---|---|
committer | alexvru <[email protected]> | 2023-08-22 17:44:05 +0300 |
commit | e4519ff36a125ba4dc8eb7910427974a5fd34a2c (patch) | |
tree | 3fbb5d022d2b0619d67b63a98fbdcb014705d00d | |
parent | d40726ba705519837b014cb71110b86258906f0d (diff) |
Propose PDisk metadata vault interface KIKIMR-19031
-rw-r--r-- | ydb/core/base/blobstorage.h | 4 | ||||
-rw-r--r-- | ydb/core/blobstorage/pdisk/blobstorage_pdisk.h | 32 | ||||
-rw-r--r-- | ydb/core/blobstorage/pdisk/blobstorage_pdisk_defs.h | 8 | ||||
-rw-r--r-- | ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.h | 7 |
4 files changed, 51 insertions, 0 deletions
diff --git a/ydb/core/base/blobstorage.h b/ydb/core/base/blobstorage.h index e0aa3e15b6b..4d3dad68997 100644 --- a/ydb/core/base/blobstorage.h +++ b/ydb/core/base/blobstorage.h @@ -698,6 +698,8 @@ struct TEvBlobStorage { EvFormatReencryptionFinish, EvDetectedPhantomBlobCommitted, EvGetLogoBlobIndexStatRequest, + EvReadMetadata, + EvWriteMetadata, EvYardInitResult = EvPut + 9 * 512, /// 268 636 672 EvLogResult, @@ -746,6 +748,8 @@ struct TEvBlobStorage { EvGetLogoBlobResponse, EvChunkForgetResult, EvGetLogoBlobIndexStatResponse, + EvReadMetadataResult, + EvWriteMetadataResult, // internal proxy interface EvUnusedLocal1 = EvPut + 10 * 512, // Not used. /// 268 637 184 diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h index d78c6859d43..6064b701275 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk.h @@ -1500,6 +1500,38 @@ struct TEvAskForCutLog : public TEventLocal<TEvAskForCutLog, TEvBlobStorage::EvA } }; +struct TEvReadMetadata : TEventLocal<TEvReadMetadata, TEvBlobStorage::EvReadMetadata> {}; + +struct TEvReadMetadataResult : TEventLocal<TEvReadMetadataResult, TEvBlobStorage::EvReadMetadataResult> { + EPDiskMetadataOutcome Outcome; + TRcBuf Metadata; + + TEvReadMetadataResult(EPDiskMetadataOutcome outcome) + : Outcome(outcome) + {} + + TEvReadMetadataResult(TRcBuf&& metadata) + : Outcome(EPDiskMetadataOutcome::OK) + , Metadata(std::move(metadata)) + {} +}; + +struct TEvWriteMetadata : TEventLocal<TEvWriteMetadata, TEvBlobStorage::EvWriteMetadata> { + TRcBuf Metadata; + + TEvWriteMetadata(TRcBuf&& metadata) + : Metadata(std::move(metadata)) + {} +}; + +struct TEvWriteMetadataResult : TEventLocal<TEvWriteMetadataResult, TEvBlobStorage::EvWriteMetadataResult> { + EPDiskMetadataOutcome Outcome; + + TEvWriteMetadataResult(EPDiskMetadataOutcome outcome) + : Outcome(outcome) + {} +}; + } // NPDisk } // NKikimr diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_defs.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_defs.h index 7ec5566846f..929e61c840e 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_defs.h +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_defs.h @@ -33,6 +33,14 @@ namespace NKikimr { } }; + enum class EPDiskMetadataOutcome { + OK, // metadata was successfully read/written + ERROR, // I/O, locking or some other kind of error has occured + UNFORMATTED, // pdisk is not formatted properly + METADATA_UNSUPPORTED, // metadata record is unsupported in this PDisk format + NO_METADATA, // no metadata record available + }; + typedef TPrintable_ui8 TOwner; typedef ui64 TOwnerRound; typedef ui32 TStatusFlags; diff --git a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.h b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.h index b3150e96ae5..cb8ab509075 100644 --- a/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.h +++ b/ydb/core/blobstorage/pdisk/blobstorage_pdisk_tools.h @@ -49,4 +49,11 @@ void FormatPDisk(TString path, ui64 diskSizeBytes, ui32 sectorSizeBytes, ui32 us bool ReadPDiskFormatInfo(const TString &path, const NPDisk::TMainKey &mainKey, TPDiskInfo &outInfo, const bool doLock = false, TIntrusivePtr<NPDisk::TSectorMap> sectorMap = nullptr); +// reads metadata from PDisk (if available) +NPDisk::EPDiskMetadataOutcome ReadPDiskMetadata(const TString& path, const NPDisk::TKey& key, TRcBuf& metadata); + +// updated PDisk metadata (when PDisk is properly formatted and supports metadata vault); size of metadata should not +// exceed 15 MiB; when function fails (even many times), previusly stored metadata must be kept intact +NPDisk::EPDiskMetadataOutcome WritePDiskMetadata(const TString& path, const NPDisk::TKey& key, TRcBuf&& metadata); + } // NKikimr |