fix: use tlog macros consistently in persist.c

Replace all fprintf(stderr,...) calls with INFO/WARN/ERROR/TRACE so
persist.c output appears in the controller's structured log rather than
mixing plain text on stderr with tlog-formatted output.
This commit is contained in:
Rongsong Shen 2026-05-08 07:17:35 +00:00
parent 7e4528a0b9
commit b80ca3deaa

View file

@ -160,9 +160,8 @@ int persist_init(persist_t* p, persist_config_t* cfg, cluster_t* c)
struct statfs sfs; struct statfs sfs;
if (statfs(p->wal_path, &sfs) == 0 && if (statfs(p->wal_path, &sfs) == 0 &&
(unsigned long)sfs.f_type == (unsigned long)NFS_SUPER_MAGIC) { (unsigned long)sfs.f_type == (unsigned long)NFS_SUPER_MAGIC) {
fprintf(stderr, ERROR("persist: WAL path %s is on NFS — unsafe for fsync durability",
"persist: WAL path %s is on NFS — unsafe for fsync durability\n", p->wal_path);
p->wal_path);
return -EREMOTE; return -EREMOTE;
} }
@ -171,10 +170,9 @@ int persist_init(persist_t* p, persist_config_t* cfg, cluster_t* c)
pthread_cond_init(&p->checkpoint_done, NULL); pthread_cond_init(&p->checkpoint_done, NULL);
repl_init(&p->repl); /* P2-4: fan-out replicator lifecycle */ repl_init(&p->repl); /* P2-4: fan-out replicator lifecycle */
fprintf(stderr, WARN("WAL/snapshot stored unencrypted in %s — "
"INFO: WAL/snapshot stored unencrypted in %s — " "ensure filesystem is encrypted if job payloads contain sensitive data",
"ensure filesystem is encrypted if job payloads contain sensitive data\n", p->wal_path);
p->wal_path);
return 0; return 0;
} }
@ -560,9 +558,8 @@ int apply_wal_entry(persist_t* p, const wal_entry_hdr_t* hdr, const void* payloa
/* Reject oversized payloads BEFORE any allocation */ /* Reject oversized payloads BEFORE any allocation */
if (hdr->payload_len > MAX_WAL_PAYLOAD_BYTES) { if (hdr->payload_len > MAX_WAL_PAYLOAD_BYTES) {
fprintf(stderr, ERROR("apply_wal_entry: payload_len %u exceeds MAX_WAL_PAYLOAD_BYTES %u",
"apply_wal_entry: payload_len %u exceeds MAX_WAL_PAYLOAD_BYTES %u\n", hdr->payload_len, MAX_WAL_PAYLOAD_BYTES);
hdr->payload_len, MAX_WAL_PAYLOAD_BYTES);
return -EMSGSIZE; return -EMSGSIZE;
} }
@ -575,10 +572,9 @@ int apply_wal_entry(persist_t* p, const wal_entry_hdr_t* hdr, const void* payloa
* compatibility — an older controller can boot on WAL written by a newer * compatibility — an older controller can boot on WAL written by a newer
* one without hard-failing on unrecognised entry types. */ * one without hard-failing on unrecognised entry types. */
if (hdr->type > WAL_ENTRY_TYPE_MAX) { if (hdr->type > WAL_ENTRY_TYPE_MAX) {
fprintf(stderr, WARN("apply_wal_entry: unknown type %u > WAL_ENTRY_TYPE_MAX %u"
"WARN apply_wal_entry: unknown type %u > WAL_ENTRY_TYPE_MAX %u" " (lsn=%" PRIu64 ") — skipping for forward compatibility",
" (lsn=%" PRIu64 ") — skipping for forward compatibility\n", hdr->type, WAL_ENTRY_TYPE_MAX, hdr->lsn);
hdr->type, WAL_ENTRY_TYPE_MAX, hdr->lsn);
return 0; return 0;
} }
@ -666,9 +662,8 @@ static int replay_wal(persist_t* p, uint64_t from_lsn)
int fd = open(seg_path, O_RDONLY); int fd = open(seg_path, O_RDONLY);
if (fd < 0) { if (fd < 0) {
fprintf(stderr, WARN("persist_recover: cannot open segment %s: %s",
"persist_recover: WARNING: cannot open segment %s: %s\n", seg_path, strerror(errno));
seg_path, strerror(errno));
continue; continue;
} }
@ -681,11 +676,9 @@ static int replay_wal(persist_t* p, uint64_t from_lsn)
if (hn == 0) if (hn == 0)
break; /* clean end of segment */ break; /* clean end of segment */
if (hn < (ssize_t)sizeof(hdr)) { if (hn < (ssize_t)sizeof(hdr)) {
if (hn < 0) { if (hn < 0)
fprintf(stderr, WARN("persist_recover: read error in %s at offset %u: %s",
"persist_recover: WARNING: read error in %s at offset %u: %s\n", seg_path, seg_off, strerror(errno));
seg_path, seg_off, strerror(errno));
}
break; /* truncated or pre-allocated zeros */ break; /* truncated or pre-allocated zeros */
} }
@ -701,18 +694,16 @@ static int replay_wal(persist_t* p, uint64_t from_lsn)
* e.g. across a segment boundary after checkpoint trim). */ * e.g. across a segment boundary after checkpoint trim). */
if (hdr.prev_crc != WAL_CRC_NONE && last_crc != WAL_CRC_NONE && if (hdr.prev_crc != WAL_CRC_NONE && last_crc != WAL_CRC_NONE &&
hdr.prev_crc != last_crc) { hdr.prev_crc != last_crc) {
fprintf(stderr, WARN("persist_recover: CRC chain break at start of %s "
"persist_recover: WARNING: CRC chain break at start of %s " "(prev_crc=%08x expected=%08x); stopping replay",
"(prev_crc=%08x expected=%08x); stopping replay\n", seg_path, hdr.prev_crc, last_crc);
seg_path, hdr.prev_crc, last_crc);
break; break;
} }
} else { } else {
if (hdr.prev_crc != last_crc) { if (hdr.prev_crc != last_crc) {
fprintf(stderr, WARN("persist_recover: CRC chain break in %s at offset %u "
"persist_recover: WARNING: CRC chain break in %s at offset %u " "(prev_crc=%08x expected=%08x); stopping replay at last good entry",
"(prev_crc=%08x expected=%08x); stopping replay at last good entry\n", seg_path, seg_off, hdr.prev_crc, last_crc);
seg_path, seg_off, hdr.prev_crc, last_crc);
break; break;
} }
} }
@ -730,9 +721,8 @@ static int replay_wal(persist_t* p, uint64_t from_lsn)
ssize_t pn = pread(fd, payload, hdr.payload_len, ssize_t pn = pread(fd, payload, hdr.payload_len,
(off_t)(seg_off + sizeof(hdr))); (off_t)(seg_off + sizeof(hdr)));
if (pn != (ssize_t)hdr.payload_len) { if (pn != (ssize_t)hdr.payload_len) {
fprintf(stderr, WARN("persist_recover: short payload read in %s at offset %u",
"persist_recover: WARNING: short payload read in %s at offset %u\n", seg_path, seg_off);
seg_path, seg_off);
free(payload); free(payload);
break; break;
} }
@ -740,10 +730,9 @@ static int replay_wal(persist_t* p, uint64_t from_lsn)
} }
if (hdr.crc != expected_crc) { if (hdr.crc != expected_crc) {
fprintf(stderr, WARN("persist_recover: CRC mismatch in %s at offset %u "
"persist_recover: WARNING: CRC mismatch in %s at offset %u " "(got=%08x expected=%08x); stopping replay",
"(got=%08x expected=%08x); stopping replay\n", seg_path, seg_off, hdr.crc, expected_crc);
seg_path, seg_off, hdr.crc, expected_crc);
free(payload); free(payload);
break; break;
} }
@ -770,9 +759,8 @@ static int replay_wal(persist_t* p, uint64_t from_lsn)
/* Unknown future entry types: log and skip */ /* Unknown future entry types: log and skip */
if (hdr.type > WAL_CHECKPOINT) { if (hdr.type > WAL_CHECKPOINT) {
fprintf(stderr, WARN("persist_recover: unknown WAL entry type %u at LSN %lu; skipping",
"persist_recover: WARNING: unknown WAL entry type %u at LSN %lu; skipping\n", hdr.type, (unsigned long)hdr.lsn);
hdr.type, (unsigned long)hdr.lsn);
free(payload); free(payload);
seg_off += (uint32_t)(sizeof(hdr) + hdr.payload_len); seg_off += (uint32_t)(sizeof(hdr) + hdr.payload_len);
continue; continue;
@ -834,9 +822,8 @@ int persist_recover(persist_t* p)
if (snap_lsn > 0 && snap_file[0] != '\0') { if (snap_lsn > 0 && snap_file[0] != '\0') {
int rc = load_snapshot(p, snap_file, snap_lsn); int rc = load_snapshot(p, snap_file, snap_lsn);
if (rc != 0) { if (rc != 0) {
fprintf(stderr, ERROR("persist_recover: failed to load snapshot %s: %s",
"persist_recover: failed to load snapshot %s: %s\n", snap_file, strerror(-rc));
snap_file, strerror(-rc));
return rc; return rc;
} }
/* checkpoint_lsn and current_lsn set by load_snapshot */ /* checkpoint_lsn and current_lsn set by load_snapshot */
@ -883,13 +870,12 @@ int persist_wal_sync_append(persist_t* p, uint32_t type,
void persist_log_entry_metadata(const wal_entry_hdr_t* hdr) void persist_log_entry_metadata(const wal_entry_hdr_t* hdr)
{ {
fprintf(stderr, TRACE("WAL entry: type=%u lsn=%lu term=%lu payload_len=%u crc=%08x",
"WAL entry: type=%u lsn=%lu term=%lu payload_len=%u crc=%08x\n", hdr->type,
hdr->type, (unsigned long)hdr->lsn,
(unsigned long)hdr->lsn, (unsigned long)hdr->term,
(unsigned long)hdr->term, hdr->payload_len,
hdr->payload_len, hdr->crc);
hdr->crc);
} }
/* ------------------------------------------------------------------ */ /* ------------------------------------------------------------------ */