Files
doris/be/src/service/http_service.cpp
Zhao Chun a2b299e3b9 Reduce UT binary size (#314)
* Reduce UT binary size

Almost every module depend on ExecEnv, and ExecEnv contains all
singleton, which make UT binary contains all object files.

This patch seperate ExecEnv's initial and destory to anthor file to
avoid other file's dependence. And status.cc include debug_util.h which
depend tuple.h tuple_row.h, and I move get_stack_trace() to
stack_util.cpp to reduce status.cc's dependence.

I add USE_RTTI=1 to build rocksdb to avoid linking librocksdb.a

Issue: #292

* Update
2018-11-15 16:17:23 +08:00

120 lines
4.7 KiB
C++

// 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 "service/http_service.h"
#include "http/action/checksum_action.h"
#include "http/action/health_action.h"
#include "http/action/meta_action.h"
#include "http/action/metrics_action.h"
#include "http/action/mini_load.h"
#include "http/action/pprof_actions.h"
#include "http/action/reload_tablet_action.h"
#include "http/action/restore_tablet_action.h"
#include "http/action/snapshot_action.h"
#include "http/action/stream_load.h"
#include "http/default_path_handlers.h"
#include "http/download_action.h"
#include "http/ev_http_server.h"
#include "http/http_method.h"
#include "http/monitor_action.h"
#include "http/web_page_handler.h"
#include "runtime/exec_env.h"
#include "runtime/load_path_mgr.h"
#include "util/doris_metrics.h"
namespace doris {
HttpService::HttpService(ExecEnv* env, int port, int num_threads)
: _env(env),
_ev_http_server(new EvHttpServer(port, num_threads)),
_web_page_handler(new WebPageHandler(_ev_http_server.get())) {
}
HttpService::~HttpService() {
}
Status HttpService::start() {
add_default_path_handlers(_web_page_handler.get(), _env->process_mem_tracker());
// register load
_ev_http_server->register_handler(
HttpMethod::PUT, "/api/{db}/{table}/_load", new MiniLoadAction(_env));
_ev_http_server->register_handler(
HttpMethod::PUT, "/api/{db}/{table}/_stream_load", new StreamLoadAction(_env));
// register download action
std::vector<std::string> allow_paths;
for (auto& path : _env->store_paths()) {
allow_paths.emplace_back(path.path);
}
DownloadAction* download_action = new DownloadAction(_env, allow_paths);
_ev_http_server->register_handler(HttpMethod::HEAD, "/api/_download_load", download_action);
_ev_http_server->register_handler(HttpMethod::GET, "/api/_download_load", download_action);
DownloadAction* tablet_download_action = new DownloadAction(_env, allow_paths);
_ev_http_server->register_handler(
HttpMethod::HEAD, "/api/_tablet/_download", tablet_download_action);
_ev_http_server->register_handler(
HttpMethod::GET, "/api/_tablet/_download", tablet_download_action);
DownloadAction* error_log_download_action = new DownloadAction(
_env, _env->load_path_mgr()->get_load_error_file_dir());
_ev_http_server->register_handler(
HttpMethod::GET, "/api/_load_error_log", error_log_download_action);
_ev_http_server->register_handler(
HttpMethod::HEAD, "/api/_load_error_log", error_log_download_action);
// Register BE health action
HealthAction* health_action = new HealthAction(_env);
_ev_http_server->register_handler(HttpMethod::GET, "/api/health", health_action);
// register pprof actions
PprofActions::setup(_env, _ev_http_server.get());
// register metrics
{
auto action = new MetricsAction(DorisMetrics::metrics());
_ev_http_server->register_handler(HttpMethod::GET, "/metrics", action);
}
MetaAction* meta_action = new MetaAction(HEADER);
_ev_http_server->register_handler(HttpMethod::GET, "/api/meta/header/{tablet_id}/{schema_hash}", meta_action);
#ifndef BE_TEST
// Register BE checksum action
ChecksumAction* checksum_action = new ChecksumAction(_env);
_ev_http_server->register_handler(HttpMethod::GET, "/api/checksum", checksum_action);
// Register BE reload tablet action
ReloadTabletAction* reload_tablet_action = new ReloadTabletAction(_env);
_ev_http_server->register_handler(HttpMethod::GET, "/api/reload_tablet", reload_tablet_action);
RestoreTabletAction* restore_tablet_action = new RestoreTabletAction(_env);
_ev_http_server->register_handler(HttpMethod::POST, "/api/restore_tablet", restore_tablet_action);
// Register BE snapshot action
SnapshotAction* snapshot_action = new SnapshotAction(_env);
_ev_http_server->register_handler(HttpMethod::GET, "/api/snapshot", snapshot_action);
#endif
RETURN_IF_ERROR(_ev_http_server->start());
return Status::OK;
}
}