| 4751 | } |
| 4752 | |
| 4753 | void TabletImpl::LoadIndexData( |
| 4754 | RpcController* controller, |
| 4755 | const ::fedb::api::LoadIndexDataRequest* request, |
| 4756 | ::fedb::api::GeneralResponse* response, Closure* done) { |
| 4757 | brpc::ClosureGuard done_guard(done); |
| 4758 | std::shared_ptr<::fedb::api::TaskInfo> task_ptr; |
| 4759 | if (request->has_task_info() && request->task_info().IsInitialized()) { |
| 4760 | if (AddOPTask(request->task_info(), |
| 4761 | ::fedb::api::TaskType::kLoadIndexData, task_ptr) < 0) { |
| 4762 | response->set_code(-1); |
| 4763 | response->set_msg("add task failed"); |
| 4764 | return; |
| 4765 | } |
| 4766 | } |
| 4767 | do { |
| 4768 | uint32_t tid = request->tid(); |
| 4769 | uint32_t pid = request->pid(); |
| 4770 | auto table = GetTable(tid, pid); |
| 4771 | if (!table) { |
| 4772 | PDLOG(WARNING, "table is not exist. tid %u, pid %u", tid, pid); |
| 4773 | response->set_code(::fedb::base::ReturnCode::kTableIsNotExist); |
| 4774 | response->set_msg("table is not exist"); |
| 4775 | break; |
| 4776 | } |
| 4777 | if (table->GetTableStat() != ::fedb::storage::kNormal) { |
| 4778 | PDLOG(WARNING, |
| 4779 | "table state is %d, cannot load index data. tid %u, pid %u", |
| 4780 | table->GetTableStat(), tid, pid); |
| 4781 | response->set_code( |
| 4782 | ::fedb::base::ReturnCode::kTableStatusIsNotKnormal); |
| 4783 | response->set_msg("table status is not kNormal"); |
| 4784 | break; |
| 4785 | } |
| 4786 | response->set_code(::fedb::base::ReturnCode::kOk); |
| 4787 | response->set_msg("ok"); |
| 4788 | if (request->partition_num() <= 1) { |
| 4789 | PDLOG(INFO, "partition num is %d need not load. tid %u, pid %u", |
| 4790 | request->partition_num(), tid, pid); |
| 4791 | SetTaskStatus(task_ptr, ::fedb::api::TaskStatus::kDone); |
| 4792 | } else { |
| 4793 | uint64_t cur_time = ::baidu::common::timer::get_micros() / 1000; |
| 4794 | task_pool_.AddTask( |
| 4795 | boost::bind(&TabletImpl::LoadIndexDataInternal, this, tid, pid, |
| 4796 | 0, request->partition_num(), cur_time, task_ptr)); |
| 4797 | } |
| 4798 | return; |
| 4799 | } while (0); |
| 4800 | SetTaskStatus(task_ptr, ::fedb::api::TaskStatus::kFailed); |
| 4801 | } |
| 4802 | |
| 4803 | void TabletImpl::LoadIndexDataInternal( |
| 4804 | uint32_t tid, uint32_t pid, uint32_t cur_pid, uint32_t partition_num, |
nothing calls this directly
no test coverage detected