VectorSource.cpp 2.0 KB
Newer Older
Z
zhiru 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
#include "VectorSource.h"
#include "ExecutionEngine.h"
#include "EngineFactory.h"
#include "Log.h"

namespace zilliz {
namespace milvus {
namespace engine {


VectorSource::VectorSource(const size_t &n,
                           const float *vectors) :
                           n_(n),
                           vectors_(vectors),
                           id_generator_(new SimpleIDGenerator()) {
    current_num_vectors_added = 0;
}

Z
update  
zhiru 已提交
19 20 21 22
Status VectorSource::Add(const ExecutionEnginePtr& execution_engine,
                         const meta::TableFileSchema& table_file_schema,
                         const size_t& num_vectors_to_add,
                         size_t& num_vectors_added) {
Z
zhiru 已提交
23 24 25 26 27 28 29 30 31 32 33

    if (table_file_schema.dimension_ <= 0) {
        std::string errMsg = "VectorSource::Add: table_file_schema dimension = " +
                             std::to_string(table_file_schema.dimension_) + ", table_id = " + table_file_schema.table_id_;
        ENGINE_LOG_ERROR << errMsg;
        return Status::Error(errMsg);
    }

    num_vectors_added = current_num_vectors_added + num_vectors_to_add <= n_ ? num_vectors_to_add : n_ - current_num_vectors_added;
    IDNumbers vector_ids_to_add;
    id_generator_->GetNextIDNumbers(num_vectors_added, vector_ids_to_add);
Z
update  
zhiru 已提交
34
    Status status = execution_engine->AddWithIds(num_vectors_added, vectors_ + current_num_vectors_added, vector_ids_to_add.data());
Z
zhiru 已提交
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
    if (status.ok()) {
        current_num_vectors_added += num_vectors_added;
        vector_ids_.insert(vector_ids_.end(), vector_ids_to_add.begin(), vector_ids_to_add.end());
    }
    else {
        ENGINE_LOG_ERROR << "VectorSource::Add failed: " + status.ToString();
    }

    return status;
}

size_t VectorSource::GetNumVectorsAdded() {
    return current_num_vectors_added;
}

bool VectorSource::AllAdded() {
    return (current_num_vectors_added == n_);
}

IDNumbers VectorSource::GetVectorIds() {
    return vector_ids_;
}

} // namespace engine
} // namespace milvus
} // namespace zilliz