@@ -919,7 +919,10 @@ void process_compaction_job(MetaServiceCode& code, std::string& msg, std::string
919
919
txn->put (job_key, job_val);
920
920
INSTANCE_LOG (INFO) << " remove compaction job tabelt_id=" << tablet_id
921
921
<< " key=" << hex (job_key);
922
-
922
+ response->set_alter_version (recorded_job.has_schema_change () &&
923
+ recorded_job.schema_change ().has_alter_version ()
924
+ ? recorded_job.schema_change ().alter_version ()
925
+ : -1 );
923
926
need_commit = true ;
924
927
}
925
928
@@ -1007,9 +1010,8 @@ void process_schema_change_job(MetaServiceCode& code, std::string& msg, std::str
1007
1010
}
1008
1011
1009
1012
// MUST check initiator to let the retried BE commit this schema_change job.
1010
- if (request->action () == FinishTabletJobRequest::COMMIT &&
1011
- (schema_change.id () != recorded_schema_change.id () ||
1012
- schema_change.initiator () != recorded_schema_change.initiator ())) {
1013
+ if (schema_change.id () != recorded_schema_change.id () ||
1014
+ schema_change.initiator () != recorded_schema_change.initiator ()) {
1013
1015
SS << " unmatched job id or initiator, recorded_id=" << recorded_schema_change.id ()
1014
1016
<< " given_id=" << schema_change.id ()
1015
1017
<< " recorded_job=" << proto_to_json (recorded_schema_change)
@@ -1031,21 +1033,22 @@ void process_schema_change_job(MetaServiceCode& code, std::string& msg, std::str
1031
1033
{instance_id, new_table_id, new_index_id, new_partition_id, new_tablet_id});
1032
1034
1033
1035
std::string new_tablet_job_val;
1036
+ TabletJobInfoPB new_recorded_job;
1034
1037
err = txn->get (new_tablet_job_key, &new_tablet_job_val);
1035
- if (err != TxnErrorCode::TXN_OK) {
1036
- SS << (err == TxnErrorCode::TXN_KEY_NOT_FOUND ? " job not found, " : " internal error," )
1038
+ if (err != TxnErrorCode::TXN_OK && err != TxnErrorCode::TXN_KEY_NOT_FOUND ) {
1039
+ SS << " internal error,"
1037
1040
<< " instance_id=" << instance_id << " tablet_id=" << new_tablet_id
1038
1041
<< " job=" << proto_to_json (request->job ()) << " err=" << err;
1039
1042
msg = ss.str ();
1040
1043
code = err == TxnErrorCode::TXN_KEY_NOT_FOUND ? MetaServiceCode::INVALID_ARGUMENT
1041
1044
: cast_as<ErrCategory::READ>(err);
1042
1045
return ;
1043
- }
1044
- TabletJobInfoPB new_recorded_job;
1045
- if (!new_recorded_job. ParseFromString (new_tablet_job_val)) {
1046
- code = MetaServiceCode::PROTOBUF_PARSE_ERR ;
1047
- msg = " malformed new tablet recorded job " ;
1048
- return ;
1046
+ } else if (err == TxnErrorCode::TXN_OK) {
1047
+ if (! new_recorded_job. ParseFromString (new_tablet_job_val)) {
1048
+ code = MetaServiceCode::PROTOBUF_PARSE_ERR;
1049
+ msg = " malformed new tablet recorded job " ;
1050
+ return ;
1051
+ }
1049
1052
}
1050
1053
1051
1054
// ==========================================================================
@@ -1058,11 +1061,13 @@ void process_schema_change_job(MetaServiceCode& code, std::string& msg, std::str
1058
1061
recorded_schema_change.new_tablet_idx ().tablet_id ()) {
1059
1062
// remove schema change
1060
1063
recorded_job.clear_schema_change ();
1061
- new_recorded_job.clear_schema_change ();
1062
1064
auto job_val = recorded_job.SerializeAsString ();
1063
- new_tablet_job_val = new_recorded_job.SerializeAsString ();
1064
1065
txn->put (job_key, job_val);
1065
- txn->put (new_tablet_job_key, new_tablet_job_val);
1066
+ if (!new_tablet_job_val.empty ()) {
1067
+ new_recorded_job.clear_schema_change ();
1068
+ new_tablet_job_val = new_recorded_job.SerializeAsString ();
1069
+ txn->put (new_tablet_job_key, new_tablet_job_val);
1070
+ }
1066
1071
INSTANCE_LOG (INFO) << " remove schema_change job tablet_id=" << tablet_id
1067
1072
<< " key=" << hex (job_key);
1068
1073
@@ -1226,11 +1231,13 @@ void process_schema_change_job(MetaServiceCode& code, std::string& msg, std::str
1226
1231
// remove schema_change job
1227
1232
// ==========================================================================
1228
1233
recorded_job.clear_schema_change ();
1229
- new_recorded_job.clear_schema_change ();
1230
1234
auto job_val = recorded_job.SerializeAsString ();
1231
1235
txn->put (job_key, job_val);
1232
- new_tablet_job_val = new_recorded_job.SerializeAsString ();
1233
- txn->put (new_tablet_job_key, new_tablet_job_val);
1236
+ if (!new_tablet_job_val.empty ()) {
1237
+ new_recorded_job.clear_schema_change ();
1238
+ new_tablet_job_val = new_recorded_job.SerializeAsString ();
1239
+ txn->put (new_tablet_job_key, new_tablet_job_val);
1240
+ }
1234
1241
INSTANCE_LOG (INFO) << " remove schema_change job tablet_id=" << tablet_id
1235
1242
<< " key=" << hex (job_key);
1236
1243
0 commit comments