Skip to content

Commit 72dce11

Browse files
committed
Merge #200: event loop: add LogOptions struct and reduce the log size
8500340 eventloop: add `LogOptions` struct (ismaelsadeeq) Pull request description: This PR fixes #190 by reducing the maximum size of characters to from 1000 to 200. This is achieved by creating a new struct `LogOptions` The `LogOptions` struct will contain i) The log callback function pointer ii) The maximum character to pass to `LogEscape` The main motivation is to reduce the verbosity of the logs and make LogEscape `max_size` configurable. ACKs for top commit: ryanofsky: Code review ACK 8500340. Just whitespace cleanup since last review. Nice to have a shrinking PR Eunovo: ReACK 8500340 Tree-SHA512: 981d8e5957b482e4217d00fcf6f3244e52f491af593e8d16f4f91b7fcf0210645b466ef916205fa23527f6beebb18be2e2a5457f97b546bdf837bdcaa20ad5d2
2 parents 878e84d + 8500340 commit 72dce11

File tree

5 files changed

+24
-15
lines changed

5 files changed

+24
-15
lines changed

include/mp/proxy-io.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,16 @@ class Logger
130130
std::ostringstream m_buffer;
131131
};
132132

133+
struct LogOptions {
134+
135+
//! External logging callback.
136+
LogFn log_fn;
137+
138+
//! Maximum number of characters to use when representing
139+
//! request and response structs as strings.
140+
size_t max_chars{200};
141+
};
142+
133143
std::string LongThreadName(const char* exe_name);
134144

135145
//! Event loop implementation.
@@ -204,12 +214,12 @@ class EventLoop
204214

205215
Logger log()
206216
{
207-
Logger logger(false, m_log_fn);
217+
Logger logger(false, m_log_opts.log_fn);
208218
logger << "{" << LongThreadName(m_exe_name) << "} ";
209219
return logger;
210220
}
211-
Logger logPlain() { return {false, m_log_fn}; }
212-
Logger raise() { return {true, m_log_fn}; }
221+
Logger logPlain() { return {false, m_log_opts.log_fn}; }
222+
Logger raise() { return {true, m_log_opts.log_fn}; }
213223

214224
//! Process name included in thread names so combined debug output from
215225
//! multiple processes is easier to understand.
@@ -255,8 +265,8 @@ class EventLoop
255265
//! List of connections.
256266
std::list<Connection> m_incoming_connections;
257267

258-
//! External logging callback.
259-
LogFn m_log_fn;
268+
//! Logging options
269+
LogOptions m_log_opts;
260270

261271
//! External context pointer.
262272
void* m_context;

include/mp/proxy-types.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -631,13 +631,13 @@ void clientInvoke(ProxyClient& proxy_client, const GetRequest& get_request, Fiel
631631
IterateFields().handleChain(*invoke_context, request, FieldList(), typename FieldObjs::BuildParams{&fields}...);
632632
proxy_client.m_context.loop->logPlain()
633633
<< "{" << thread_context.thread_name << "} IPC client send "
634-
<< TypeName<typename Request::Params>() << " " << LogEscape(request.toString());
634+
<< TypeName<typename Request::Params>() << " " << LogEscape(request.toString(), proxy_client.m_context.loop->m_log_opts.max_chars);
635635

636636
proxy_client.m_context.loop->m_task_set->add(request.send().then(
637637
[&](::capnp::Response<typename Request::Results>&& response) {
638638
proxy_client.m_context.loop->logPlain()
639639
<< "{" << thread_context.thread_name << "} IPC client recv "
640-
<< TypeName<typename Request::Results>() << " " << LogEscape(response.toString());
640+
<< TypeName<typename Request::Results>() << " " << LogEscape(response.toString(), proxy_client.m_context.loop->m_log_opts.max_chars);
641641
try {
642642
IterateFields().handleChain(
643643
*invoke_context, response, FieldList(), typename FieldObjs::ReadResults{&fields}...);
@@ -701,7 +701,7 @@ kj::Promise<void> serverInvoke(Server& server, CallContext& call_context, Fn fn)
701701

702702
int req = ++server_reqs;
703703
server.m_context.loop->log() << "IPC server recv request #" << req << " "
704-
<< TypeName<typename Params::Reads>() << " " << LogEscape(params.toString());
704+
<< TypeName<typename Params::Reads>() << " " << LogEscape(params.toString(), server.m_context.loop->m_log_opts.max_chars);
705705

706706
try {
707707
using ServerContext = ServerInvokeContext<Server, CallContext>;
@@ -718,7 +718,7 @@ kj::Promise<void> serverInvoke(Server& server, CallContext& call_context, Fn fn)
718718
[&]() { return kj::Promise<CallContext>(kj::mv(call_context)); })
719719
.then([&server, req](CallContext call_context) {
720720
server.m_context.loop->log() << "IPC server send response #" << req << " " << TypeName<Results>()
721-
<< " " << LogEscape(call_context.getResults().toString());
721+
<< " " << LogEscape(call_context.getResults().toString(), server.m_context.loop->m_log_opts.max_chars);
722722
});
723723
} catch (const std::exception& e) {
724724
server.m_context.loop->log() << "IPC server unhandled exception: " << e.what();

include/mp/util.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ std::string ThreadName(const char* exe_name);
203203

204204
//! Escape binary string for use in log so it doesn't trigger unicode decode
205205
//! errors in python unit tests.
206-
std::string LogEscape(const kj::StringTree& string);
206+
std::string LogEscape(const kj::StringTree& string, size_t max_size);
207207

208208
//! Callback type used by SpawnProcess below.
209209
using FdToArgsFn = std::function<std::vector<std::string>(int fd)>;

src/mp/proxy.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,9 +187,9 @@ EventLoop::EventLoop(const char* exe_name, LogFn log_fn, void* context)
187187
: m_exe_name(exe_name),
188188
m_io_context(kj::setupAsyncIo()),
189189
m_task_set(new kj::TaskSet(m_error_handler)),
190-
m_log_fn(std::move(log_fn)),
191190
m_context(context)
192191
{
192+
m_log_opts.log_fn = log_fn;
193193
int fds[2];
194194
KJ_SYSCALL(socketpair(AF_UNIX, SOCK_STREAM, 0, fds));
195195
m_wait_fd = fds[0];

src/mp/util.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,11 @@ std::string ThreadName(const char* exe_name)
7676
return std::move(buffer).str();
7777
}
7878

79-
std::string LogEscape(const kj::StringTree& string)
79+
std::string LogEscape(const kj::StringTree& string, size_t max_size)
8080
{
81-
const int MAX_SIZE = 1000;
8281
std::string result;
8382
string.visit([&](const kj::ArrayPtr<const char>& piece) {
84-
if (result.size() > MAX_SIZE) return;
83+
if (result.size() > max_size) return;
8584
for (const char c : piece) {
8685
if (c == '\\') {
8786
result.append("\\\\");
@@ -92,7 +91,7 @@ std::string LogEscape(const kj::StringTree& string)
9291
} else {
9392
result.push_back(c);
9493
}
95-
if (result.size() > MAX_SIZE) {
94+
if (result.size() > max_size) {
9695
result += "...";
9796
break;
9897
}

0 commit comments

Comments
 (0)