diff --git a/internal/core/src/query/ExprImpl.h b/internal/core/src/query/ExprImpl.h index 50f9b8fbfd5c1b477e3c51494a46c35363270770..ca24c8ddabe79efbd99f6861f66cc8b66102df7c 100644 --- a/internal/core/src/query/ExprImpl.h +++ b/internal/core/src/query/ExprImpl.h @@ -13,11 +13,12 @@ #include "Expr.h" #include <tuple> #include <vector> +#include <boost/container/vector.hpp> namespace milvus::query { template <typename T> struct TermExprImpl : TermExpr { - std::vector<T> terms_; + boost::container::vector<T> terms_; }; template <typename T> diff --git a/internal/core/src/query/visitors/ShowExprVisitor.cpp b/internal/core/src/query/visitors/ShowExprVisitor.cpp index ac9b3915e482d11c8aee231ba17bbc39079ef846..79ae412c7a140c1041d0ad3b727b8f4dfc746a95 100644 --- a/internal/core/src/query/visitors/ShowExprVisitor.cpp +++ b/internal/core/src/query/visitors/ShowExprVisitor.cpp @@ -115,6 +115,8 @@ ShowExprVisitor::visit(TermExpr& expr) { Assert(field_is_vector(expr.data_type_) == false); auto terms = [&] { switch (expr.data_type_) { + case DataType::BOOL: + return TermExtract<bool>(expr); case DataType::INT8: return TermExtract<int8_t>(expr); case DataType::INT16: diff --git a/internal/core/src/segcore/ConcurrentVector.h b/internal/core/src/segcore/ConcurrentVector.h index 9f475aff1e897bef262b0bb3b0c8e7e69a84b40f..1293bb843b76e8f2d1cd5920678775740467dfb2 100644 --- a/internal/core/src/segcore/ConcurrentVector.h +++ b/internal/core/src/segcore/ConcurrentVector.h @@ -25,33 +25,6 @@ namespace milvus::segcore { -// we don't use std::array because capacity of concurrent_vector wastes too much memory -// template <typename Type> -// class FixedVector : public std::vector<Type> { -// public: -// // This is a stupid workaround for tbb API to avoid memory copy -// explicit FixedVector(int64_t size) : placeholder_size_(size) { -// } -// FixedVector(const FixedVector<Type>& placeholder_vec) -// : std::vector<Type>(placeholder_vec.placeholder_size_), is_placeholder_(false) { -// // Assert(placeholder_vec.is_placeholder_); -// } -// FixedVector(FixedVector<Type>&&) = delete; -// -// FixedVector& -// operator=(FixedVector<Type>&&) = delete; -// -// FixedVector& -// operator=(const FixedVector<Type>&) = delete; -// -// bool is_placeholder() { -// return is_placeholder_; -// } -// private: -// bool is_placeholder_ = true; -// int placeholder_size_ = 0; -//}; - template <typename Type> using FixedVector = boost::container::vector<Type>; diff --git a/internal/core/src/segcore/IndexingEntry.cpp b/internal/core/src/segcore/IndexingEntry.cpp index bc40622f7be4a19050a4a310096d4aefa21090c0..f6d0aeaf94069c4194232196e3c3d6b79fadbdd9 100644 --- a/internal/core/src/segcore/IndexingEntry.cpp +++ b/internal/core/src/segcore/IndexingEntry.cpp @@ -111,6 +111,8 @@ CreateIndex(const FieldMeta& field_meta, int64_t chunk_size) { } } switch (field_meta.get_data_type()) { + case DataType::BOOL: + return std::make_unique<ScalarIndexingEntry<bool>>(field_meta, chunk_size); case DataType::INT8: return std::make_unique<ScalarIndexingEntry<int8_t>>(field_meta, chunk_size); case DataType::INT16: diff --git a/internal/core/src/segcore/InsertRecord.cpp b/internal/core/src/segcore/InsertRecord.cpp index 6494d03271ebd01fcb6519c2579e89274b371daf..775ad569502886102af1f9bc3b831f7fe74ccd90 100644 --- a/internal/core/src/segcore/InsertRecord.cpp +++ b/internal/core/src/segcore/InsertRecord.cpp @@ -27,6 +27,10 @@ InsertRecord::InsertRecord(const Schema& schema, int64_t chunk_size) : uids_(1), } } switch (field.get_data_type()) { + case DataType::BOOL: { + entity_vec_.emplace_back(std::make_shared<ConcurrentVector<bool>>(chunk_size)); + break; + } case DataType::INT8: { entity_vec_.emplace_back(std::make_shared<ConcurrentVector<int8_t>>(chunk_size)); break; diff --git a/internal/kv/etcd/etcd_kv.go b/internal/kv/etcd/etcd_kv.go index 5e17a77d4e41cba2ea8e0695bdb08f6f2fa09c62..1345bd735b6681d2bbf2658bc0d651e108421162 100644 --- a/internal/kv/etcd/etcd_kv.go +++ b/internal/kv/etcd/etcd_kv.go @@ -68,18 +68,6 @@ func (kv *EtcdKV) Load(key string) (string, error) { return string(resp.Kvs[0].Value), nil } -func (kv *EtcdKV) GetCount(key string) (int64, error) { - key = path.Join(kv.rootPath, key) - ctx, cancel := context.WithTimeout(context.TODO(), RequestTimeout) - defer cancel() - resp, err := kv.client.Get(ctx, key) - if err != nil { - return -1, err - } - - return resp.Count, nil -} - func (kv *EtcdKV) MultiLoad(keys []string) ([]string, error) { ops := make([]clientv3.Op, 0, len(keys)) for _, keyLoad := range keys { diff --git a/internal/querynode/flow_graph_filter_dm_node.go b/internal/querynode/flow_graph_filter_dm_node.go index 08288285f82b27aa71593d8d23e1d128ee6e488d..ceddaeab0b95a1a1b1880def7689ee3278a20e3a 100644 --- a/internal/querynode/flow_graph_filter_dm_node.go +++ b/internal/querynode/flow_graph_filter_dm_node.go @@ -70,10 +70,10 @@ func (fdmNode *filterDmNode) filterInvalidInsertMessage(msg *msgstream.InsertMsg return msg } - // If the last record is drop type, all insert requests are invalid. - if !records[len(records)-1].createOrDrop { - return nil - } + // TODO: If the last record is drop type, all insert requests are invalid. + //if !records[len(records)-1].createOrDrop { + // return nil + //} // Filter insert requests before last record. if len(msg.RowIDs) != len(msg.Timestamps) || len(msg.RowIDs) != len(msg.RowData) { diff --git a/internal/writenode/client/client.go b/internal/writenode/client/client.go index a966ff8862e21d5c0d701d84eb5507be1881ef76..3b67c4a90b237b1022ac20053195457b5a9c5e2f 100644 --- a/internal/writenode/client/client.go +++ b/internal/writenode/client/client.go @@ -6,7 +6,6 @@ import ( "github.com/golang/protobuf/proto" "go.etcd.io/etcd/clientv3" - "github.com/zilliztech/milvus-distributed/internal/errors" "github.com/zilliztech/milvus-distributed/internal/kv" etcdkv "github.com/zilliztech/milvus-distributed/internal/kv/etcd" "github.com/zilliztech/milvus-distributed/internal/msgstream" @@ -80,21 +79,6 @@ func (c *Client) DescribeSegment(segmentID UniqueID) (*SegmentDescription, error } key := c.kvPrefix + strconv.FormatInt(segmentID, 10) - - etcdKV, ok := c.kvClient.(*etcdkv.EtcdKV) - if !ok { - return nil, errors.New("type assertion failed for etcd kv") - } - count, err := etcdKV.GetCount(key) - if err != nil { - return nil, err - } - - if count <= 0 { - ret.IsClosed = false - return ret, nil - } - value, err := c.kvClient.Load(key) if err != nil { return ret, err diff --git a/internal/writenode/flow_graph_filter_dm_node.go b/internal/writenode/flow_graph_filter_dm_node.go index 9bac1b46ecdf9146f5d0df5b2667f7c83873ad08..98e9ec0bc4cc5fb596c93a2725ef2bd521da911e 100644 --- a/internal/writenode/flow_graph_filter_dm_node.go +++ b/internal/writenode/flow_graph_filter_dm_node.go @@ -81,10 +81,10 @@ func (fdmNode *filterDmNode) filterInvalidInsertMessage(msg *msgstream.InsertMsg return msg } - // If the last record is drop type, all insert requests are invalid. - if !records[len(records)-1].createOrDrop { - return nil - } + // TODO: If the last record is drop type, all insert requests are invalid. + //if !records[len(records)-1].createOrDrop { + // return nil + //} // Filter insert requests before last record. if len(msg.RowIDs) != len(msg.Timestamps) || len(msg.RowIDs) != len(msg.RowData) {