MCPcopy Create free account
hub / github.com/LadybugDB/ladybug / collectDiskSizeInfo

Function collectDiskSizeInfo

src/function/table/disk_size_info.cpp:138–259  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

136}
137
138static std::vector<DiskSizeEntry> collectDiskSizeInfo(const ClientContext* context) {
139 std::vector<DiskSizeEntry> entries;
140 std::unordered_map<std::string, idx_t> entryLookup;
141 auto storageManager = StorageManager::Get(*context);
142 auto catalog = Catalog::Get(*context);
143 auto dataFH = storageManager->getDataFH();
144
145 // Handle in-memory databases
146 if (storageManager->isInMemory()) {
147 entries.push_back({"info", "in_memory_database", 0, 0});
148 return entries;
149 }
150
151 auto pageManager = dataFH->getPageManager();
152
153 // 1. Database header (always 1 page at index 0)
154 entries.push_back({"header", "database_header", 1, LBUG_PAGE_SIZE});
155
156 // 2. Get catalog and metadata page ranges from database header
157 auto databaseHeader = DatabaseHeader::readDatabaseHeader(*dataFH->getFileInfo());
158 if (databaseHeader.has_value()) {
159 entries.push_back({"catalog", "catalog", databaseHeader->catalogPageRange.numPages,
160 databaseHeader->catalogPageRange.numPages * LBUG_PAGE_SIZE});
161
162 entries.push_back({"metadata", "metadata", databaseHeader->metadataPageRange.numPages,
163 databaseHeader->metadataPageRange.numPages * LBUG_PAGE_SIZE});
164 }
165
166 // 3. Count table data pages
167 auto nodeTableEntries =
168 catalog->getNodeTableEntries(&transaction::DUMMY_CHECKPOINT_TRANSACTION);
169 auto relGroupEntries = catalog->getRelGroupEntries(&transaction::DUMMY_CHECKPOINT_TRANSACTION);
170
171 for (const auto tableEntry : nodeTableEntries) {
172 auto& nodeTable = storageManager->getTable(tableEntry->getTableID())->cast<NodeTable>();
173 uint64_t tablePages = 0;
174 auto numNodeGroups = nodeTable.getNumNodeGroups();
175 for (auto i = 0ul; i < numNodeGroups; i++) {
176 tablePages += countNodeGroupPages(nodeTable.getNodeGroup(i));
177 }
178 entries.push_back(
179 {"node_table", tableEntry->getName(), tablePages, tablePages * LBUG_PAGE_SIZE});
180
181 for (const auto& indexHolder : nodeTable.getIndexes()) {
182 if (!indexHolder.isLoaded()) {
183 continue;
184 }
185 const auto* index = indexHolder.getIndex();
186 const auto indexInfo = index->getIndexInfo();
187 for (const auto& storageEntry : index->getStorageEntries()) {
188 if (storageEntry.pageRange.startPageIdx == INVALID_PAGE_IDX ||
189 storageEntry.pageRange.numPages == 0) {
190 continue;
191 }
192 appendOrIncrementEntry(entries, entryLookup, "index",
193 tableEntry->getName() + "." + indexInfo.name + ":" + storageEntry.component,
194 storageEntry.pageRange.numPages);
195 }

Callers 2

internalTableFuncFunction · 0.85
bindFuncFunction · 0.85

Calls 15

countNodeGroupPagesFunction · 0.85
appendOrIncrementEntryFunction · 0.85
isInMemoryMethod · 0.80
getPageManagerMethod · 0.80
getNodeTableEntriesMethod · 0.80
getRelGroupEntriesMethod · 0.80
isLoadedMethod · 0.80
getStorageDirectionsMethod · 0.80
getDirectedTableDataMethod · 0.80
getTableCatalogEntryMethod · 0.80
getFreeEntriesMethod · 0.80
getNumFreeEntriesMethod · 0.80

Tested by

no test coverage detected