From fa8f6a7282ba77f776e659ca1ed949b22198b915 Mon Sep 17 00:00:00 2001 From: Egor Kulin Date: Mon, 27 May 2024 09:48:53 +0000 Subject: [PATCH] Minor changes in TGroupId --- ydb/core/base/id_wrapper.h | 11 +++- .../nodewarden/distconf_validate.cpp | 4 +- .../nodewarden/node_warden_group_resolver.cpp | 2 +- .../skeleton/blobstorage_skeletonfront.cpp | 11 ++-- ydb/core/cms/cluster_info.cpp | 4 +- .../keyvalue/keyvalue_storage_request.cpp | 16 +++--- .../mind/bscontroller/cmds_storage_pool.cpp | 4 +- ydb/core/mind/bscontroller/disk_metrics.cpp | 2 +- .../mind/bscontroller/group_geometry_info.h | 2 +- ydb/core/mind/bscontroller/group_mapper.cpp | 2 +- .../bscontroller/group_metrics_exchange.cpp | 2 +- .../mind/bscontroller/load_everything.cpp | 2 +- ydb/core/mind/bscontroller/migrate.cpp | 2 +- ydb/core/mind/bscontroller/monitoring.cpp | 8 +-- .../mind/bscontroller/propose_group_key.cpp | 2 +- ydb/core/mind/bscontroller/register_node.cpp | 4 +- .../bscontroller/request_controller_info.cpp | 2 +- ydb/core/mind/bscontroller/scheme.h | 2 +- ydb/core/mind/bscontroller/select_groups.cpp | 2 +- .../bscontroller/update_group_latencies.cpp | 4 +- ydb/core/mind/bscontroller/virtual_group.cpp | 50 +++++++++---------- ydb/core/tablet/tablet_req_rebuildhistory.cpp | 4 +- ydb/core/tablet_flat/flat_cxx_database.h | 17 +++++++ 23 files changed, 93 insertions(+), 66 deletions(-) diff --git a/ydb/core/base/id_wrapper.h b/ydb/core/base/id_wrapper.h index e66cab7e7930..f9fc17d634ca 100644 --- a/ydb/core/base/id_wrapper.h +++ b/ydb/core/base/id_wrapper.h @@ -16,7 +16,8 @@ template class TIdWrapper { T Raw; public: - TIdWrapper() = default; + constexpr TIdWrapper() noexcept : Raw(0) { + } ~TIdWrapper() = default; @@ -35,6 +36,14 @@ template class TIdWrapper { (message->*pfn)(*this); } + static constexpr TIdWrapper FromValue(T value) noexcept { + return TIdWrapper(value); + } + + static constexpr TIdWrapper Zero() noexcept { + return TIdWrapper(); + } + TIdWrapper &operator+=(const T &other) { Raw += other.Raw; return *this; diff --git a/ydb/core/blobstorage/nodewarden/distconf_validate.cpp b/ydb/core/blobstorage/nodewarden/distconf_validate.cpp index 1b95421456ea..ff9b0b05f9bd 100644 --- a/ydb/core/blobstorage/nodewarden/distconf_validate.cpp +++ b/ydb/core/blobstorage/nodewarden/distconf_validate.cpp @@ -39,7 +39,7 @@ namespace NKikimr::NStorage { THashMap> vdisks; for (const auto& vslot : current.GetVDisks()) { TVDiskID vdiskId = VDiskIDFromVDiskID(vslot.GetVDiskID()); - const auto it = currentGroupGens.find(vdiskId.GroupID); + const auto it = currentGroupGens.find(vdiskId.GroupID.GetRawId()); if (it == currentGroupGens.end() || it->second != vdiskId.GroupGeneration) { continue; } @@ -75,7 +75,7 @@ namespace NKikimr::NStorage { const bool changed = it->second != std::make_tuple(l.GetNodeID(), l.GetPDiskID(), l.GetVDiskSlotID(), l.GetPDiskGuid()) || invalidatedNodeIds.contains(l.GetNodeID()) || invalidatedPDiskIds.contains(std::make_tuple(l.GetNodeID(), l.GetPDiskID())); - if (changed && !changedGroups.emplace(vdiskId.GroupID).second) { + if (changed && !changedGroups.emplace(vdiskId.GroupID.GetRawId()).second) { return "more than one slot has changed in group"; } diff --git a/ydb/core/blobstorage/nodewarden/node_warden_group_resolver.cpp b/ydb/core/blobstorage/nodewarden/node_warden_group_resolver.cpp index a9b78c702432..51a3e1248f4d 100644 --- a/ydb/core/blobstorage/nodewarden/node_warden_group_resolver.cpp +++ b/ydb/core/blobstorage/nodewarden/node_warden_group_resolver.cpp @@ -338,7 +338,7 @@ namespace NKikimr::NStorage { } for (const auto& [key, value] : LocalVDisks) { if (const auto& r = value.RuntimeData; r && !r->DonorMode) { - record.AddStartedGroupIds(r->GroupInfo->GroupID); + record.AddStartedGroupIds(r->GroupInfo->GroupID.GetRawId()); } } Send(ev->Sender, res.release(), 0, ev->Cookie); diff --git a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp index 89be8d4226e3..44e68102499d 100644 --- a/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp +++ b/ydb/core/blobstorage/vdisk/skeleton/blobstorage_skeletonfront.cpp @@ -22,6 +22,7 @@ #include #include #include +#include #include #include @@ -677,7 +678,7 @@ namespace NKikimr { ui64 AllocateMessageId() { return NextUniqueMessageId++; } - + using TGroupId = TIdWrapper; //////////////////////////////////////////////////////////////////////// // NOTIFICATIONS //////////////////////////////////////////////////////////////////////// @@ -714,7 +715,7 @@ namespace NKikimr { const auto &bi = Config->BaseInfo; TString path = Sprintf("vdisk%09" PRIu32 "_%09" PRIu32, bi.PDiskId, bi.VDiskSlotId); TString name = Sprintf("%s VDisk%09" PRIu32 "_%09" PRIu32 " (%" PRIu32 ")", - VCtx->VDiskLogPrefix.data(), bi.PDiskId, bi.VDiskSlotId, GInfo->GroupID); + VCtx->VDiskLogPrefix.data(), bi.PDiskId, bi.VDiskSlotId, GInfo->GroupID.GetRawId()); mon->RegisterActorPage(vdisksMonPage, path, name, false, ctx.ExecutorThread.ActorSystem, ctx.SelfID); } } @@ -1463,7 +1464,7 @@ namespace NKikimr { auto newInfo = TBlobStorageGroupInfo::Parse(record.GetRecentGroup(), nullptr, nullptr); ChangeGeneration(vdiskId, newInfo, ctx); Y_ABORT_UNLESS(vdiskId == SelfVDiskId); - const ui32 groupId = newInfo->GroupID; + const TGroupId groupId = newInfo->GroupID; const ui32 generation = newInfo->GroupGeneration; auto ev = std::make_unique(groupId, generation, *newInfo->Group); Send(MakeBlobStorageNodeWardenID(SelfId().NodeId()), ev.release()); @@ -1619,7 +1620,7 @@ namespace NKikimr { const TActorContext& ctx) { // check group id Y_ABORT_UNLESS(info->GroupID == GInfo->GroupID, "GroupId# %" PRIu32 " new GroupId# %" PRIu32, - GInfo->GroupID, info->GroupID); + GInfo->GroupID.GetRawId(), info->GroupID.GetRawId()); // check target disk id Y_ABORT_UNLESS(TVDiskIdShort(SelfVDiskId) == TVDiskIdShort(vdiskId), "Incorrect target VDiskId" @@ -2114,7 +2115,7 @@ namespace NKikimr { chain.emplace_back("storagePool", cfg->BaseInfo.StoragePoolName); // add 'group' label - const ui32 blobstorageGroupId = info->GroupID; + const ui32 blobstorageGroupId = info->GroupID.GetRawId(); chain.emplace_back("group", Sprintf("%09" PRIu32, blobstorageGroupId)); // add 'orderNumber' label (VDisk order number in the group) diff --git a/ydb/core/cms/cluster_info.cpp b/ydb/core/cms/cluster_info.cpp index 1bfa92b04e68..fc7b39695ca6 100644 --- a/ydb/core/cms/cluster_info.cpp +++ b/ydb/core/cms/cluster_info.cpp @@ -261,7 +261,7 @@ TString TVDiskInfo::PrettyItemName() const TString TVDiskInfo::GetDeviceName() const { - return Sprintf("vdisk-%u-%u-%u-%u-%u", VDiskId.GroupID, VDiskId.GroupGeneration, + return Sprintf("vdisk-%u-%u-%u-%u-%u", VDiskId.GroupID.GetRawId(), VDiskId.GroupGeneration, VDiskId.FailRealm, VDiskId.FailDomain, VDiskId.VDisk); } @@ -1008,7 +1008,7 @@ void TClusterInfo::DebugDump(const TActorContext &ctx) const TStringStream ss; auto &group = entry.second; ss << "BSGroup {" << Endl - << " Id: " << (ui32)group.GroupId << Endl; + << " Id: " << group.GroupId << Endl; if (group.Erasure.GetErasure() == TErasureType::ErasureSpeciesCount) ss << " Erasure: UNKNOWN" << Endl; else diff --git a/ydb/core/keyvalue/keyvalue_storage_request.cpp b/ydb/core/keyvalue/keyvalue_storage_request.cpp index 7ae8ea961725..341b536d1fbe 100644 --- a/ydb/core/keyvalue/keyvalue_storage_request.cpp +++ b/ydb/core/keyvalue/keyvalue_storage_request.cpp @@ -109,7 +109,7 @@ class TKeyValueStorageRequest : public TActorBootstrappedStat.PutLatencies.push_back(duration.MilliSeconds()); auto groupId = ev->Get()->GroupId; - CheckYellow(ev->Get()->StatusFlags, groupId); + CheckYellow(ev->Get()->StatusFlags, groupId.GetRawId()); NKikimrProto::EReplyStatus status = ev->Get()->Status; if (status != NKikimrProto::OK) { @@ -157,14 +157,14 @@ class TKeyValueStorageRequest : public TActorBootstrappedStatusFlags.Merge(ev->Get()->StatusFlags.Raw); wr->Latency = duration; ++WriteRequestsReplied; - IntermediateResults->Stat.GroupWrittenBytes[std::make_pair(ev->Get()->Id.Channel(), groupId)] += ev->Get()->Id.BlobSize(); - IntermediateResults->Stat.GroupWrittenIops[std::make_pair(ev->Get()->Id.Channel(), groupId)] += 1; // FIXME: count distinct blobs? + IntermediateResults->Stat.GroupWrittenBytes[std::make_pair(ev->Get()->Id.Channel(), groupId.GetRawId())] += ev->Get()->Id.BlobSize(); + IntermediateResults->Stat.GroupWrittenIops[std::make_pair(ev->Get()->Id.Channel(), groupId.GetRawId())] += 1; // FIXME: count distinct blobs? UpdateRequest(ctx); } void Handle(TEvBlobStorage::TEvPatchResult::TPtr &ev, const TActorContext &ctx) { auto groupId = ev->Get()->GroupId; - CheckYellow(ev->Get()->StatusFlags, groupId); + CheckYellow(ev->Get()->StatusFlags, groupId.GetRawId()); NKikimrProto::EReplyStatus status = ev->Get()->Status; if (status != NKikimrProto::OK) { @@ -211,8 +211,8 @@ class TKeyValueStorageRequest : public TActorBootstrappedStatusFlags.Merge(ev->Get()->StatusFlags.Raw); ++PatchRequestsReplied; - IntermediateResults->Stat.GroupWrittenBytes[std::make_pair(ev->Get()->Id.Channel(), groupId)] += ev->Get()->Id.BlobSize(); - IntermediateResults->Stat.GroupWrittenIops[std::make_pair(ev->Get()->Id.Channel(), groupId)] += 1; + IntermediateResults->Stat.GroupWrittenBytes[std::make_pair(ev->Get()->Id.Channel(), groupId.GetRawId())] += ev->Get()->Id.BlobSize(); + IntermediateResults->Stat.GroupWrittenIops[std::make_pair(ev->Get()->Id.Channel(), groupId.GetRawId())] += 1; UpdateRequest(ctx); } @@ -337,8 +337,8 @@ class TKeyValueStorageRequest : public TActorBootstrappedStat.GroupReadBytes[std::make_pair(response.Id.Channel(), groupId)] += response.Buffer.size(); - IntermediateResults->Stat.GroupReadIops[std::make_pair(response.Id.Channel(), groupId)] += 1; // FIXME: count distinct blobs? + IntermediateResults->Stat.GroupReadBytes[std::make_pair(response.Id.Channel(), groupId.GetRawId())] += response.Buffer.size(); + IntermediateResults->Stat.GroupReadIops[std::make_pair(response.Id.Channel(), groupId.GetRawId())] += 1; // FIXME: count distinct blobs? read.Value.Write(readItem.ValueOffset, std::move(response.Buffer)); } else { Y_VERIFY_DEBUG_S(response.Status != NKikimrProto::NODATA, "NODATA received for TEvGet" diff --git a/ydb/core/mind/bscontroller/cmds_storage_pool.cpp b/ydb/core/mind/bscontroller/cmds_storage_pool.cpp index 7356c0bbe76d..374a58808851 100644 --- a/ydb/core/mind/bscontroller/cmds_storage_pool.cpp +++ b/ydb/core/mind/bscontroller/cmds_storage_pool.cpp @@ -330,7 +330,7 @@ namespace NKikimr::NBsController { auto *existing = sp->MutableExistingGroups(); for (TGroupId groupId : kv.second) { - existing->AddGroupId(groupId); + existing->AddGroupId(groupId.GetRawId()); } } @@ -541,7 +541,7 @@ namespace NKikimr::NBsController { for (const auto& [vslotId, vslot] : StaticVSlots) { auto *x = pb->AddVSlot(); vslotId.Serialize(x->MutableVSlotId()); - x->SetGroupId(vslot.VDiskId.GroupID); + x->SetGroupId(vslot.VDiskId.GroupID.GetRawId()); x->SetGroupGeneration(vslot.VDiskId.GroupGeneration); x->SetFailRealmIdx(vslot.VDiskId.FailRealm); x->SetFailDomainIdx(vslot.VDiskId.FailDomain); diff --git a/ydb/core/mind/bscontroller/disk_metrics.cpp b/ydb/core/mind/bscontroller/disk_metrics.cpp index 0270e5d2705f..576efc877909 100644 --- a/ydb/core/mind/bscontroller/disk_metrics.cpp +++ b/ydb/core/mind/bscontroller/disk_metrics.cpp @@ -27,7 +27,7 @@ class TBlobStorageController::TTxUpdateDiskMetrics : public TTransactionBaseVSlots) { if (std::exchange(v->MetricsDirty, false)) { - auto&& key = std::tie(v->GroupId, v->GroupGeneration, v->RingIdx, v->FailDomainIdx, v->VDiskIdx); + auto&& key = std::tie(v->GroupId.GetRawId(), v->GroupGeneration, v->RingIdx, v->FailDomainIdx, v->VDiskIdx); auto value = v->Metrics; value.ClearVDiskId(); db.Table().Key(key).Update(value); diff --git a/ydb/core/mind/bscontroller/group_geometry_info.h b/ydb/core/mind/bscontroller/group_geometry_info.h index f0e0f1f32596..2e6e0ff14bdc 100644 --- a/ydb/core/mind/bscontroller/group_geometry_info.h +++ b/ydb/core/mind/bscontroller/group_geometry_info.h @@ -86,7 +86,7 @@ namespace NKikimr::NBsController { i64 requiredSpace) const { TString error; for (const bool requireOperational : {true, false}) { - if (mapper.AllocateGroup(groupId, group, constrainsts, replacedDisks, forbid, requiredSpace, requireOperational, error)) { + if (mapper.AllocateGroup(groupId.GetRawId(), group, constrainsts, replacedDisks, forbid, requiredSpace, requireOperational, error)) { return; } } diff --git a/ydb/core/mind/bscontroller/group_mapper.cpp b/ydb/core/mind/bscontroller/group_mapper.cpp index 65f5fe6df4e4..8a6f86c1dfe3 100644 --- a/ydb/core/mind/bscontroller/group_mapper.cpp +++ b/ydb/core/mind/bscontroller/group_mapper.cpp @@ -1152,7 +1152,7 @@ namespace NKikimr::NBsController { return Impl->FindMisplacedVDisks(group); } - std::optional TGroupMapper::TargetMisplacedVDisk(ui32 groupId, TGroupMapper::TGroupDefinition& group, + std::optional TGroupMapper::TargetMisplacedVDisk(TGroupId groupId, TGroupMapper::TGroupDefinition& group, TVDiskIdShort vdisk, TForbiddenPDisks forbid, i64 requiredSpace, bool requireOperational, TString& error) { return Impl->TargetMisplacedVDisk(groupId, group, vdisk, std::move(forbid), requiredSpace, requireOperational, error); } diff --git a/ydb/core/mind/bscontroller/group_metrics_exchange.cpp b/ydb/core/mind/bscontroller/group_metrics_exchange.cpp index 1f24f59f3089..972ba0446de6 100644 --- a/ydb/core/mind/bscontroller/group_metrics_exchange.cpp +++ b/ydb/core/mind/bscontroller/group_metrics_exchange.cpp @@ -38,7 +38,7 @@ namespace NKikimr::NBsController { for (const TGroupId groupId : record.GetGroupsToQuery()) { if (TGroupInfo *group = Self->FindGroup(groupId)) { auto *item = outRecord.AddGroupMetrics(); - item->SetGroupId(group->ID); + item->SetGroupId(group->ID.GetRawId()); group->FillInGroupParameters(item->MutableGroupParameters()); } } diff --git a/ydb/core/mind/bscontroller/load_everything.cpp b/ydb/core/mind/bscontroller/load_everything.cpp index c7fd459635c4..570027d6de3b 100644 --- a/ydb/core/mind/bscontroller/load_everything.cpp +++ b/ydb/core/mind/bscontroller/load_everything.cpp @@ -364,7 +364,7 @@ class TBlobStorageController::TTxLoadEverything : public TTransactionBase(); - Y_ABORT_UNLESS(groupId); + Y_ABORT_UNLESS(groupId.GetRawId()); auto& x = Self->AddVSlot(vslotId, pdisk, groupId, slot.GetValueOrDefault(), slot.GetValue(), slot.GetValue(), slot.GetValue(), diff --git a/ydb/core/mind/bscontroller/migrate.cpp b/ydb/core/mind/bscontroller/migrate.cpp index b70bbb9ad060..9c3fc52e7b29 100644 --- a/ydb/core/mind/bscontroller/migrate.cpp +++ b/ydb/core/mind/bscontroller/migrate.cpp @@ -65,7 +65,7 @@ class TBlobStorageController::TTxMigrate : public TTransactionBase()) { + if (!slots.GetValue().GetRawId()) { // item scheduled for deletion eraseList.push_back(slots.GetKey()); } diff --git a/ydb/core/mind/bscontroller/monitoring.cpp b/ydb/core/mind/bscontroller/monitoring.cpp index 3b6812683584..d199dd2dffd9 100644 --- a/ydb/core/mind/bscontroller/monitoring.cpp +++ b/ydb/core/mind/bscontroller/monitoring.cpp @@ -323,7 +323,7 @@ class TBlobStorageController::TTxMonEvent_HealthEvents static NJson::TJsonValue ToJson(const TVDiskID& vdiskId) { NJson::TJsonValue j(NJson::JSON_MAP); - j["GroupId"] = vdiskId.GroupID; + j["GroupId"] = vdiskId.GroupID.GetRawId(); j["GroupGeneration"] = vdiskId.GroupGeneration; j["FailRealmIdx"] = vdiskId.FailRealm; j["FailDomainIdx"] = vdiskId.FailDomain; @@ -685,17 +685,17 @@ class TBlobStorageController::TTxMonEvent_GetDown : public TTransactionBaseFindGroup(GroupId)) { json = reportGroup(*group); } else { - json["Error"] = Sprintf("GroupId# %" PRIu32 " not found", GroupId); + json["Error"] = Sprintf("GroupId# %" PRIu32 " not found", GroupId.GetRawId()); } } else { for (const auto& kv : Self->GroupMap) { diff --git a/ydb/core/mind/bscontroller/propose_group_key.cpp b/ydb/core/mind/bscontroller/propose_group_key.cpp index ed8b8b5d65dd..0f54a0bf01ef 100644 --- a/ydb/core/mind/bscontroller/propose_group_key.cpp +++ b/ydb/core/mind/bscontroller/propose_group_key.cpp @@ -70,7 +70,7 @@ class TBlobStorageController::TTxProposeGroupKey : public TTransactionBaseEncryptedGroupKey = EncryptedGroupKey; group->GroupKeyNonce = GroupKeyNonce; group->MainKeyVersion = MainKeyVersion; - db.Table().Key(GroupId).Update( + db.Table().Key(GroupId.GetRawId()).Update( NIceDb::TUpdate(TBlobStorageGroupInfo::ELCP_IN_USE), NIceDb::TUpdate(MainKeyId), NIceDb::TUpdate(EncryptedGroupKey), diff --git a/ydb/core/mind/bscontroller/register_node.cpp b/ydb/core/mind/bscontroller/register_node.cpp index 626ed05c1521..35e568b3d5e2 100644 --- a/ydb/core/mind/bscontroller/register_node.cpp +++ b/ydb/core/mind/bscontroller/register_node.cpp @@ -269,7 +269,7 @@ class TBlobStorageController::TTxRegisterNode for (auto it = Self->VSlots.lower_bound(vslotId); it != Self->VSlots.end() && it->first.NodeId == nodeId; ++it) { Self->ReadVSlot(*it->second, Response.get()); if (!it->second->IsBeingDeleted()) { - groupIDsToRead.insert(it->second->GroupId); + groupIDsToRead.insert(it->second->GroupId.GetRawId()); } } @@ -380,7 +380,7 @@ void TBlobStorageController::ReadGroups(TSet& groupIDsToRead, bool discard NKikimrBlobStorage::TNodeWardenServiceSet *serviceSetProto = result->Record.MutableServiceSet(); NKikimrBlobStorage::TGroupInfo *groupProto = serviceSetProto->AddGroups(); if (!group) { - groupProto->SetGroupID(groupId); + groupProto->SetGroupID(groupId.GetRawId()); groupProto->SetEntityStatus(NKikimrBlobStorage::DESTROY); } else if (group->Listable()) { const TStoragePoolInfo& info = StoragePools.at(group->StoragePoolId); diff --git a/ydb/core/mind/bscontroller/request_controller_info.cpp b/ydb/core/mind/bscontroller/request_controller_info.cpp index 7f2952f8bb88..9ac95127bc98 100644 --- a/ydb/core/mind/bscontroller/request_controller_info.cpp +++ b/ydb/core/mind/bscontroller/request_controller_info.cpp @@ -26,7 +26,7 @@ class TBlobStorageController::TTxRequestControllerInfo : public TTransactionBase auto processGroup = [&](TGroupInfo *group) { auto *protoGroupInfo = responseRecord.AddBSGroupInfo(); - protoGroupInfo->SetGroupId(group->ID); + protoGroupInfo->SetGroupId(group->ID.GetRawId()); protoGroupInfo->SetErasureSpecies(group->ErasureSpecies); const TResourceRawValues& groupResources = group->GetResourceCurrentValues(); protoGroupInfo->SetDataSize(groupResources.DataSize); diff --git a/ydb/core/mind/bscontroller/scheme.h b/ydb/core/mind/bscontroller/scheme.h index b470ec428c8d..f57c7b3689d3 100644 --- a/ydb/core/mind/bscontroller/scheme.h +++ b/ydb/core/mind/bscontroller/scheme.h @@ -121,7 +121,7 @@ struct Schema : NIceDb::Schema { struct PDiskID : Column<2, PDisk::PDiskID::ColumnType> {}; // PK + FK PDisk.PDiskID struct VSlotID : Column<3, NScheme::NTypeIds::Uint32> {}; // PK struct Category : Column<4, NScheme::NTypeIds::Uint64> { using Type = NKikimrBlobStorage::TVDiskKind::EVDiskKind; }; - struct GroupID : Column<5, Group::ID::ColumnType> {using Type = TIdWrapper; }; // FK Group.ID + struct GroupID : Column<5, Group::ID::ColumnType> {using Type = TIdWrapper; static constexpr Type Default = TIdWrapper::Zero(); }; // FK Group.ID struct GroupGeneration : Column<6, Group::Generation::ColumnType> {}; struct RingIdx : Column<7, NScheme::NTypeIds::Uint32> {}; struct FailDomainIdx : Column<8, NScheme::NTypeIds::Uint32> {}; diff --git a/ydb/core/mind/bscontroller/select_groups.cpp b/ydb/core/mind/bscontroller/select_groups.cpp index 0c84c1f5c0f7..d2fd77976047 100644 --- a/ydb/core/mind/bscontroller/select_groups.cpp +++ b/ydb/core/mind/bscontroller/select_groups.cpp @@ -52,7 +52,7 @@ class TBlobStorageController::TTxSelectGroups : public TTransactionBaseDown && (group->SeenOperational || !record.GetOnlySeenOperational())) { auto *reportedGroup = pb->AddGroups(); reportedGroup->SetErasureSpecies(group->ErasureSpecies); - reportedGroup->SetGroupID(group->ID); + reportedGroup->SetGroupID(group->ID.GetRawId()); reportedGroup->SetStoragePoolName(Self->StoragePools.at(group->StoragePoolId).Name); reportedGroup->SetPhysicalGroup(group->IsPhysicalGroup()); reportedGroup->SetDecommitted(group->IsDecommitted()); diff --git a/ydb/core/mind/bscontroller/update_group_latencies.cpp b/ydb/core/mind/bscontroller/update_group_latencies.cpp index cc1187bc5c70..9f8f1260c0a5 100644 --- a/ydb/core/mind/bscontroller/update_group_latencies.cpp +++ b/ydb/core/mind/bscontroller/update_group_latencies.cpp @@ -25,9 +25,9 @@ class TBlobStorageController::TTxUpdateGroupLatencies : public TTransactionBase< #define UPDATE_CELL(VALUE, COLUMN) \ if (const auto& x = stats.VALUE) { \ - db.Table().Key(groupId).Update(NIceDb::TUpdate(x->MicroSeconds())); \ + db.Table().Key(groupId.GetRawId()).Update(NIceDb::TUpdate(x->MicroSeconds())); \ } else { \ - db.Table().Key(groupId).Update(NIceDb::TNull()); \ + db.Table().Key(groupId.GetRawId()).Update(NIceDb::TNull()); \ } UPDATE_CELL(PutTabletLog, PutTabletLogLatencyUs); diff --git a/ydb/core/mind/bscontroller/virtual_group.cpp b/ydb/core/mind/bscontroller/virtual_group.cpp index ef4c759de2a7..274100685b03 100644 --- a/ydb/core/mind/bscontroller/virtual_group.cpp +++ b/ydb/core/mind/bscontroller/virtual_group.cpp @@ -19,14 +19,14 @@ namespace NKikimr::NBsController { } }); } catch (const TExFound& ex) { - status.AddGroupId(ex.id); + status.AddGroupId(ex.id.GetRawId()); status.SetAlready(true); return; } // allocate group identifier auto& nextGroupId = NextVirtualGroupId.Unshare(); - TGroupID groupId(EGroupConfigurationType::Virtual, 1, nextGroupId); + TGroupID groupId(EGroupConfigurationType::Virtual, 1, nextGroupId.GetRawId()); ++nextGroupId; // determine storage pool that will contain newly created virtual group @@ -90,7 +90,7 @@ namespace NKikimr::NBsController { group->CalculateGroupStatus(); NKikimrBlobDepot::TBlobDepotConfig config; - config.SetVirtualGroupId(group->ID); + config.SetVirtualGroupId(group->ID.GetRawId()); config.MutableChannelProfiles()->CopyFrom(cmd.GetChannelProfiles()); const bool success = config.SerializeToString(&group->BlobDepotConfig.ConstructInPlace()); @@ -107,7 +107,7 @@ namespace NKikimr::NBsController { for (const TGroupId groupId : cmd.GetGroupIds()) { TGroupInfo *group = Groups.FindForUpdate(groupId); if (!group) { - throw TExGroupNotFound(groupId); + throw TExGroupNotFound(groupId.GetRawId()); } else if (group->DecommitStatus != NKikimrBlobStorage::TGroupDecommitStatus::NONE) { if (cmd.HasHiveId() && group->HiveId && *group->HiveId != cmd.GetHiveId()) { throw TExError() << "different hive specified for decommitting group" << TErrorParams::GroupId(groupId); @@ -130,7 +130,7 @@ namespace NKikimr::NBsController { group->CalculateGroupStatus(); NKikimrBlobDepot::TBlobDepotConfig config; - config.SetVirtualGroupId(groupId); + config.SetVirtualGroupId(groupId.GetRawId()); config.SetIsDecommittingGroup(true); auto *profiles = config.MutableChannelProfiles(); @@ -162,7 +162,7 @@ namespace NKikimr::NBsController { if (const TGroupInfo *poolGroup = Groups.Find(begin->second)) { numPhysicalGroups += poolGroup->IsPhysicalGroup(); } else { - throw TExGroupNotFound(begin->second) + throw TExGroupNotFound(begin->second.GetRawId()) << TErrorParams::BoxId(std::get<0>(group->StoragePoolId)) << TErrorParams::StoragePoolId(std::get<1>(group->StoragePoolId)); } @@ -192,7 +192,7 @@ namespace NKikimr::NBsController { const TGroupId groupId = cmd.GetGroupId(); TGroupInfo *group = Groups.FindForUpdate(groupId); if (!group) { - throw TExGroupNotFound(groupId); + throw TExGroupNotFound(groupId.GetRawId()); } else if (!group->VirtualGroupState) { throw TExError() << "group is not virtual" << TErrorParams::GroupId(groupId); } else if (auto s = group->VirtualGroupState; s != NKikimrBlobStorage::EVirtualGroupState::NEW && s != NKikimrBlobStorage::EVirtualGroupState::CREATE_FAILED) { @@ -532,7 +532,7 @@ namespace NKikimr::NBsController { ev->Record.CopyFrom(config.GetHiveParams()); } ev->Record.SetOwner(Self->TabletID()); - ev->Record.SetOwnerIdx(GroupId); + ev->Record.SetOwnerIdx(GroupId.GetRawId()); ev->Record.SetTabletType(TTabletTypes::BlobDepot); ev->Record.ClearBindedChannels(); @@ -569,7 +569,7 @@ namespace NKikimr::NBsController { } NTabletPipe::SendData(SelfId(), pipeId, invalidateEv.release()); - NTabletPipe::SendData(SelfId(), pipeId, new TEvHive::TEvReassignOnDecommitGroup(GroupId)); + NTabletPipe::SendData(SelfId(), pipeId, new TEvHive::TEvReassignOnDecommitGroup(GroupId.GetRawId())); } void HiveDelete(TGroupInfo *group) { @@ -589,17 +589,17 @@ namespace NKikimr::NBsController { HivePipeId = Register(NTabletPipe::CreateClient(SelfId(), hiveId, NTabletPipe::TClientRetryPolicy::WithRetries())); auto ev = tabletId - ? std::make_unique(Self->TabletID(), GroupId, *tabletId, 0) - : std::make_unique(Self->TabletID(), GroupId, 0); + ? std::make_unique(Self->TabletID(), GroupId.GetRawId(), *tabletId, 0) + : std::make_unique(Self->TabletID(), GroupId.GetRawId(), 0); - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG12, "sending TEvDeleteTablet", (GroupId, GroupId), + STLOG(PRI_INFO, BS_CONTROLLER, BSCVG12, "sending TEvDeleteTablet", (GroupId.GetRawId(), GroupId.GetRawId()), (HiveId, hiveId), (Msg, ev->Record)); NTabletPipe::SendData(SelfId(), HivePipeId, ev.release()); } void Handle(TEvTabletPipe::TEvClientConnected::TPtr ev) { - STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG02, "received TEvClientConnected", (GroupId, GroupId), + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG02, "received TEvClientConnected", (GroupId.GetRawId(), GroupId.GetRawId()), (Status, ev->Get()->Status), (ClientId, ev->Get()->ClientId), (HivePipeId, HivePipeId), (BlobDepotPipeId, BlobDepotPipeId)); @@ -621,7 +621,7 @@ namespace NKikimr::NBsController { } void Handle(TEvTabletPipe::TEvClientDestroyed::TPtr ev) { - STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG03, "received TEvClientDestroyed", (GroupId, GroupId), + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG03, "received TEvClientDestroyed", (GroupId.GetRawId(), GroupId.GetRawId()), (ClientId, ev->Get()->ClientId), (HivePipeId, HivePipeId), (BlobDepotPipeId, BlobDepotPipeId)); OnPipeError(ev->Get()->ClientId); @@ -638,12 +638,12 @@ namespace NKikimr::NBsController { } void Handle(TEvHive::TEvInvalidateStoragePoolsReply::TPtr ev) { - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG06, "received TEvInvalidateStoragePoolsReply", (GroupId, GroupId), + STLOG(PRI_INFO, BS_CONTROLLER, BSCVG06, "received TEvInvalidateStoragePoolsReply", (GroupId.GetRawId(), GroupId.GetRawId()), (Msg, ev->Get()->Record)); } void Handle(TEvHive::TEvReassignOnDecommitGroupReply::TPtr ev) { - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG07, "received TEvReassignOnDecommitGroupReply", (GroupId, GroupId), + STLOG(PRI_INFO, BS_CONTROLLER, BSCVG07, "received TEvReassignOnDecommitGroupReply", (GroupId.GetRawId(), GroupId.GetRawId()), (Msg, ev->Get()->Record)); if (TenantHiveInvalidateInProgress) { NTabletPipe::CloseAndForgetClient(SelfId(), TenantHivePipeId); @@ -654,7 +654,7 @@ namespace NKikimr::NBsController { } void Handle(TEvHive::TEvCreateTabletReply::TPtr ev) { - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG04, "received TEvCreateTabletReply", (GroupId, GroupId), + STLOG(PRI_INFO, BS_CONTROLLER, BSCVG04, "received TEvCreateTabletReply", (GroupId.GetRawId(), GroupId.GetRawId()), (Msg, ev->Get()->Record)); NTabletPipe::CloseAndForgetClient(SelfId(), HivePipeId); @@ -686,12 +686,12 @@ namespace NKikimr::NBsController { } void Handle(TEvHive::TEvTabletCreationResult::TPtr ev) { - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG05, "received TEvTabletCreationResult", (GroupId, GroupId), + STLOG(PRI_INFO, BS_CONTROLLER, BSCVG05, "received TEvTabletCreationResult", (GroupId.GetRawId(), GroupId.GetRawId()), (Msg, ev->Get()->Record)); } void Handle(TEvHive::TEvDeleteTabletReply::TPtr ev) { - STLOG(PRI_INFO, BS_CONTROLLER, BSCVG13, "received TEvDeleteTabletReply", (GroupId, GroupId), + STLOG(PRI_INFO, BS_CONTROLLER, BSCVG13, "received TEvDeleteTabletReply", (GroupId.GetRawId(), GroupId.GetRawId()), (Msg, ev->Get()->Record)); if (DeleteInfo) { OnBlobDepotDeleted(); @@ -702,7 +702,7 @@ namespace NKikimr::NBsController { void ConfigureBlobDepot() { TGroupInfo *group = GetGroup(); - STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG14, "ConfigureBlobDepot", (GroupId, group->ID)); + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG14, "ConfigureBlobDepot", (GroupId.GetRawId(), group->ID.GetRawId())); auto& config = GetConfig(group); Y_ABORT_UNLESS(config.HasTabletId()); Y_ABORT_UNLESS(!group->BlobDepotId || group->BlobDepotId == config.GetTabletId()); @@ -716,7 +716,7 @@ namespace NKikimr::NBsController { void DeleteBlobDepot() { auto *group = GetGroup(); - STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG15, "DeleteBlobDepot", (GroupId, group->ID)); + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG15, "DeleteBlobDepot", (GroupId.GetRawId(), group->ID.GetRawId())); Self->Execute(std::make_unique(this, [](TGroupInfo& group, TConfigState&) { if (group.VDisksInGroup) { group.VirtualGroupName = {}; @@ -734,7 +734,7 @@ namespace NKikimr::NBsController { } void OnBlobDepotDeleted() { - STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG18, "OnBlobDepotDeleted", (GroupId, GroupId)); + STLOG(PRI_DEBUG, BS_CONTROLLER, BSCVG18, "OnBlobDepotDeleted", (GroupId.GetRawId(), GroupId.GetRawId())); Self->Execute(std::make_unique(this)); } @@ -763,7 +763,7 @@ namespace NKikimr::NBsController { node.WaitingForGroups.erase(group->ID); auto ev = std::make_unique(NKikimrProto::OK, nodeId); TSet groups; - groups.insert(group->ID); + groups.insert(group->ID.GetRawId()); Self->ReadGroups(groups, false, ev.get(), nodeId); Send(MakeBlobStorageNodeWardenID(nodeId), ev.release()); } @@ -874,9 +874,9 @@ namespace NKikimr::NBsController { group->VirtualGroupSetupMachineId = RegisterWithSameMailbox(new TVirtualGroupSetupMachine(this, *group)); } - void TBlobStorageController::StartVirtualGroupDeleteMachine(ui32 groupId, TBlobDepotDeleteQueueInfo& info) { + void TBlobStorageController::StartVirtualGroupDeleteMachine(TGroupId groupId, TBlobDepotDeleteQueueInfo& info) { Y_ABORT_UNLESS(!info.VirtualGroupSetupMachineId); - info.VirtualGroupSetupMachineId = RegisterWithSameMailbox(new TVirtualGroupSetupMachine(this, groupId, info)); + info.VirtualGroupSetupMachineId = RegisterWithSameMailbox(new TVirtualGroupSetupMachine(this, groupId.GetRawId(), info)); } void TBlobStorageController::Handle(TEvBlobStorage::TEvControllerGroupDecommittedNotify::TPtr ev) { diff --git a/ydb/core/tablet/tablet_req_rebuildhistory.cpp b/ydb/core/tablet/tablet_req_rebuildhistory.cpp index cbd843c8ed8e..dab15a83cfdf 100644 --- a/ydb/core/tablet/tablet_req_rebuildhistory.cpp +++ b/ydb/core/tablet/tablet_req_rebuildhistory.cpp @@ -465,8 +465,8 @@ class TTabletReqRebuildHistoryGraph : public TActorBootstrapped::iterator it = msg->Responses.begin(), end = msg->Responses.end(); it != end; ++it) { const TLogoBlobID &id = it->Id; - GroupReadBytes[std::make_pair(id.Channel(), msg->GroupId)] += it->Buffer.size(); - GroupReadOps[std::make_pair(id.Channel(), msg->GroupId)] += 1; + GroupReadBytes[std::make_pair(id.Channel(), msg->GroupId.GetRawId())] += it->Buffer.size(); + GroupReadOps[std::make_pair(id.Channel(), msg->GroupId.GetRawId())] += 1; NKikimrTabletBase::TTabletLogEntry logEntry; if (!logEntry.ParseFromString(it->Buffer)) { diff --git a/ydb/core/tablet_flat/flat_cxx_database.h b/ydb/core/tablet_flat/flat_cxx_database.h index 4546b71175ec..f22541e95911 100644 --- a/ydb/core/tablet_flat/flat_cxx_database.h +++ b/ydb/core/tablet_flat/flat_cxx_database.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -361,6 +362,22 @@ struct TConvertValue { }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// TIdWrapper conversion + +template +struct TConvertValue> { + typename NSchemeTypeMapper::Type Storage; + TTypeValue Value; + TConvertValue(const TIdWrapper & value) : Storage(value.GetRawId()), Value(Storage, TColumnType::ColumnType) {} + operator const TRawTypeValue&() const { return Value; } +}; + +template +struct TConvertValue, TRawTypeValue> { + TTypeValue Value; + TConvertValue(const TRawTypeValue & value) : Value(value) {} + operator TIdWrapper() const { return TIdWrapper::FromValue(static_cast(Value)); } +}; template struct TConvertValue {