Skip to content

Commit b7706b5

Browse files
authored
instance HTTP APIs : ForceCheckpoint, CompactTable (#2036)
### What problem does this PR solve? New HTTP APIs for instance: - Force GlobalCheckpoint. (Not documented.) - Compact Table. (Not documented.) Issue link: #1937 ### Type of change - [x] New Feature (non-breaking change which adds functionality)
1 parent 61d536b commit b7706b5

File tree

2 files changed

+87
-2
lines changed

2 files changed

+87
-2
lines changed

src/main/infinity.cpp

+36-2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import optimize_statement;
4949
import alter_statement;
5050
import statement_common;
5151
import admin_statement;
52+
import compact_statement;
5253

5354
import create_schema_info;
5455
import drop_schema_info;
@@ -737,7 +738,7 @@ QueryResult Infinity::ShowObjects() {
737738
return result;
738739
}
739740

740-
QueryResult Infinity::ShowObject(const String& filename) {
741+
QueryResult Infinity::ShowObject(const String &filename) {
741742
UniquePtr<QueryContext> query_context_ptr = GetQueryContext();
742743
UniquePtr<ShowStatement> show_statement = MakeUnique<ShowStatement>();
743744
show_statement->show_type_ = ShowStmtType::kPersistenceObject;
@@ -778,7 +779,7 @@ QueryResult Infinity::ShowMemoryAllocations() {
778779
return result;
779780
}
780781

781-
QueryResult Infinity::ShowFunction(const String& function_name) {
782+
QueryResult Infinity::ShowFunction(const String &function_name) {
782783
UniquePtr<QueryContext> query_context_ptr = GetQueryContext();
783784
UniquePtr<ShowStatement> show_statement = MakeUnique<ShowStatement>();
784785
show_statement->show_type_ = ShowStmtType::kFunction;
@@ -1039,6 +1040,39 @@ QueryResult Infinity::Cleanup() {
10391040
return result;
10401041
}
10411042

1043+
QueryResult Infinity::ForceCheckpoint() {
1044+
auto query_context_ptr = MakeUnique<QueryContext>(session_.get());
1045+
query_context_ptr->Init(InfinityContext::instance().config(),
1046+
InfinityContext::instance().task_scheduler(),
1047+
InfinityContext::instance().storage(),
1048+
InfinityContext::instance().resource_manager(),
1049+
InfinityContext::instance().session_manager(),
1050+
InfinityContext::instance().persistence_manager());
1051+
1052+
auto flush_statement = MakeUnique<FlushStatement>();
1053+
flush_statement->type_ = infinity::FlushType::kData;
1054+
1055+
QueryResult result = query_context_ptr->QueryStatement(flush_statement.get());
1056+
1057+
return result;
1058+
}
1059+
1060+
QueryResult Infinity::CompactTable(const String &db_name, const String &table_name) {
1061+
auto query_context_ptr = MakeUnique<QueryContext>(session_.get());
1062+
query_context_ptr->Init(InfinityContext::instance().config(),
1063+
InfinityContext::instance().task_scheduler(),
1064+
InfinityContext::instance().storage(),
1065+
InfinityContext::instance().resource_manager(),
1066+
InfinityContext::instance().session_manager(),
1067+
InfinityContext::instance().persistence_manager());
1068+
1069+
auto compact_statement = MakeUnique<ManualCompactStatement>(db_name, table_name);
1070+
1071+
QueryResult result = query_context_ptr->QueryStatement(compact_statement.get());
1072+
1073+
return result;
1074+
}
1075+
10421076
QueryResult Infinity::AdminShowCatalogs() {
10431077
auto query_context_ptr = MakeUnique<QueryContext>(session_.get());
10441078
query_context_ptr->Init(InfinityContext::instance().config(),

src/network/http_server.cpp

+51
Original file line numberDiff line numberDiff line change
@@ -3922,6 +3922,55 @@ class ShowMemoryAllocationsHandler final : public HttpRequestHandler {
39223922
}
39233923
};
39243924

3925+
class ForceGlobalCheckpointHandler final : public HttpRequestHandler {
3926+
public:
3927+
SharedPtr<OutgoingResponse> handle(const SharedPtr<IncomingRequest> &request) final {
3928+
auto infinity = Infinity::RemoteConnect();
3929+
DeferFn defer_fn([&]() { infinity->RemoteDisconnect(); });
3930+
3931+
nlohmann::json json_response;
3932+
HTTPStatus http_status;
3933+
QueryResult result = infinity->ForceCheckpoint();
3934+
3935+
if (result.IsOk()) {
3936+
json_response["error_code"] = 0;
3937+
http_status = HTTPStatus::CODE_200;
3938+
} else {
3939+
json_response["error_code"] = result.ErrorCode();
3940+
json_response["error_message"] = result.ErrorMsg();
3941+
http_status = HTTPStatus::CODE_500;
3942+
}
3943+
return ResponseFactory::createResponse(http_status, json_response.dump());
3944+
}
3945+
};
3946+
3947+
class CompactTableHandler final : public HttpRequestHandler {
3948+
public:
3949+
SharedPtr<OutgoingResponse> handle(const SharedPtr<IncomingRequest> &request) final {
3950+
auto infinity = Infinity::RemoteConnect();
3951+
DeferFn defer_fn([&]() { infinity->RemoteDisconnect(); });
3952+
3953+
String data_body = request->readBodyToString();
3954+
nlohmann::json json_body = nlohmann::json::parse(data_body);
3955+
String db_name = json_body["db_name"];
3956+
String table_name = json_body["table_name"];
3957+
3958+
nlohmann::json json_response;
3959+
HTTPStatus http_status;
3960+
QueryResult result = infinity->CompactTable(db_name, table_name);
3961+
3962+
if (result.IsOk()) {
3963+
json_response["error_code"] = 0;
3964+
http_status = HTTPStatus::CODE_200;
3965+
} else {
3966+
json_response["error_code"] = result.ErrorCode();
3967+
json_response["error_message"] = result.ErrorMsg();
3968+
http_status = HTTPStatus::CODE_500;
3969+
}
3970+
return ResponseFactory::createResponse(http_status, json_response.dump());
3971+
}
3972+
};
3973+
39253974
class AdminShowCurrentNodeHandler final : public HttpRequestHandler {
39263975
public:
39273976
SharedPtr<OutgoingResponse> handle(const SharedPtr<IncomingRequest> &request) final {
@@ -4267,6 +4316,8 @@ void HTTPServer::Start(const String &ip_address, u16 port) {
42674316
router->route("GET", "/instance/memory", MakeShared<ShowMemoryHandler>());
42684317
router->route("GET", "/instance/memory/objects", MakeShared<ShowMemoryObjectsHandler>());
42694318
router->route("GET", "/instance/memory/allocations", MakeShared<ShowMemoryAllocationsHandler>());
4319+
router->route("POST", "/instance/flush", MakeShared<ForceGlobalCheckpointHandler>());
4320+
router->route("POST", "/instance/table/compact", MakeShared<CompactTableHandler>());
42704321

42714322
// variable
42724323
router->route("GET", "/variables/global", MakeShared<ShowGlobalVariablesHandler>());

0 commit comments

Comments
 (0)