You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kudu.apache.org by ab...@apache.org on 2021/11/16 20:46:01 UTC
[kudu] 01/03: KUDU-1959 - Add test for /startup page for the Master
This is an automated email from the ASF dual-hosted git repository.
abukor pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kudu.git
commit cb69bb12eb07104c7d7c5333484534d997d65195
Author: Abhishek Chennaka <ac...@cloudera.com>
AuthorDate: Wed Oct 27 12:55:49 2021 -0400
KUDU-1959 - Add test for /startup page for the Master
This patch contains a test for the Kudu Master Startup Webpage.
We start up a mini master and validate the status of each startup step.
We also fix the startup timers for the mini master.
Change-Id: I823a59df215cfeb579f1593a63ef6133de37271c
Reviewed-on: http://gerrit.cloudera.org:8080/17989
Reviewed-by: Attila Bukor <ab...@apache.org>
Tested-by: Attila Bukor <ab...@apache.org>
---
src/kudu/master/master-test.cc | 45 ++++++++++++++++++++++++++++++++++++++++++
src/kudu/master/master.cc | 6 ++----
2 files changed, 47 insertions(+), 4 deletions(-)
diff --git a/src/kudu/master/master-test.cc b/src/kudu/master/master-test.cc
index 37493fa..289c12f 100644
--- a/src/kudu/master/master-test.cc
+++ b/src/kudu/master/master-test.cc
@@ -18,6 +18,7 @@
#include "kudu/master/master.h"
#include <algorithm>
+#include <atomic>
#include <cstdint>
#include <ctime>
#include <functional>
@@ -372,6 +373,50 @@ TEST_F(MasterTest, TestResetBlockCacheMetricsInSameProcess) {
});
}
+TEST_F(MasterTest, TestStartupWebPage) {
+ EasyCurl c;
+ faststring buf;
+ string addr = mini_master_->bound_http_addr().ToString();
+ mini_master_->Shutdown();
+ std::atomic<bool> run_status_reader = false;
+ thread read_startup_page([&] {
+ EasyCurl thread_c;
+ faststring thread_buf;
+ while (!run_status_reader) {
+ SleepFor(MonoDelta::FromMilliseconds(10));
+ if (!(thread_c.FetchURL(strings::Substitute("http://$0/startup", addr), &thread_buf)).ok()) {
+ continue;
+ }
+ ASSERT_STR_MATCHES(thread_buf.ToString(), "\"init_status\":(100|0)( |,)");
+ ASSERT_STR_MATCHES(thread_buf.ToString(), "\"read_filesystem_status\":(100|0)( |,)");
+ ASSERT_STR_MATCHES(thread_buf.ToString(), "\"read_instance_metadatafiles_status\""
+ ":(100|0)( |,)");
+ ASSERT_STR_MATCHES(thread_buf.ToString(), "\"read_data_directories_status\":"
+ "([0-9]|[1-9][0-9]|100)( |,)");
+ ASSERT_STR_MATCHES(thread_buf.ToString(), "\"initialize_master_catalog_status\":"
+ "([0-9]|[1-9][0-9]|100)( |,)");
+ ASSERT_STR_MATCHES(thread_buf.ToString(), "\"start_rpc_server_status\":(100|0)( |,)");
+ }
+ });
+ SCOPED_CLEANUP({
+ run_status_reader = true;
+ read_startup_page.join();
+ });
+
+ ASSERT_OK(mini_master_->Restart());
+ ASSERT_OK(mini_master_->WaitForCatalogManagerInit());
+ run_status_reader = true;
+
+ // After all the steps have been completed, ensure every startup step has 100 percent status
+ ASSERT_OK(c.FetchURL(strings::Substitute("http://$0/startup", addr), &buf));
+ ASSERT_STR_CONTAINS(buf.ToString(), "\"init_status\":100");
+ ASSERT_STR_CONTAINS(buf.ToString(), "\"read_filesystem_status\":100");
+ ASSERT_STR_CONTAINS(buf.ToString(), "\"read_instance_metadatafiles_status\":100");
+ ASSERT_STR_CONTAINS(buf.ToString(), "\"read_data_directories_status\":100");
+ ASSERT_STR_CONTAINS(buf.ToString(), "\"initialize_master_catalog_status\":100");
+ ASSERT_STR_CONTAINS(buf.ToString(), "\"start_rpc_server_status\":100");
+}
+
TEST_F(MasterTest, TestRegisterAndHeartbeat) {
const char* const kTsUUID = "my-ts-uuid";
diff --git a/src/kudu/master/master.cc b/src/kudu/master/master.cc
index ea401b8..6262a84 100644
--- a/src/kudu/master/master.cc
+++ b/src/kudu/master/master.cc
@@ -225,13 +225,9 @@ Status Master::Init() {
}
Status Master::Start() {
- Timer* init_master_catalog =
- startup_path_handler_->initialize_master_catalog_progress();
- init_master_catalog->Start();
RETURN_NOT_OK(StartAsync());
RETURN_NOT_OK(WaitForCatalogManagerInit());
google::FlushLogFiles(google::INFO); // Flush the startup messages.
- init_master_catalog->Stop();
return Status::OK();
}
@@ -281,11 +277,13 @@ Status Master::StartAsync() {
}
void Master::InitCatalogManagerTask() {
+ startup_path_handler_->initialize_master_catalog_progress()->Start();
Status s = InitCatalogManager();
if (!s.ok()) {
LOG(ERROR) << "Unable to init master catalog manager: " << s.ToString();
}
catalog_manager_init_status_.Set(s);
+ startup_path_handler_->initialize_master_catalog_progress()->Stop();
}
Status Master::InitCatalogManager() {