@@ -797,27 +797,27 @@ void MasterImpl::DeleteTable(const DeleteTableRequest* request,
797
797
done->Run ();
798
798
return ;
799
799
}
800
- response->set_status (kMasterOk );
801
- done->Run ();
802
800
803
- WriteClosure* closure =
804
- NewClosure (this , &MasterImpl::DeleteTableRecordCallback, table,
805
- FLAGS_tera_master_impl_retry_times);
806
- BatchWriteMetaTableAsync (boost::bind (&Table::ToMetaTableKeyValue, table, _1, _2),
807
- true , closure);
801
+ std::vector<TabletPtr> tablets;
802
+ table->GetTablet (&tablets);
808
803
809
- std::vector<TabletPtr> tablet_meta_list;
810
- table-> GetTablet (&tablet_meta_list);
811
- for ( uint32_t i = 0 ; i < tablet_meta_list. size (); ++i) {
812
- TabletPtr tablet = tablet_meta_list[i];
813
- if (tablet-> SetStatusIf ( kTabletDeleting , kTabletDisable )) {
814
- WriteClosure* closure =
815
- NewClosure ( this , &MasterImpl::DeleteTabletRecordCallback, tablet,
816
- FLAGS_tera_master_impl_retry_times );
817
- BatchWriteMetaTableAsync ( boost::bind (&Tablet::ToMetaTableKeyValue, tablet, _1, _2),
818
- true , closure) ;
804
+ // check if all tablet disable
805
+ for ( uint32_t i = 0 ; i < tablets. size (); ++i) {
806
+ TabletPtr tablet = tablets[i];
807
+ if ( tablet-> GetStatus () != kTabletDisable ) {
808
+ CHECK (table-> SetStatus (old_status));
809
+ LOG (ERROR) << " fail to delete table: " << request-> table_name ()
810
+ << " , tablet status: " << StatusCodeToString ( tablet-> GetStatus ());
811
+ response-> set_status ( kTabletReady );
812
+ done-> Run ();
813
+ return ;
819
814
}
820
815
}
816
+
817
+ WriteClosure* closure =
818
+ NewClosure (this , &MasterImpl::DeleteTableCallback, table, tablets,
819
+ FLAGS_tera_master_impl_retry_times, response, done);
820
+ BatchWriteMetaTableAsync (table, tablets, true , closure);
821
821
}
822
822
823
823
void MasterImpl::DisableTable (const DisableTableRequest* request,
@@ -1237,7 +1237,7 @@ void MasterImpl::OperateUser(const OperateUserRequest* request,
1237
1237
}
1238
1238
/*
1239
1239
* for (change password), (add user to group), (delete user from group),
1240
- * we get the original UserInfo(including token & group),
1240
+ * we get the original UserInfo(including token & group),
1241
1241
* do some modification according to the RPC request on the original UserInfo,
1242
1242
* and rewrite it to meta table.
1243
1243
*/
@@ -1270,7 +1270,7 @@ void MasterImpl::OperateUser(const OperateUserRequest* request,
1270
1270
}
1271
1271
} else if (op_type == kAddToGroup ) {
1272
1272
if (!operated_user.has_user_name () || operated_user.group_name_size () != 1
1273
- || !m_user_manager->IsValidForAddToGroup (token, user_name,
1273
+ || !m_user_manager->IsValidForAddToGroup (token, user_name,
1274
1274
operated_user.group_name (0 ))) {
1275
1275
is_invalid = true ;
1276
1276
} else {
@@ -2817,6 +2817,7 @@ void MasterImpl::GetSnapshot(const GetSnapshotRequest* request,
2817
2817
task->finish_num = 0 ;
2818
2818
task->aborted = false ;
2819
2819
MutexLock lock (&task->mutex );
2820
+ int64_t snapshot_id = get_micros ();
2820
2821
for (uint32_t i = 0 ; i < task->tablets .size (); ++i) {
2821
2822
TabletPtr tablet = task->tablets [i];
2822
2823
if (!tablet->SetStatusIf (kTabletOnSnapshot , kTableReady )) {
@@ -2829,7 +2830,7 @@ void MasterImpl::GetSnapshot(const GetSnapshotRequest* request,
2829
2830
++task->task_num ;
2830
2831
SnapshotClosure* closure =
2831
2832
NewClosure (this , &MasterImpl::GetSnapshotCallback, static_cast <int32_t >(i), task);
2832
- GetSnapshotAsync (tablet, 3000 , closure);
2833
+ GetSnapshotAsync (tablet, snapshot_id, 3000 , closure);
2833
2834
}
2834
2835
if (task->task_num == 0 ) {
2835
2836
LOG (WARNING) << " fail to create snapshot: " << request->table_name ()
@@ -2840,7 +2841,7 @@ void MasterImpl::GetSnapshot(const GetSnapshotRequest* request,
2840
2841
}
2841
2842
}
2842
2843
2843
- void MasterImpl::GetSnapshotAsync (TabletPtr tablet, int32_t timeout,
2844
+ void MasterImpl::GetSnapshotAsync (TabletPtr tablet, int64_t snapshot_id, int32_t timeout,
2844
2845
SnapshotClosure* done) {
2845
2846
2846
2847
std::string addr = tablet->GetServerAddr ();
@@ -2850,7 +2851,7 @@ void MasterImpl::GetSnapshotAsync(TabletPtr tablet, int32_t timeout,
2850
2851
SnapshotResponse* response = new SnapshotResponse;
2851
2852
request->set_sequence_id (m_this_sequence_id.Inc ());
2852
2853
request->set_table_name (tablet->GetTableName ());
2853
- request->set_snapshot_id (get_micros () );
2854
+ request->set_snapshot_id (snapshot_id );
2854
2855
request->mutable_key_range ()->set_key_start (tablet->GetKeyStart ());
2855
2856
request->mutable_key_range ()->set_key_end (tablet->GetKeyEnd ());
2856
2857
@@ -4057,8 +4058,6 @@ void MasterImpl::MergeTabletWriteMetaCallback(TabletMeta new_meta,
4057
4058
}
4058
4059
4059
4060
TabletPtr tablet_c;
4060
- tablet_p1->SetStatus (kTableDeleted );
4061
- tablet_p2->SetStatus (kTableDeleted );
4062
4061
if (tablet_p1->GetKeyStart () == new_meta.key_range ().key_start ()) {
4063
4062
m_tablet_manager->DeleteTablet (tablet_p1->GetTableName (), tablet_p1->GetKeyStart ());
4064
4063
m_tablet_manager->AddTablet (new_meta, TableSchema (), &tablet_c);
@@ -4180,7 +4179,6 @@ void MasterImpl::AddMetaCallback(TablePtr table,
4180
4179
}
4181
4180
if (retry_times <= 0 ) {
4182
4181
for (size_t i = 0 ; i < tablets.size (); i++) {
4183
- tablets[i]->SetStatus (kTableDeleted );
4184
4182
m_tablet_manager->DeleteTablet (tablets[i]->GetTableName (),
4185
4183
tablets[i]->GetKeyStart ());
4186
4184
}
@@ -4478,10 +4476,14 @@ void MasterImpl::UpdateMetaForLoadCallback(TabletPtr tablet, int32_t retry_times
4478
4476
LoadTabletAsync (tablet, done);
4479
4477
}
4480
4478
4481
- void MasterImpl::DeleteTableRecordCallback (TablePtr table, int32_t retry_times,
4482
- WriteTabletRequest* request,
4483
- WriteTabletResponse* response,
4484
- bool failed, int error_code) {
4479
+ void MasterImpl::DeleteTableCallback (TablePtr table,
4480
+ std::vector<TabletPtr> tablets,
4481
+ int32_t retry_times,
4482
+ DeleteTableResponse* rpc_response,
4483
+ google::protobuf::Closure* rpc_done,
4484
+ WriteTabletRequest* request,
4485
+ WriteTabletResponse* response,
4486
+ bool failed, int error_code) {
4485
4487
StatusCode status = response->status ();
4486
4488
if (!failed && status == kTabletNodeOk ) {
4487
4489
// all the row status should be the same
@@ -4492,20 +4494,21 @@ void MasterImpl::DeleteTableRecordCallback(TablePtr table, int32_t retry_times,
4492
4494
delete response;
4493
4495
if (failed || status != kTabletNodeOk ) {
4494
4496
if (failed) {
4495
- LOG (ERROR) << " fail to delete meta table record : "
4497
+ LOG (ERROR) << " fail to delete table meta : "
4496
4498
<< sofa::pbrpc::RpcErrorCodeToString (error_code) << " , " << table;
4497
4499
} else {
4498
- LOG (ERROR) << " fail to delete meta table record : "
4500
+ LOG (ERROR) << " fail to delete table meta : "
4499
4501
<< StatusCodeToString (status) << " , " << table;
4500
4502
}
4501
4503
if (retry_times <= 0 ) {
4502
4504
LOG (ERROR) << kSms << " abort delete meta table record, " << table;
4505
+ rpc_response->set_status (kMetaTabletError );
4506
+ rpc_done->Run ();
4503
4507
} else {
4504
4508
WriteClosure* done =
4505
- NewClosure (this , &MasterImpl::DeleteTableRecordCallback,
4506
- table, retry_times - 1 );
4507
- SuspendMetaOperation (boost::bind (&Table::ToMetaTableKeyValue, table, _1, _2),
4508
- true , done);
4509
+ NewClosure (this , &MasterImpl::DeleteTableCallback, table, tablets,
4510
+ retry_times - 1 , rpc_response, rpc_done);
4511
+ SuspendMetaOperation (table, tablets, true , done);
4509
4512
}
4510
4513
return ;
4511
4514
}
@@ -4514,43 +4517,14 @@ void MasterImpl::DeleteTableRecordCallback(TablePtr table, int32_t retry_times,
4514
4517
MutexLock locker (&m_alias_mutex);
4515
4518
m_alias.erase (table_alias);
4516
4519
}
4517
- LOG (INFO) << " delete meta table record success, " << table;
4518
- }
4519
-
4520
- void MasterImpl::DeleteTabletRecordCallback (TabletPtr tablet, int32_t retry_times,
4521
- WriteTabletRequest* request,
4522
- WriteTabletResponse* response,
4523
- bool failed, int error_code) {
4524
- StatusCode status = response->status ();
4525
- if (!failed && status == kTabletNodeOk ) {
4526
- // all the row status should be the same
4527
- CHECK_GT (response->row_status_list_size (), 0 );
4528
- status = response->row_status_list (0 );
4529
- }
4530
- delete request;
4531
- delete response;
4532
- if (failed || status != kTabletNodeOk ) {
4533
- if (failed) {
4534
- LOG (ERROR) << " fail to delete meta tablet record: "
4535
- << sofa::pbrpc::RpcErrorCodeToString (error_code) << " , " << tablet;
4536
- } else {
4537
- LOG (ERROR) << " fail to delete meta tablet record: "
4538
- << StatusCodeToString (status) << " , " << tablet;
4539
- }
4540
- if (retry_times <= 0 ) {
4541
- LOG (ERROR) << kSms << " abort delete meta tablet record, " << tablet;
4542
- } else {
4543
- WriteClosure* done =
4544
- NewClosure (this , &MasterImpl::DeleteTabletRecordCallback,
4545
- tablet, retry_times - 1 );
4546
- SuspendMetaOperation (boost::bind (&Tablet::ToMetaTableKeyValue, tablet, _1, _2),
4547
- true , done);
4548
- }
4549
- return ;
4520
+ // clean tablet manager
4521
+ for (uint32_t i = 0 ; i < tablets.size (); ++i) {
4522
+ TabletPtr tablet = tablets[i];
4523
+ m_tablet_manager->DeleteTablet (tablet->GetTableName (), tablet->GetKeyStart ());
4550
4524
}
4551
- LOG (INFO) << " delete meta tablet record success, " << tablet ;
4552
- tablet-> SetStatus ( kTableDeleted );
4553
- m_tablet_manager-> DeleteTablet (tablet-> GetTableName (), tablet-> GetKeyStart () );
4525
+ LOG (INFO) << " delete meta table record success, " << table ;
4526
+ rpc_response-> set_status ( kMasterOk );
4527
+ rpc_done-> Run ( );
4554
4528
}
4555
4529
4556
4530
void MasterImpl::ScanMetaTableAsync (const std::string& table_name,
@@ -4671,7 +4645,6 @@ void MasterImpl::ScanMetaCallbackForSplit(TabletPtr tablet,
4671
4645
m_tablet_manager->AddTablet (second_meta, TableSchema (), &second_tablet);
4672
4646
4673
4647
// delete old tablet
4674
- tablet->SetStatus (kTableDeleted );
4675
4648
m_tablet_manager->DeleteTablet (tablet->GetTableName (), tablet->GetKeyStart ());
4676
4649
4677
4650
// update first child tablet meta
@@ -4894,20 +4867,11 @@ void MasterImpl::ProcessOffLineTablet(TabletPtr tablet) {
4894
4867
if (!tablet->IsBound ()) {
4895
4868
return ;
4896
4869
}
4897
- tablet->SetStatusIf (kTabletDisable , kTableOffLine , kTableDisable )
4898
- || tablet->SetStatusIf (kTabletDisable , kTableOffLine , kTableDeleting );
4899
- if (tablet->SetStatusIf (kTabletDeleting , kTabletDisable , kTableDeleting )) {
4900
- WriteClosure* done =
4901
- NewClosure (this , &MasterImpl::DeleteTabletRecordCallback, tablet,
4902
- FLAGS_tera_master_meta_retry_times);
4903
- BatchWriteMetaTableAsync (boost::bind (&Tablet::ToMetaTableKeyValue, tablet, _1, _2),
4904
- true , done);
4905
- }
4870
+ tablet->SetStatusIf (kTabletDisable , kTableOffLine , kTableDisable );
4906
4871
}
4907
4872
4908
4873
void MasterImpl::ProcessReadyTablet (TabletPtr tablet) {
4909
- if (tablet->SetStatusIf (kTableUnLoading , kTableReady , kTableDisable )
4910
- || tablet->SetStatusIf (kTableUnLoading , kTableReady , kTableDeleting )) {
4874
+ if (tablet->SetStatusIf (kTableUnLoading , kTableReady , kTableDisable )) {
4911
4875
UnloadClosure* done =
4912
4876
NewClosure (this , &MasterImpl::UnloadTabletCallback, tablet,
4913
4877
FLAGS_tera_master_impl_retry_times);
0 commit comments