tree-wide: add SD_ID128_MAKE_STR, remove LOG_MESSAGE_ID
Embedding sd_id128_t's in constant strings was rather cumbersome. We had
SD_ID128_CONST_STR which returned a const char[], but it had two problems:
- it wasn't possible to statically concatanate this array with a normal string
- gcc wasn't really able to optimize this, and generated code to perform the
"conversion" at runtime.
Because of this, even our own code in coredumpctl wasn't using
SD_ID128_CONST_STR.
Add a new macro to generate a constant string: SD_ID128_MAKE_STR.
It is not as elegant as SD_ID128_CONST_STR, because it requires a repetition
of the numbers, but in practice it is more convenient to use, and allows gcc
to generate smarter code:
$ size .libs/systemd{,-logind,-journald}{.old,}
text data bss dec hex filename
1265204 149564 4808 1419576 15a938 .libs/systemd.old
1260268 149564 4808 1414640 1595f0 .libs/systemd
246805 13852 209 260866 3fb02 .libs/systemd-logind.old
240973 13852 209 255034 3e43a .libs/systemd-logind
146839 4984 34 151857 25131 .libs/systemd-journald.old
146391 4984 34 151409 24f71 .libs/systemd-journald
It is also much easier to check if a certain binary uses a certain MESSAGE_ID:
$ strings .libs/systemd.old|grep MESSAGE_ID
MESSAGE_ID=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x
MESSAGE_ID=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x
MESSAGE_ID=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x
MESSAGE_ID=%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x
$ strings .libs/systemd|grep MESSAGE_ID
MESSAGE_ID=c7a787079b354eaaa9e77b371893cd27
MESSAGE_ID=b07a249cd024414a82dd00cd181378ff
MESSAGE_ID=641257651c1b4ec9a8624d7a40a9e1e7
MESSAGE_ID=de5b426a63be47a7b6ac3eaac82e2f6f
MESSAGE_ID=d34d037fff1847e6ae669a370e694725
MESSAGE_ID=7d4958e842da4a758f6c1cdc7b36dcc5
MESSAGE_ID=1dee0369c7fc4736b7099b38ecb46ee7
MESSAGE_ID=39f53479d3a045ac8e11786248231fbf
MESSAGE_ID=be02cf6855d2428ba40df7e9d022f03d
MESSAGE_ID=7b05ebc668384222baa8881179cfda54
MESSAGE_ID=9d1aaa27d60140bd96365438aad20286
This commit is contained in:
+2
-2
@@ -2981,7 +2981,7 @@ int exec_spawn(Unit *unit,
|
||||
log_open();
|
||||
if (error_message)
|
||||
log_struct_errno(LOG_ERR, r,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_SPAWN_FAILED),
|
||||
"MESSAGE_ID=" SD_MESSAGE_SPAWN_FAILED_STR,
|
||||
LOG_UNIT_ID(unit),
|
||||
LOG_UNIT_MESSAGE(unit, "%s: %m",
|
||||
error_message),
|
||||
@@ -2989,7 +2989,7 @@ int exec_spawn(Unit *unit,
|
||||
NULL);
|
||||
else
|
||||
log_struct_errno(LOG_ERR, r,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_SPAWN_FAILED),
|
||||
"MESSAGE_ID=" SD_MESSAGE_SPAWN_FAILED_STR,
|
||||
LOG_UNIT_ID(unit),
|
||||
LOG_UNIT_MESSAGE(unit, "Failed at step %s spawning %s: %m",
|
||||
exit_status_to_string(exit_status, EXIT_STATUS_SYSTEMD),
|
||||
|
||||
+8
-6
@@ -744,9 +744,8 @@ static void job_print_status_message(Unit *u, JobType t, JobResult result) {
|
||||
}
|
||||
|
||||
static void job_log_status_message(Unit *u, JobType t, JobResult result) {
|
||||
const char *format;
|
||||
const char *format, *mid;
|
||||
char buf[LINE_MAX];
|
||||
sd_id128_t mid;
|
||||
static const int job_result_log_level[_JOB_RESULT_MAX] = {
|
||||
[JOB_DONE] = LOG_INFO,
|
||||
[JOB_CANCELED] = LOG_INFO,
|
||||
@@ -782,16 +781,19 @@ static void job_log_status_message(Unit *u, JobType t, JobResult result) {
|
||||
switch (t) {
|
||||
|
||||
case JOB_START:
|
||||
mid = result == JOB_DONE ? SD_MESSAGE_UNIT_STARTED : SD_MESSAGE_UNIT_FAILED;
|
||||
if (result == JOB_DONE)
|
||||
mid = "MESSAGE_ID=" SD_MESSAGE_UNIT_STARTED_STR;
|
||||
else
|
||||
mid = "MESSAGE_ID=" SD_MESSAGE_UNIT_FAILED_STR;
|
||||
break;
|
||||
|
||||
case JOB_RELOAD:
|
||||
mid = SD_MESSAGE_UNIT_RELOADED;
|
||||
mid = "MESSAGE_ID=" SD_MESSAGE_UNIT_RELOADED_STR;
|
||||
break;
|
||||
|
||||
case JOB_STOP:
|
||||
case JOB_RESTART:
|
||||
mid = SD_MESSAGE_UNIT_STOPPED;
|
||||
mid = "MESSAGE_ID=" SD_MESSAGE_UNIT_STOPPED_STR;
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -804,7 +806,7 @@ static void job_log_status_message(Unit *u, JobType t, JobResult result) {
|
||||
}
|
||||
|
||||
log_struct(job_result_log_level[result],
|
||||
LOG_MESSAGE_ID(mid),
|
||||
mid,
|
||||
LOG_UNIT_ID(u),
|
||||
LOG_MESSAGE("%s", buf),
|
||||
"RESULT=%s", job_result_to_string(result),
|
||||
|
||||
+4
-4
@@ -2171,7 +2171,7 @@ static int manager_dispatch_time_change_fd(sd_event_source *source, int fd, uint
|
||||
assert(m->time_change_fd == fd);
|
||||
|
||||
log_struct(LOG_DEBUG,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_TIME_CHANGE),
|
||||
"MESSAGE_ID=" SD_MESSAGE_TIME_CHANGE_STR,
|
||||
LOG_MESSAGE("Time has been changed"),
|
||||
NULL);
|
||||
|
||||
@@ -2930,7 +2930,7 @@ static void manager_notify_finished(Manager *m) {
|
||||
initrd_usec = m->userspace_timestamp.monotonic - m->initrd_timestamp.monotonic;
|
||||
|
||||
log_struct(LOG_INFO,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_STARTUP_FINISHED),
|
||||
"MESSAGE_ID=" SD_MESSAGE_STARTUP_FINISHED_STR,
|
||||
"KERNEL_USEC="USEC_FMT, kernel_usec,
|
||||
"INITRD_USEC="USEC_FMT, initrd_usec,
|
||||
"USERSPACE_USEC="USEC_FMT, userspace_usec,
|
||||
@@ -2945,7 +2945,7 @@ static void manager_notify_finished(Manager *m) {
|
||||
initrd_usec = 0;
|
||||
|
||||
log_struct(LOG_INFO,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_STARTUP_FINISHED),
|
||||
"MESSAGE_ID=" SD_MESSAGE_STARTUP_FINISHED_STR,
|
||||
"KERNEL_USEC="USEC_FMT, kernel_usec,
|
||||
"USERSPACE_USEC="USEC_FMT, userspace_usec,
|
||||
LOG_MESSAGE("Startup finished in %s (kernel) + %s (userspace) = %s.",
|
||||
@@ -2959,7 +2959,7 @@ static void manager_notify_finished(Manager *m) {
|
||||
total_usec = userspace_usec = m->finish_timestamp.monotonic - m->userspace_timestamp.monotonic;
|
||||
|
||||
log_struct(LOG_INFO,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_USER_STARTUP_FINISHED),
|
||||
"MESSAGE_ID=" SD_MESSAGE_USER_STARTUP_FINISHED_STR,
|
||||
"USERSPACE_USEC="USEC_FMT, userspace_usec,
|
||||
LOG_MESSAGE("Startup finished in %s.",
|
||||
format_timespan(sum, sizeof(sum), total_usec, USEC_PER_MSEC)),
|
||||
|
||||
+7
-8
@@ -1466,9 +1466,8 @@ static void unit_status_print_starting_stopping(Unit *u, JobType t) {
|
||||
}
|
||||
|
||||
static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) {
|
||||
const char *format;
|
||||
const char *format, *mid;
|
||||
char buf[LINE_MAX];
|
||||
sd_id128_t mid;
|
||||
|
||||
assert(u);
|
||||
|
||||
@@ -1486,9 +1485,9 @@ static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) {
|
||||
snprintf(buf, sizeof buf, format, unit_description(u));
|
||||
REENABLE_WARNING;
|
||||
|
||||
mid = t == JOB_START ? SD_MESSAGE_UNIT_STARTING :
|
||||
t == JOB_STOP ? SD_MESSAGE_UNIT_STOPPING :
|
||||
SD_MESSAGE_UNIT_RELOADING;
|
||||
mid = t == JOB_START ? "MESSAGE_ID=" SD_MESSAGE_UNIT_STARTING_STR :
|
||||
t == JOB_STOP ? "MESSAGE_ID=" SD_MESSAGE_UNIT_STOPPING_STR :
|
||||
"MESSAGE_ID=" SD_MESSAGE_UNIT_RELOADING_STR;
|
||||
|
||||
/* Note that we deliberately use LOG_MESSAGE() instead of
|
||||
* LOG_UNIT_MESSAGE() here, since this is supposed to mimic
|
||||
@@ -1497,7 +1496,7 @@ static void unit_status_log_starting_stopping_reloading(Unit *u, JobType t) {
|
||||
* possible, which means we should avoid the low-level unit
|
||||
* name. */
|
||||
log_struct(LOG_INFO,
|
||||
LOG_MESSAGE_ID(mid),
|
||||
mid,
|
||||
LOG_UNIT_ID(u),
|
||||
LOG_MESSAGE("%s", buf),
|
||||
NULL);
|
||||
@@ -4036,7 +4035,7 @@ void unit_warn_if_dir_nonempty(Unit *u, const char* where) {
|
||||
}
|
||||
|
||||
log_struct(LOG_NOTICE,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING),
|
||||
"MESSAGE_ID=" SD_MESSAGE_OVERMOUNTING_STR,
|
||||
LOG_UNIT_ID(u),
|
||||
LOG_UNIT_MESSAGE(u, "Directory %s to mount over is not empty, mounting anyway.", where),
|
||||
"WHERE=%s", where,
|
||||
@@ -4058,7 +4057,7 @@ int unit_fail_if_symlink(Unit *u, const char* where) {
|
||||
return 0;
|
||||
|
||||
log_struct(LOG_ERR,
|
||||
LOG_MESSAGE_ID(SD_MESSAGE_OVERMOUNTING),
|
||||
"MESSAGE_ID=" SD_MESSAGE_OVERMOUNTING_STR,
|
||||
LOG_UNIT_ID(u),
|
||||
LOG_UNIT_MESSAGE(u, "Mount on symlink %s not allowed.", where),
|
||||
"WHERE=%s", where,
|
||||
|
||||
Reference in New Issue
Block a user