MCPcopy Create free account
hub / github.com/4paradigm/OpenMLDB / MakeSnapshot

Method MakeSnapshot

src/tablet/tablet_impl.cc:2457–2514  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2455}
2456
2457void TabletImpl::MakeSnapshot(RpcController* controller,
2458 const ::fedb::api::GeneralRequest* request,
2459 ::fedb::api::GeneralResponse* response,
2460 Closure* done) {
2461 brpc::ClosureGuard done_guard(done);
2462 std::shared_ptr<::fedb::api::TaskInfo> task_ptr;
2463 if (request->has_task_info() && request->task_info().IsInitialized()) {
2464 if (AddOPTask(request->task_info(),
2465 ::fedb::api::TaskType::kMakeSnapshot, task_ptr) < 0) {
2466 response->set_code(-1);
2467 response->set_msg("add task failed");
2468 return;
2469 }
2470 }
2471 uint32_t tid = request->tid();
2472 uint32_t pid = request->pid();
2473 uint64_t offset = 0;
2474 if (request->has_offset() && request->offset() > 0) {
2475 offset = request->offset();
2476 }
2477 do {
2478 {
2479 std::lock_guard<SpinMutex> spin_lock(spin_mutex_);
2480 std::shared_ptr<Snapshot> snapshot = GetSnapshotUnLock(tid, pid);
2481 if (!snapshot) {
2482 response->set_code(
2483 ::fedb::base::ReturnCode::kSnapshotIsNotExist);
2484 response->set_msg("snapshot is not exist");
2485 PDLOG(WARNING, "snapshot is not exist. tid[%u] pid[%u]", tid,
2486 pid);
2487 break;
2488 }
2489 std::shared_ptr<Table> table =
2490 GetTableUnLock(request->tid(), request->pid());
2491 if (!table) {
2492 PDLOG(WARNING, "table is not exist. tid %u, pid %u", tid, pid);
2493 response->set_code(::fedb::base::ReturnCode::kTableIsNotExist);
2494 response->set_msg("table is not exist");
2495 break;
2496 }
2497 if (table->GetTableStat() != ::fedb::storage::kNormal) {
2498 response->set_code(
2499 ::fedb::base::ReturnCode::kTableStatusIsNotKnormal);
2500 response->set_msg("table status is not kNormal");
2501 PDLOG(WARNING,
2502 "table state is %d, cannot make snapshot. %u, pid %u",
2503 table->GetTableStat(), tid, pid);
2504 break;
2505 }
2506 }
2507 snapshot_pool_.AddTask(boost::bind(&TabletImpl::MakeSnapshotInternal,
2508 this, tid, pid, offset, task_ptr));
2509 response->set_code(::fedb::base::ReturnCode::kOk);
2510 response->set_msg("ok");
2511 return;
2512 } while (0);
2513 SetTaskStatus(task_ptr, ::fedb::api::TaskStatus::kFailed);
2514}

Callers 2

TEST_FFunction · 0.45
MakeSnapshotInternalMethod · 0.45

Calls 2

GetTableStatMethod · 0.80
AddTaskMethod · 0.80

Tested by 1

TEST_FFunction · 0.36