commit: 35b526007008c0ab22089e1cc130a2bddcdcb162
Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 20 15:54:14 2025 +0000
Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Sat Dec 20 15:54:14 2025 +0000
URL: https://gitweb.gentoo.org/proj/steve.git/commit/?id=35b52600
Share some common message parts
Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>
src/steve.cxx | 83 +++++++++++++++++++++++++++++++++++++++--------------------
1 file changed, 55 insertions(+), 28 deletions(-)
diff --git a/src/steve.cxx b/src/steve.cxx
index 803a7fc..7ec39bb 100644
--- a/src/steve.cxx
+++ b/src/steve.cxx
@@ -243,6 +243,35 @@ static std::string steve_process_id(uint64_t pid, const
steve_process *process)
return std::format("PID {}", pid);
}
+static std::string steve_process_token_stats(
+ const steve_process *process,
+ bool include_reserved = true)
+{
+ assert(process);
+
+ std::string ret = std::format("{} tokens held by process",
process->tokens_held);
+ if (include_reserved)
+ ret += std::format(", token reserved: {}",
process->token_reserved);
+ return ret;
+}
+
+static std::string steve_token_stats(
+ const steve_state *state,
+ const steve_process *process,
+ bool include_reserved = true,
+ bool include_load = true)
+{
+ assert(state);
+ assert(process);
+
+ std::string ret = std::format("{} left, {}",
+ state->tokens, steve_process_token_stats(process,
include_reserved));
+ if (include_load && state->max_load_avg > 0)
+ ret += std::format(", load average = {:.3} (limit: {})",
+ state->load_avg, state->max_load_avg);
+ return ret;
+}
+
static void steve_give_token(steve_state *state, fuse_req_t req, uint64_t pid)
{
steve_process *process = &state->processes.at(pid);
@@ -252,22 +281,20 @@ static void steve_give_token(steve_state *state,
fuse_req_t req, uint64_t pid)
process->tokens_held++;
process->token_reserved = false;
if (state->verbose)
- std::print(stderr, "Giving reserved token 0x{:02x} to
{}, {} left, {} tokens held by process\n",
- token, steve_process_id(pid, process),
state->tokens, process->tokens_held);
+ std::print(stderr, "Giving reserved token 0x{:02x} to
{}, {}\n",
+ token, steve_process_id(pid, process),
+ steve_token_stats(state, process, false,
false));
fuse_reply_buf(req, &token, 1);
return;
}
state->tokens--;
process->tokens_held++;
- if (state->verbose) {
- if (state->max_load_avg > 0)
- std::print(stderr, "Giving job token 0x{:02x} to {}, {}
left, {} tokens held by process, token reserved: {}, load average = {:.3}
(limit: {})\n",
- token, steve_process_id(pid, process),
state->tokens, process->tokens_held, process->token_reserved, state->load_avg,
state->max_load_avg);
- else
- std::print(stderr, "Giving job token 0x{:02x} to {}, {}
left, {} tokens held by process, token reserved: {}\n",
- token, steve_process_id(pid, process),
state->tokens, process->tokens_held, process->token_reserved);
- }
+ if (state->verbose)
+ std::print(stderr, "Giving job token 0x{:02x} to {}, {}\n",
+ token,
+ steve_process_id(pid, process),
+ steve_token_stats(state, process));
fuse_reply_buf(req, &token, 1);
}
@@ -279,14 +306,10 @@ static void steve_reserve_token(steve_state *state,
uint64_t pid)
state->tokens--;
process->token_reserved = true;
- if (state->verbose) {
- if (state->max_load_avg > 0)
- std::print(stderr, "Reserving job token for {}, {}
left, {} tokens held by process, load average = {:.3} (limit: {})\n",
- steve_process_id(pid, process),
state->tokens, process->tokens_held, state->load_avg, state->max_load_avg);
- else
- std::print(stderr, "Reserving job token for {}, {}
left, {} tokens held by process\n",
- steve_process_id(pid, process),
state->tokens, process->tokens_held);
- }
+ if (state->verbose)
+ std::print(stderr, "Reserving job token for {}, {}\n",
+ steve_process_id(pid, process),
+ steve_token_stats(state, process, false));
/* TODO: we need to handle expiring reservations if client doesn't read
*/
}
@@ -537,12 +560,13 @@ static void steve_read(
steve_process *process = &state->processes.at(fi->fh);
if (token_avail == steve_token_availability::load_exceeded) {
std::print(stderr, "Load exceeded while {} requested
token, waiting, {} tokens free, "
- "{} tokens held by process, load
average {:.3} >= {}\n",
- steve_process_id(fi->fh, process),
state->tokens, process->tokens_held,
+ "{}, load average {:.3} >= {}\n",
+ steve_process_id(fi->fh, process),
state->tokens,
+ steve_process_token_stats(process,
false),
state->load_avg, state->max_load_avg);
} else
- std::print(stderr, "No free job token for {}, waiting,
{} tokens held by process\n",
- steve_process_id(fi->fh, process),
process->tokens_held);
+ std::print(stderr, "No free job token for {}, waiting,
{}\n",
+ steve_process_id(fi->fh, process),
steve_process_token_stats(process, false));
}
fuse_req_interrupt_func(req, steve_interrupt, state);
}
@@ -632,8 +656,9 @@ static void steve_write(
state->tokens += size;
process->tokens_held -= size;
if (state->verbose)
- std::print(stderr, "{} returned {} tokens, {} available now, {}
tokens held by process, token reserved: {}\n",
- steve_process_id(fi->fh, process), size,
state->tokens, process->tokens_held, process->token_reserved);
+ std::print(stderr, "{} returned {} tokens, {} available now,
{}\n",
+ steve_process_id(fi->fh, process), size, state->tokens,
+ steve_process_token_stats(process));
fuse_reply_write(req, size);
/* Since we have jobs now, see if anyone's waiting */
@@ -659,12 +684,14 @@ static void steve_poll(
assert(state->max_load_avg > 0);
/* capped by load average */
std::print(stderr, "Load exceeded while {} requested
token, waiting, {} tokens free, "
- "{} tokens held by process, load
average {:.3} >= {}\n",
- steve_process_id(fi->fh, process),
state->tokens, process->tokens_held,
+ "{}, load average {:.3} >= {}\n",
+ steve_process_id(fi->fh, process),
state->tokens,
+ steve_process_token_stats(process,
false),
state->load_avg, state->max_load_avg);
} else
- std::print(stderr, "{} requested poll, {} tokens
available, {} tokens held by process\n",
- steve_process_id(fi->fh, process),
state->tokens, process->tokens_held);
+ std::print(stderr, "{} requested poll, {} tokens
available, {}\n",
+ steve_process_id(fi->fh, process),
state->tokens,
+ steve_process_token_stats(process,
false));
}
fuse_reply_poll(req, events);