@@ -726,6 +726,8 @@ static string_view StateToStr(MigrationState state) {
726726 return " ERROR" sv;
727727 case MigrationState::C_FINISHED:
728728 return " FINISHED" sv;
729+ case MigrationState::C_FATAL:
730+ return " FATAL" sv;
729731 }
730732 DCHECK (false ) << " Unknown State value " << static_cast <underlying_type_t <MigrationState>>(state);
731733 return " UNDEFINED_STATE" sv;
@@ -765,7 +767,6 @@ void ClusterFamily::DflySlotMigrationStatus(CmdArgList args, SinkReplyBuilder* b
765767 };
766768
767769 for (const auto & m : incoming_migrations_jobs_) {
768- // TODO add error status
769770 append_answer (" in" , m->GetSourceID (), node_id, m->GetState (), m->GetKeyCount (),
770771 m->GetErrorStr ());
771772 }
@@ -925,7 +926,7 @@ void ClusterFamily::InitMigration(CmdArgList args, SinkReplyBuilder* builder) {
925926
926927 if (!migration) {
927928 VLOG (1 ) << " Unrecognized incoming migration from " << source_id;
928- return builder->SendSimpleString (OutgoingMigration:: kUnknownMigration );
929+ return builder->SendSimpleString (kUnknownMigration );
929930 }
930931
931932 if (migration->GetState () != MigrationState::C_CONNECTING) {
@@ -936,6 +937,10 @@ void ClusterFamily::InitMigration(CmdArgList args, SinkReplyBuilder* builder) {
936937 DeleteSlots (slots);
937938 }
938939
940+ if (migration->GetState () == MigrationState::C_FATAL) {
941+ return builder->SendError (absl::StrCat (" -" , kIncomingMigrationOOM ));
942+ }
943+
939944 migration->Init (flows_num);
940945
941946 return builder->SendOk ();
@@ -955,6 +960,7 @@ void ClusterFamily::DflyMigrateFlow(CmdArgList args, SinkReplyBuilder* builder,
955960 cntx->conn ()->SetName (absl::StrCat (" migration_flow_" , source_id));
956961
957962 auto migration = GetIncomingMigration (source_id);
963+
958964 if (!migration) {
959965 return builder->SendError (kIdNotFound );
960966 }
@@ -1033,15 +1039,19 @@ void ClusterFamily::DflyMigrateAck(CmdArgList args, SinkReplyBuilder* builder) {
10331039 [source_id = source_id](const auto & m) { return m.node_info .id == source_id; });
10341040 if (m_it == in_migrations.end ()) {
10351041 LOG (WARNING) << " migration isn't in config" ;
1036- return builder->SendError (OutgoingMigration:: kUnknownMigration );
1042+ return builder->SendSimpleString ( kUnknownMigration );
10371043 }
10381044
10391045 auto migration = GetIncomingMigration (source_id);
10401046 if (!migration)
10411047 return builder->SendError (kIdNotFound );
10421048
10431049 if (!migration->Join (attempt)) {
1044- return builder->SendError (" Join timeout happened" );
1050+ if (migration->GetState () == MigrationState::C_FATAL) {
1051+ return builder->SendError (absl::StrCat (" -" , kIncomingMigrationOOM ));
1052+ } else {
1053+ return builder->SendError (" Join timeout happened" );
1054+ }
10451055 }
10461056
10471057 ApplyMigrationSlotRangeToConfig (migration->GetSourceID (), migration->GetSlots (), true );
0 commit comments