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,8 +160,7 @@ 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,9 +170,8 @@ 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,8 +558,7 @@ 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,9 +572,8 @@ 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,8 +662,7 @@ 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,17 +694,15 @@ 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,8 +721,7 @@ 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,9 +730,8 @@ 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,8 +759,7 @@ 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);
@ -834,8 +822,7 @@ 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;
} }
@ -883,8 +870,7 @@ 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,