This is an automated email from the ASF dual-hosted git repository.
yiguolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new d61fec3ff8b (feature)(LOG) Support to change be vlog level dynamically
using http (#28785)
d61fec3ff8b is described below
commit d61fec3ff8be4749ac8e44779bfdd9642b671a7c
Author: AlexYue <[email protected]>
AuthorDate: Sat Jan 6 20:12:35 2024 +0800
(feature)(LOG) Support to change be vlog level dynamically using http
(#28785)
---
be/src/http/action/adjust_log_level.cpp | 55 +++++++++++++++++++++++++++++++++
be/src/http/action/adjust_log_level.h | 37 ++++++++++++++++++++++
be/src/service/http_service.cpp | 4 +++
3 files changed, 96 insertions(+)
diff --git a/be/src/http/action/adjust_log_level.cpp
b/be/src/http/action/adjust_log_level.cpp
new file mode 100644
index 00000000000..687639a9b58
--- /dev/null
+++ b/be/src/http/action/adjust_log_level.cpp
@@ -0,0 +1,55 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#include <http/action/adjust_log_level.h>
+
+#include "common/logging.h"
+#include "common/status.h"
+#include "http/http_channel.h"
+#include "http/http_request.h"
+
+namespace doris {
+
+// **Note**: If the module_name does not exist in the vlog modules, vlog
+// would create corresponding module for it.
+int handle_request(HttpRequest* req) {
+ auto parse_param = [&req](std::string param) {
+ const auto& value = req->param(param);
+ if (value.empty()) {
+ auto error_msg = fmt::format("parameter {} not specified in url.",
param);
+ throw std::runtime_error(error_msg);
+ }
+ return value;
+ };
+ const auto& module = parse_param("module");
+ const auto& level = parse_param("level");
+ int new_level = std::stoi(level);
+ return google::SetVLOGLevel(module.c_str(), new_level);
+}
+
+void AdjustLogLevelAction::handle(HttpRequest* req) {
+ try {
+ auto old_level = handle_request(req);
+ auto msg = fmt::format("adjust log level success, origin level is {}",
old_level);
+ HttpChannel::send_reply(req, msg);
+ } catch (const std::exception& e) {
+ HttpChannel::send_reply(req, HttpStatus::INTERNAL_SERVER_ERROR,
e.what());
+ LOG(WARNING) << "adjust log level failed, error: " << e.what();
+ return;
+ }
+}
+} // namespace doris
\ No newline at end of file
diff --git a/be/src/http/action/adjust_log_level.h
b/be/src/http/action/adjust_log_level.h
new file mode 100644
index 00000000000..606d6129a26
--- /dev/null
+++ b/be/src/http/action/adjust_log_level.h
@@ -0,0 +1,37 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements. See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership. The ASF licenses this file
+// to you under the Apache License, Version 2.0 (the
+// "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+// KIND, either express or implied. See the License for the
+// specific language governing permissions and limitations
+// under the License.
+
+#pragma once
+
+#include <string>
+
+#include "common/status.h"
+#include "http/http_handler.h"
+
+namespace doris {
+
+class HttpRequest;
+
+class AdjustLogLevelAction : public HttpHandler {
+public:
+ AdjustLogLevelAction() = default;
+
+ ~AdjustLogLevelAction() override = default;
+
+ void handle(HttpRequest* req) override;
+};
+} // namespace doris
diff --git a/be/src/service/http_service.cpp b/be/src/service/http_service.cpp
index 1423f82225f..6c961959aec 100644
--- a/be/src/service/http_service.cpp
+++ b/be/src/service/http_service.cpp
@@ -26,6 +26,7 @@
#include "common/config.h"
#include "common/status.h"
+#include "http/action/adjust_log_level.h"
#include "http/action/check_rpc_channel_action.h"
#include "http/action/check_tablet_segment_action.h"
#include "http/action/checksum_action.h"
@@ -158,6 +159,9 @@ Status HttpService::start() {
_ev_http_server->register_handler(HttpMethod::HEAD,
"/api/_binlog/_download",
download_binlog_action);
+ AdjustLogLevelAction* adjust_log_level_action = _pool.add(new
AdjustLogLevelAction());
+ _ev_http_server->register_handler(HttpMethod::POST, "api/glog/adjust",
adjust_log_level_action);
+
// Register BE version action
VersionAction* version_action =
_pool.add(new VersionAction(_env, TPrivilegeHier::GLOBAL,
TPrivilegeType::NONE));
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]