Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Major compaction 1st edition #31804

Merged
merged 28 commits into from
Apr 8, 2024
Merged

Conversation

wayblink
Copy link
Contributor

@wayblink wayblink commented Apr 1, 2024

No description provided.

@sre-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: wayblink
To complete the pull request process, please assign czs007 after the PR has been reviewed.
You can assign the PR to them by writing /assign @czs007 in a comment when ready.

The full list of commands accepted by this bot can be found here.

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@sre-ci-robot sre-ci-robot added area/internal-api area/test sig/testing test/integration integration test size/XXL Denotes a PR that changes 1000+ lines. labels Apr 1, 2024
Copy link
Contributor

mergify bot commented Apr 1, 2024

⚠️ The sha of the head commit of this PR conflicts with #31660. Mergify cannot evaluate rules on this PR. ⚠️

@wayblink wayblink changed the title Major test Major compaction 1st edition Apr 1, 2024
@mergify mergify bot mentioned this pull request Apr 2, 2024
@@ -435,6 +435,22 @@ dataCoord:
maxParallelTaskNum: 10 # max parallel compaction task number
indexBasedCompaction: true

major:
Copy link
Contributor Author

@wayblink wayblink Apr 2, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

About the terminology here:we have major and L2:

I think L2 request user to understand the concept of segment type and relationships between different compaction types and segment types. Here compaction is actually L1 + L2 -> L2, and we will add L2 single compaction, L2 merge compaction in the future. So I think L2 may cause more confusion.

For major compaction, we will split one major compaction into multi sub compaction tasks to handle large dataset and handoff. It is a little weird to also call these subTask as major. We developers should notice that.

I prefer major than L2 for easier user understanding. And here is another proposal ——clusteringCompaction.
clustering is more accurate and echos the concept of clusteringKey.

Final compaction type will be like:
Level0DeleteCompaction
SingleCompaction: add support for L2
MinorCompaction: add support for L2
ClusteringCompaction(MajorCompaction): L1+L2 -> L2

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But since there is a L0 and L1 segment, does it make more sense to have L2 segment and thus L2 compaction?

Clustering compaction looks clearer for me, but definitely not major compaction.

Major compaction usaully means merge all segments/shards into one

Copy link
Contributor

mergify bot commented Apr 2, 2024

⚠️ The sha of the head commit of this PR conflicts with #31660. Mergify cannot evaluate rules on this PR. ⚠️

Signed-off-by: wayblink <[email protected]>
Signed-off-by: wayblink <[email protected]>
GetRemoteCentroidsObjectPrefix() const {
return rcm_->GetRootPath() + "/files" + std::string(ANALYZE_ROOT_PATH) +
"/" + std::to_string(index_meta_.build_id) + "/" +
std::to_string(index_meta_.index_version) + "/" +
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it's not a good idea to put index_version and buildID before collectionID.

much better to put collectionID at front so we get all collection info in one S3 subdir. Any thing block us from doing this?

throw SegcoreError(FileOpenFailed, err_msg.str());
}
auto fileName = GetFileName(file);
auto fileSize = local_chunk_manager->Size(file);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there is no need to do a exist then size.
Size should return error if file not exist.


auto parallel_degree = 16;

if (batch_remote_files.size() >= parallel_degree) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You don't really need to control parallel_degree here, Simply submit all task one by one and AddBatchCompactionResultFiles could handle that.

std::unordered_map<std::string, int64_t>& map) {
auto local_chunk_manager =
LocalChunkManagerSingleton::GetInstance().GetChunkManager();
auto& pool = ThreadPools::GetThreadPool(milvus::ThreadPoolPriority::HIGH);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think it's a good idea to read everything then write.
Why not simply use high priority pool to read the file out then write back to remote?

It's gonna to be easy to control memory (Fully based on thread pool worker numbers)

BTW, should you use milvus::ThreadPoolPriority::HIGH? or other threadpool? becasue I saw PutCompactionResultData use thread pool MIDDLE

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This could also trigger a deadlock here. If I'm correct it's always middle pool trigger task for HIGH priority thread pool but not vice versa.

namespace milvus::indexbuilder {

template <typename T>
KmeansMajorCompaction<T>::KmeansMajorCompaction(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should not be name as Major compaction.
This is indead KMeansAnalysis.

Compaction is happened on Milvus and has nothing to do with index

train_num = data_num;
}
auto train_size_new = train_num * dim * sizeof(T);
auto buf = Sample(data_files, offsets, train_size_new, data_size);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need a log for sample time

res.what()));
}
dataset.reset(); // release train data
auto centroids = reinterpret_cast<const T*>(res.value()->GetTensor());
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Move the rest of the function to another function

result_files_.emplace_back(centroid_stats_path);
WritePBFile(stats, centroid_stats_path);

auto compute_num_in_centroid = [&](const uint32_t* centroid_id_mapping,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

all the below should be another function

std::vector<std::string> data_files;
std::vector<uint64_t> offsets;
uint32_t dim = 0;
auto data_size = file_manager_->CacheCompactionRawDataToDisk(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

when did cached file cleaned?

We need to check everywhere about the cache file. It should be cleaned if the analysis cleaned or failed

it != insert_files.value().end();
it++) {
gather_segment_id.emplace_back(it->first);
gather_size += offsets[i];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is there a special reason this has to be grouped?

how large WritePBFile could be? I'm assuming we can write everything into one file.

If stats is less than 10GB, we can parallelly read all the files and concurrently write into a same stats , and finally writePBFile to psersistent

CompactionStagePath = `compaction_stage`

// AnalyzeStatsPath storage path const for analyze.
AnalyzeStatsPath = `filesanalyze_stats`
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not same as cpp has

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems there are many other places share this path.


func NewScalarFieldValue(dtype schemapb.DataType, data interface{}) ScalarFieldValue {
switch dtype {
case schemapb.DataType_Int8:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what happened to boolean?

}
ats.updateTaskState(taskID, taskInProgress)
case taskRetry:
if !ats.dropIndexTask(taskID, t.NodeID) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is differnece bewteen analysisTask and indexTask? can we simply use one scheduler?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think wise to use a new Concept Job. Index is a job, analysis is another job.
The scheduler works ob job but don't need to worry about what job it is.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

current implementation is a weird combination with index and analysis task

@@ -435,6 +435,22 @@ dataCoord:
maxParallelTaskNum: 10 # max parallel compaction task number
indexBasedCompaction: true

major:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

But since there is a L0 and L1 segment, does it make more sense to have L2 segment and thus L2 compaction?

Clustering compaction looks clearer for me, but definitely not major compaction.

Major compaction usaully means merge all segments/shards into one

@@ -516,6 +510,50 @@ func (c *compactionPlanHandler) handleMergeCompactionResult(plan *datapb.Compact
return nil
}

func (c *compactionPlanHandler) handleMajorCompactionResult(plan *datapb.CompactionPlan, result *datapb.CompactionPlanResult) error {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

what is the difference between handleMajorCompactionResult && handleMajorCompactionResult?

internal/datanode/io/binlog_io.go Outdated Show resolved Hide resolved
@@ -289,6 +289,18 @@ func (s *Server) GetMetrics(ctx context.Context, request *milvuspb.GetMetricsReq
return s.indexnode.GetMetrics(ctx, request)
}

func (s *Server) Analysis(ctx context.Context, request *indexpb.AnalysisRequest) (*commonpb.Status, error) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

use CreateJob and it should support both AnalysisRequest and IndexRequest, something like
message CreateJobRequestV2 {
AnalysisRequest
IndexRequest
}

"github.com/milvus-io/milvus/pkg/common"
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/util/distance"
"github.com/milvus-io/milvus/pkg/util/funcutil"
"github.com/milvus-io/milvus/pkg/util/merr"
"github.com/milvus-io/milvus/pkg/util/typeutil"
)

const defaultFilterRatio float64 = 0.5
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need monitering metrics about pruned ratio here.

@@ -152,6 +164,7 @@ func FilterSegmentsByVector(partitionStats *storage.PartitionStatsSnapshot,
}
// currently, we only support float vector and only one center one segment
if disErr != nil {
log.Error("calculate distance error", zap.Error(disErr))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Below this line

	switch searchReq.GetMetricType() {
	case distance.L2:
		sort.SliceStable(segmentsToSearch, func(i, j int) bool {
			return segmentsToSearch[i].distance < segmentsToSearch[j].distance
		})
	case distance.IP, distance.COSINE:
		sort.SliceStable(segmentsToSearch, func(i, j int) bool {
			return segmentsToSearch[i].distance > segmentsToSearch[j].distance
		})
	}

what if search request don't have metric type?

"github.com/milvus-io/milvus/pkg/common"
"github.com/milvus-io/milvus/pkg/log"
"github.com/milvus-io/milvus/pkg/util/distance"
"github.com/milvus-io/milvus/pkg/util/funcutil"
"github.com/milvus-io/milvus/pkg/util/merr"
"github.com/milvus-io/milvus/pkg/util/typeutil"
)

const defaultFilterRatio float64 = 0.5
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

filter ratio might not be good enough, we need a lookup table here.
If segment <= 16 , do not filtering
[17, 32], segment * 0.5
[33, 256], 16 + (segment - 32) * 0.2
[256, 1024], 60 + (segment - 256) * 0.05
[1024, more], 98 + (segment - 1024) * 0.01

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and we should make sure this is tunable

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need to test recall on multiple dataset as well

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ideally we expect segment size to be 100+

auto local_chunk_manager =
storage::LocalChunkManagerSingleton::GetInstance().GetChunkManager();
// train data fits in memory, read by sequence and generate centroids and id_mapping in one pass
if (train_size >= total_size) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggest moving the code that reads data into buffer to another method.

if constexpr (!std::is_same_v<T, float>) {
PanicInfo(
ErrorCode::UnexpectedError,
fmt::format("kmeans major compaction only supports float32 now"));
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

shall we add the current type to error message?

auto insert_files = milvus::index::GetValueFromConfig<
std::map<int64_t, std::vector<std::string>>>(config_, "insert_files");
AssertInfo(insert_files.has_value(),
"insert file paths is empty when major compaction");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clustering instead of all major compaction concepts on segcore layer.

std::string id_mapping_path =
output_path + std::to_string(gather_segment_id[j]);
result_files_.emplace_back(id_mapping_path);
WritePBFile(stats, id_mapping_path);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any guarantee to clean generated files when occurs some errors?

auto& config = analysis_info->config;
config["insert_files"] = analysis_info->insert_files;
config["segment_size"] = analysis_info->segment_size;
config["train_size"] = analysis_info->train_size;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add a log for each configuration of analysis

}

func (kc *Catalog) SaveAnalysisTask(ctx context.Context, task *model.AnalysisTask) error {
key := buildAnalysisTaskKey(task.TaskID)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggest adding d bid and collection id into the key which scan keys is easier in multiple db and collections scene

@xiaofan-luan
Copy link
Contributor

we can not assume we can use local disk for caching(Currently I thought It should be more like pure memory + remote storage mode).

All of the IOs need to be done through chunkManager. and We should carefully design the cleanup path

@@ -109,6 +111,37 @@ class IndexFactory {
throw std::invalid_argument(invalid_dtype_msg);
}
}

MajorCompactionBasePtr
CreateCompactionJob(DataType type,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. It is weird to create a clustering job in an index factory.
  2. This factory itself is a bad design legacy, which is an only a collection of function instead of object.
  3. For now we don't have to have a creator/factory for jobs, and we can simply make a function in an unnamed namespace in analysis_c.cpp

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is OK to create a new folder for Clustering Job

}

CStatus
AppendAnalysisFieldMetaInfo(CAnalysisInfo c_analysis_info,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just curios, why we need these bunch of appending API? Did we analyze the cost of CGo call? Some potential alternative solutions:

  1. Just pass the params through the CGO function call.
  2. If we need more flexibility, can Json help on this?

Comment on lines +38 to +41
auto& config = analysis_info->config;
config["insert_files"] = analysis_info->insert_files;
config["segment_size"] = analysis_info->segment_size;
config["train_size"] = analysis_info->train_size;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why we need to have an empty JSON in the c_analysis_info Object and fill it with other fields of this object?

@@ -64,6 +64,12 @@ class DiskFileManagerImpl : public FileManagerImpl {
std::string
GetLocalRawDataObjectPrefix();

std::string
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FileManager's API is from Knowhere, its target is helping Knowhere manipulate files stored in Milvus' storage. We should not add any API more than that

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like so many misusing here, including Tantivy's support

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For all Disk interactions of this clustering work, let's move it to a clustering io util file

@@ -435,6 +435,23 @@ dataCoord:
maxParallelTaskNum: 10 # max parallel compaction task number
indexBasedCompaction: true

clustering:
Copy link
Contributor

@czs007 czs007 Apr 8, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need to talk about the configuration

Comment on lines +37 to +41
Train() override;

BinarySet
Upload() override;

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why we need to separate these two parts?
Also Train & Upload are not suitable APIs for a Job, a Job can only do run.

Copy link
Member

@liliu-z liliu-z left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two many disk operations without error handling, destruction mixed with clustering job logic. Let's create a new disk util file to handle all these

err_msg << "Error: write local file '" << file_path << " failed, "
<< strerror(errno);
throw SegcoreError(FileWriteFailed, err_msg.str());
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to close the stream

@wayblink wayblink force-pushed the major-test branch 2 times, most recently from b1ce6ac to edc71bd Compare April 8, 2024 06:17
@czs007 czs007 merged commit 17bf3ab into milvus-io:major_compaction Apr 8, 2024
4 of 18 checks passed
wayblink added a commit to wayblink/milvus that referenced this pull request Apr 10, 2024
Signed-off-by: wayblink <[email protected]>
Signed-off-by: Cai Zhang <[email protected]>
Signed-off-by: chasingegg <[email protected]>
Co-authored-by: chasingegg <[email protected]>
wayblink added a commit to wayblink/milvus that referenced this pull request Apr 10, 2024
Signed-off-by: wayblink <[email protected]>
Signed-off-by: Cai Zhang <[email protected]>
Signed-off-by: chasingegg <[email protected]>
Co-authored-by: chasingegg <[email protected]>
czs007 pushed a commit that referenced this pull request Apr 10, 2024
Signed-off-by: wayblink <[email protected]>
Signed-off-by: Cai Zhang <[email protected]>
Signed-off-by: chasingegg <[email protected]>
Co-authored-by: chasingegg <[email protected]>
sunby pushed a commit to sunby/milvus that referenced this pull request Apr 22, 2024
Signed-off-by: chyezh <[email protected]>

Add metric for lru and fix lost delete data when enable lazy load  (milvus-io#31868)

Signed-off-by: chyezh <[email protected]>

feat: Support stream reduce v1 (milvus-io#31873)

related: milvus-io#31410

---------

Signed-off-by: MrPresent-Han <[email protected]>

Change do wait lru dev (milvus-io#31878)

Signed-off-by: sunby <[email protected]>

enhance: add config for disk cache (milvus-io#31881)

fix config not initialized (milvus-io#31890)

Signed-off-by: sunby <[email protected]>

fix error handle in search (milvus-io#31895)

Signed-off-by: sunby <[email protected]>

fix: thread safe vector (milvus-io#31898)

fix: insert record cannot reinsert (milvus-io#31900)

enhance: cancel concurrency restrict for stream reduce and add metrics (milvus-io#31892)

Signed-off-by: MrPresent-Han <[email protected]>

fix: bit set (milvus-io#31905)

fix bitset clear to reset (milvus-io#31908)

Signed-off-by: MrPresent-Han <[email protected]>

Fix 0404 lru dev (milvus-io#31914)

fix:
1. sealed_segment num_rows reset to std::null opt
2. sealed_segment lazy_load reset to true after evicting to avoid
shortcut

---------

Signed-off-by: MrPresent-Han <[email protected]>

fix possible block due to unpin fifo activating principle (milvus-io#31924)

Signed-off-by: MrPresent-Han <[email protected]>

Add lru reloader lru dev (milvus-io#31952)

Signed-off-by: sunby <[email protected]>

fix query limit (milvus-io#32060)

Signed-off-by: sunby <[email protected]>

fix: lru cache lost delete and wrong mem size (milvus-io#32072)

issue: milvus-io#30361

Signed-off-by: chyezh <[email protected]>

enhance: add more metrics for cache and search (milvus-io#31777) (milvus-io#32097)

issue: milvus-io#30931

Signed-off-by: chyezh <[email protected]>

fix:panic due to empty search result when stream reducing(milvus-io#32009) (milvus-io#32083)

related: milvus-io#32009

Signed-off-by: MrPresent-Han <[email protected]>

fix: sealed segment may not exist when throw (milvus-io#32098)

issue: milvus-io#30361

Signed-off-by: chyezh <[email protected]>

Major compaction 1st edition (milvus-io#31804) (milvus-io#32116)

Signed-off-by: wayblink <[email protected]>
Signed-off-by: Cai Zhang <[email protected]>
Signed-off-by: chasingegg <[email protected]>
Co-authored-by: chasingegg <[email protected]>

fix: inconsistent between state lock and load state (milvus-io#32171)

issue: milvus-io#30361

Signed-off-by: chyezh <[email protected]>

enhance: Throw error instead of crash when index cannot be built (milvus-io#31844)

issue: milvus-io#27589

---------

Signed-off-by: Cai Zhang <[email protected]>

(cherry picked from commit 1b76766)
Signed-off-by: jaime <[email protected]>

update knowhere to support clustering (milvus-io#32188)

Signed-off-by: chasingegg <[email protected]>

fix: segment release is not sync with cache (milvus-io#32212)

issue: milvus-io#32206

Signed-off-by: chyezh <[email protected]>

fix: incorrect pinCount resulting unexpected eviction(milvus-io#32136) (milvus-io#32238)

related: milvus-io#32136

Signed-off-by: MrPresent-Han <[email protected]>

fix: possible panic when stream reducing (milvus-io#32247)

related: milvus-io#32009

Signed-off-by: MrPresent-Han <[email protected]>

enhance: [lru-dev] add the related data size for the read apis (milvus-io#32274)

cherry-pick: milvus-io#31816

---------

Signed-off-by: SimFG <[email protected]>

add debug log (milvus-io#32303)

Signed-off-by: Cai Zhang <[email protected]>

Refine code for analyze task scheduler (milvus-io#32122)

Signed-off-by: Cai Zhang <[email protected]>

fix: memory leak on stream reduce (milvus-io#32345)

related: milvus-io#32304

Signed-off-by: MrPresent-Han <[email protected]>

feat: adding cache stats support (milvus-io#32344)

See milvus-io#32067

Signed-off-by: Ted Xu <[email protected]>

Fix bug for version (milvus-io#32363)

Signed-off-by: Cai Zhang <[email protected]>

fix: remove sub entity in load delta log, update entity num in segment itself (milvus-io#32350)

issue: milvus-io#30361

Signed-off-by: chyezh <[email protected]>

fix: clear data when loading failure (milvus-io#32370)

issue: milvus-io#30361

Signed-off-by: chyezh <[email protected]>

fix: stream reduce memory leak for failing to release stream reducer(milvus-io#32345) (milvus-io#32381)

related: milvus-io#32345

Signed-off-by: MrPresent-Han <[email protected]>

Keep InProgress state when getting task state is init (milvus-io#32394)

Signed-off-by: Cai Zhang <[email protected]>

add log for search failed (milvus-io#32367)

related: milvus-io#32136

Signed-off-by: MrPresent-Han <[email protected]>

enable asan by default (milvus-io#32423)

Signed-off-by: sunby <[email protected]>

Major compaction refactoring (milvus-io#32149)

Signed-off-by: wayblink <[email protected]>

Lru dev debug (milvus-io#32414)

Co-authored-by: wayblink <[email protected]>

fix: protect loadInfo with atomic, remove rlock at cache to avoid dead lock (milvus-io#32436)

issue: milvus-io#32435

Signed-off-by: chyezh <[email protected]>

fix: use Get but not GetBy of SegmentManager (milvus-io#32438)

issue: milvus-io#32435

Signed-off-by: chyezh <[email protected]>

fix: return growing segment when sealed (milvus-io#32460)

issue: milvus-io#32435

Signed-off-by: chyezh <[email protected]>

enhance: add request resource for lru loading process(milvus-io#32205) (milvus-io#32452)

related: milvus-io#32205

Signed-off-by: MrPresent-Han <[email protected]>

fix: unexpected deleted index files when lazy loading(milvus-io#32136) (milvus-io#32469)

related: milvus-io#32136

Signed-off-by: MrPresent-Han <[email protected]>

fix: reference count leak cause release blocked (milvus-io#32465)

issue: milvus-io#32379

Signed-off-by: chyezh <[email protected]>

Fix compaction fail (milvus-io#32473)

Signed-off-by: wayblink <[email protected]>
wayblink added a commit to wayblink/milvus that referenced this pull request May 9, 2024
Signed-off-by: wayblink <[email protected]>
Signed-off-by: Cai Zhang <[email protected]>
Signed-off-by: chasingegg <[email protected]>
Co-authored-by: chasingegg <[email protected]>
wayblink added a commit to wayblink/milvus that referenced this pull request May 9, 2024
Signed-off-by: wayblink <[email protected]>
Signed-off-by: Cai Zhang <[email protected]>
Signed-off-by: chasingegg <[email protected]>
Co-authored-by: chasingegg <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

7 participants