MCPcopy Create free account
hub / github.com/alibaba/zvec / alloc_block

Method alloc_block

src/core/algorithm/flat/flat_streamer_entity.cc:812–854  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

810}
811
812int FlatStreamerEntity::alloc_block(const BlockLocation &next,
813 BlockLocation *block) {
814 if (segments_.size() <= 1 ||
815 segments_.back()->padding_size() < linear_block_size()) {
816 int ret = this->alloc_segment();
817 if (ailego_unlikely(ret != 0)) {
818 return ret;
819 }
820 }
821
822 auto &segment = segments_.back();
823 size_t block_index = segment->data_size() / linear_block_size();
824 if (block_index == kMaxBlockId) {
825 LOG_ERROR("Failed to alloc block, exceed max count %zu per segment",
826 kMaxBlockId);
827 return IndexError_IndexFull;
828 }
829
830 BlockHeader header;
831 header.next = next;
832 header.vector_count = 0;
833 header.column_major = false;
834
835 size_t hd_off = segment->data_size() + linear_block_size() - sizeof(header);
836 if (segment->write(hd_off, &header, sizeof(header)) != sizeof(header)) {
837 LOG_ERROR("Failed to write block header");
838 return IndexError_WriteData;
839 }
840
841 size_t del_off = hd_off - sizeof(DeletionMap);
842 DeletionMap reset_del_map{};
843 if (segment->write(del_off, &reset_del_map, sizeof(reset_del_map)) !=
844 sizeof(reset_del_map)) {
845 LOG_ERROR("Failed to write block deletion map");
846 return IndexError_WriteData;
847 }
848
849 ++meta_.header.block_count;
850 block->segment_id = segments_.size() - 1;
851 block->block_index = (segment->data_size() / linear_block_size()) - 1;
852
853 return 0;
854}
855
856int FlatStreamerEntity::add_to_block(const BlockLocation &block, uint64_t key,
857 const void *data, size_t size) {

Callers 2

addMethod · 0.95
add_vector_with_idMethod · 0.95

Calls 6

alloc_segmentMethod · 0.95
sizeMethod · 0.45
padding_sizeMethod · 0.45
backMethod · 0.45
data_sizeMethod · 0.45
writeMethod · 0.45

Tested by

no test coverage detected