@@ -8229,6 +8229,69 @@ Y_UNIT_TEST_SUITE(THiveTest) {
82298229 }
82308230 }
82318231
8232+ Y_UNIT_TEST (TestReassignNonexistentTablet) {
8233+ TTestBasicRuntime runtime (1 , false );
8234+ Setup (runtime, true );
8235+
8236+ const ui64 hiveTablet = MakeDefaultHiveID ();
8237+ const ui64 testerTablet = MakeTabletID (false , 1 );
8238+ const TActorId hiveActor = CreateTestBootstrapper (runtime, CreateTestTabletInfo (hiveTablet, TTabletTypes::Hive), &CreateDefaultHive);
8239+ runtime.EnableScheduleForActor (hiveActor);
8240+ MakeSureTabletIsUp (runtime, hiveTablet, 0 );
8241+ TActorId sender = runtime.AllocateEdgeActor (0 );
8242+
8243+ {
8244+ TDispatchOptions options;
8245+ options.FinalEvents .emplace_back (TEvLocal::EvSyncTablets);
8246+ runtime.DispatchEvents (options);
8247+ }
8248+
8249+ THolder<TEvHive::TEvCreateTablet> createTablet = MakeHolder<TEvHive::TEvCreateTablet>(testerTablet, 1 , TTabletTypes::Dummy, BINDED_CHANNELS);
8250+ ui64 tablet = SendCreateTestTablet (runtime, hiveTablet, testerTablet, std::move (createTablet), 0 , true );
8251+
8252+ MakeSureTabletIsUp (runtime, tablet, 0 );
8253+
8254+ {
8255+ NActorsProto::TRemoteHttpInfo pb;
8256+ pb.SetMethod (HTTP_METHOD_POST);
8257+ pb.SetPath (" /app" );
8258+ auto * p1 = pb.AddQueryParams ();
8259+ p1->SetKey (" TabletID" );
8260+ p1->SetValue (TStringBuilder () << hiveTablet);
8261+ auto * p2 = pb.AddQueryParams ();
8262+ p2->SetKey (" page" );
8263+ p2->SetValue (" ReassignTablet" );
8264+ auto * p3 = pb.AddQueryParams ();
8265+ p3->SetKey (" tablet" );
8266+ p3->SetValue (" 52" );
8267+ runtime.SendToPipe (hiveTablet, sender, new NMon::TEvRemoteHttpInfo (std::move (pb)), 0 , GetPipeConfigWithRetries ());
8268+
8269+ TAutoPtr<IEventHandle> handle;
8270+ auto resp = runtime.GrabEdgeEventRethrow <NMon::TEvRemoteJsonInfoRes>(handle);
8271+ Ctest << " Hive response: " << resp->Json << Endl;
8272+ NJson::TJsonValue value;
8273+ ReadJsonTree (resp->Json , &value, false );
8274+ UNIT_ASSERT_VALUES_EQUAL (value[" total" ].GetIntegerSafe (), 0 );
8275+ }
8276+
8277+ // this must not block balancer
8278+
8279+ {
8280+ THolder<TEvHive::TEvTabletMetrics> metrics = MakeHolder<TEvHive::TEvTabletMetrics>();
8281+ NKikimrHive::TTabletMetrics* metric = metrics->Record .AddTabletMetrics ();
8282+ metric->SetTabletID (tablet);
8283+ metric->MutableResourceUsage ()->SetNetwork (9000 );
8284+
8285+ runtime.SendToPipe (hiveTablet, sender, metrics.Release ());
8286+ }
8287+
8288+ {
8289+ TDispatchOptions options;
8290+ options.FinalEvents .push_back (NHive::TEvPrivate::EvBalancerOut);
8291+ runtime.DispatchEvents (options);
8292+ }
8293+ }
8294+
82328295 Y_UNIT_TEST (TestTabletsStartingCounter) {
82338296 TTestBasicRuntime runtime (1 , false );
82348297 Setup (runtime, true );
0 commit comments