|
3 | 3 | #include <ydb/core/testlib/test_client.h>
|
4 | 4 | #include <ydb/public/lib/deprecated/kicli/kicli.h>
|
5 | 5 |
|
| 6 | +#include <ydb/core/mind/hive/hive_events.h> |
6 | 7 | #include <ydb/core/node_whiteboard/node_whiteboard.h>
|
7 | 8 | #include <ydb/core/blobstorage/base/blobstorage_events.h>
|
8 | 9 | #include <ydb/core/tx/schemeshard/schemeshard.h>
|
@@ -1837,5 +1838,109 @@ Y_UNIT_TEST_SUITE(THealthCheckTest) {
|
1837 | 1838 | Y_UNIT_TEST(ShardsNoLimit) {
|
1838 | 1839 | ShardsQuotaTest(105, 0, 0, Ydb::Monitoring::StatusFlag::GREEN);
|
1839 | 1840 | }
|
| 1841 | + |
| 1842 | + bool HasDeadTabletIssue(const Ydb::Monitoring::SelfCheckResult& result) { |
| 1843 | + for (const auto& issue_log : result.issue_log()) { |
| 1844 | + if (issue_log.level() == 4 && issue_log.type() == "TABLET") { |
| 1845 | + return true; |
| 1846 | + } |
| 1847 | + } |
| 1848 | + return false; |
| 1849 | + } |
| 1850 | + |
| 1851 | + Y_UNIT_TEST(TestTabletIsDead) { |
| 1852 | + TPortManager tp; |
| 1853 | + ui16 port = tp.GetPort(2134); |
| 1854 | + ui16 grpcPort = tp.GetPort(2135); |
| 1855 | + auto settings = TServerSettings(port) |
| 1856 | + .SetNodeCount(2) |
| 1857 | + .SetDynamicNodeCount(1) |
| 1858 | + .SetUseRealThreads(false) |
| 1859 | + .SetDomainName("Root"); |
| 1860 | + TServer server(settings); |
| 1861 | + server.EnableGRpc(grpcPort); |
| 1862 | + |
| 1863 | + TClient client(settings); |
| 1864 | + |
| 1865 | + TTestActorRuntime* runtime = server.GetRuntime(); |
| 1866 | + TActorId sender = runtime->AllocateEdgeActor(); |
| 1867 | + |
| 1868 | + server.SetupDynamicLocalService(2, "Root"); |
| 1869 | + server.StartPQTablets(1); |
| 1870 | + server.DestroyDynamicLocalService(2); |
| 1871 | + runtime->AdvanceCurrentTime(TDuration::Minutes(5)); |
| 1872 | + |
| 1873 | + TAutoPtr<IEventHandle> handle; |
| 1874 | + runtime->Send(new IEventHandle(NHealthCheck::MakeHealthCheckID(), sender, new NHealthCheck::TEvSelfCheckRequest(), 0)); |
| 1875 | + auto result = runtime->GrabEdgeEvent<NHealthCheck::TEvSelfCheckResult>(handle)->Result; |
| 1876 | + Cerr << result.ShortDebugString(); |
| 1877 | + |
| 1878 | + UNIT_ASSERT(HasDeadTabletIssue(result)); |
| 1879 | + } |
| 1880 | + |
| 1881 | + Y_UNIT_TEST(TestBootingTabletIsNotDead) { |
| 1882 | + TPortManager tp; |
| 1883 | + ui16 port = tp.GetPort(2134); |
| 1884 | + ui16 grpcPort = tp.GetPort(2135); |
| 1885 | + auto settings = TServerSettings(port) |
| 1886 | + .SetNodeCount(2) |
| 1887 | + .SetDynamicNodeCount(1) |
| 1888 | + .SetUseRealThreads(false) |
| 1889 | + .SetDomainName("Root"); |
| 1890 | + TServer server(settings); |
| 1891 | + server.EnableGRpc(grpcPort); |
| 1892 | + |
| 1893 | + TClient client(settings); |
| 1894 | + |
| 1895 | + TTestActorRuntime* runtime = server.GetRuntime(); |
| 1896 | + TActorId sender = runtime->AllocateEdgeActor(); |
| 1897 | + |
| 1898 | + auto blockBoot = runtime->AddObserver<NHive::TEvPrivate::TEvProcessBootQueue>([](auto&& ev) { ev.Reset(); }); |
| 1899 | + |
| 1900 | + server.SetupDynamicLocalService(2, "Root"); |
| 1901 | + server.StartPQTablets(1, false); |
| 1902 | + runtime->AdvanceCurrentTime(TDuration::Minutes(5)); |
| 1903 | + |
| 1904 | + TAutoPtr<IEventHandle> handle; |
| 1905 | + runtime->Send(new IEventHandle(NHealthCheck::MakeHealthCheckID(), sender, new NHealthCheck::TEvSelfCheckRequest(), 0)); |
| 1906 | + auto result = runtime->GrabEdgeEvent<NHealthCheck::TEvSelfCheckResult>(handle)->Result; |
| 1907 | + Cerr << result.ShortDebugString(); |
| 1908 | + |
| 1909 | + UNIT_ASSERT(!HasDeadTabletIssue(result)); |
| 1910 | + } |
| 1911 | + |
| 1912 | + Y_UNIT_TEST(TestReBootingTabletIsDead) { |
| 1913 | + TPortManager tp; |
| 1914 | + ui16 port = tp.GetPort(2134); |
| 1915 | + ui16 grpcPort = tp.GetPort(2135); |
| 1916 | + auto settings = TServerSettings(port) |
| 1917 | + .SetNodeCount(2) |
| 1918 | + .SetDynamicNodeCount(2) |
| 1919 | + .SetUseRealThreads(false) |
| 1920 | + .SetDomainName("Root"); |
| 1921 | + TServer server(settings); |
| 1922 | + server.EnableGRpc(grpcPort); |
| 1923 | + |
| 1924 | + TClient client(settings); |
| 1925 | + |
| 1926 | + TTestActorRuntime* runtime = server.GetRuntime(); |
| 1927 | + runtime->SetLogPriority(NKikimrServices::HIVE, NActors::NLog::PRI_TRACE); |
| 1928 | + TActorId sender = runtime->AllocateEdgeActor(); |
| 1929 | + |
| 1930 | + |
| 1931 | + server.SetupDynamicLocalService(2, "Root"); |
| 1932 | + server.StartPQTablets(1, true); |
| 1933 | + server.SetupDynamicLocalService(3, "Root"); |
| 1934 | + auto blockBoot = runtime->AddObserver<NHive::TEvPrivate::TEvProcessBootQueue>([](auto&& ev) { ev.Reset(); }); |
| 1935 | + server.DestroyDynamicLocalService(2); |
| 1936 | + runtime->AdvanceCurrentTime(TDuration::Minutes(5)); |
| 1937 | + |
| 1938 | + TAutoPtr<IEventHandle> handle; |
| 1939 | + runtime->Send(new IEventHandle(NHealthCheck::MakeHealthCheckID(), sender, new NHealthCheck::TEvSelfCheckRequest(), 0)); |
| 1940 | + auto result = runtime->GrabEdgeEvent<NHealthCheck::TEvSelfCheckResult>(handle)->Result; |
| 1941 | + Cerr << result.ShortDebugString(); |
| 1942 | + |
| 1943 | + UNIT_ASSERT(HasDeadTabletIssue(result)); |
| 1944 | + } |
1840 | 1945 | }
|
1841 | 1946 | }
|
0 commit comments