Commit a5f08416 authored by jinhai's avatar jinhai
Browse files

Merge branch 'branch-0.5.0' into 'branch-0.5.0'

MS-641 Segment fault(signal 11) in PickToLoad

See merge request megasearch/milvus!695

Former-commit-id: b6a21b5df8933fc119db0270bf5174838ad1ef28
parents c3509e9e 6f56ce96
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@ Please mark all change in change log and use the ticket from JIRA.
- MS-620 - Get table row counts display wrong error code
- MS-637 - out of memory when load too many tasks
- MS-640 - Cache object size calculate incorrect
- MS-641 - Segment fault(signal 11) in PickToLoad

## Improvement
- MS-552 - Add and change the easylogging library
+6 −3
Original line number Diff line number Diff line
@@ -158,8 +158,9 @@ TaskTableItem::Dump() {

std::vector<uint64_t>
TaskTable::PickToLoad(uint64_t limit) {
    std::lock_guard<std::mutex> lock(mutex_);
    size_t count = 0;
    for (int j = last_finish_ + 1; j < table_.size(); ++j) {
    for (uint64_t j = last_finish_ + 1; j < table_.size(); ++j) {
        if (not table_[j]) {
            SERVER_LOG_WARNING << "table[" << j << "] is nullptr";
        }
@@ -186,6 +187,7 @@ TaskTable::PickToLoad(uint64_t limit) {

std::vector<uint64_t>
TaskTable::PickToExecute(uint64_t limit) {
    std::lock_guard<std::mutex> lock(mutex_);
    std::vector<uint64_t> indexes;
    bool cross = false;
    for (uint64_t i = last_finish_ + 1, count = 0; i < table_.size() && count < limit; ++i) {
@@ -202,7 +204,7 @@ TaskTable::PickToExecute(uint64_t limit) {

void
TaskTable::Put(TaskPtr task) {
    std::lock_guard<std::mutex> lock(id_mutex_);
    std::lock_guard<std::mutex> lock(mutex_);
    auto item = std::make_shared<TaskTableItem>();
    item->id = id_++;
    item->task = std::move(task);
@@ -216,7 +218,7 @@ TaskTable::Put(TaskPtr task) {

void
TaskTable::Put(std::vector<TaskPtr>& tasks) {
    std::lock_guard<std::mutex> lock(id_mutex_);
    std::lock_guard<std::mutex> lock(mutex_);
    for (auto& task : tasks) {
        auto item = std::make_shared<TaskTableItem>();
        item->id = id_++;
@@ -232,6 +234,7 @@ TaskTable::Put(std::vector<TaskPtr>& tasks) {

TaskTableItemPtr
TaskTable::Get(uint64_t index) {
    std::lock_guard<std::mutex> lock(mutex_);
    return table_[index];
}

+1 −4
Original line number Diff line number Diff line
@@ -149,9 +149,6 @@ class TaskTable {
    }

 public:
    TaskTableItemPtr& operator[](uint64_t index) {
        return table_[index];
    }

    std::deque<TaskTableItemPtr>::iterator
    begin() {
@@ -244,7 +241,7 @@ class TaskTable {

 private:
    std::uint64_t id_ = 0;
    mutable std::mutex id_mutex_;
    mutable std::mutex mutex_;
    std::deque<TaskTableItemPtr> table_;
    std::function<void(void)> subscriber_ = nullptr;