rocksdb/port
Xingbo Wang 91f227d9be Add injected error log ring buffer for fault injection diagnostics (#14431)
Summary:
Add a circular ring buffer (InjectedErrorLog) to FaultInjectionTestFS that records the last 1000 injected errors. Each entry captures the timestamp, thread ID, FS API name with all arguments (file path, offset, buffer size, first 8 bytes of data in hex), and the injected error status. For example:

  Append("/path/035354.sst", size=4096, head=[1a 2b 3c ...]) -> IOError (Retryable): injected write error
  RenameFile("/path/tmp.sst", "/path/035355.sst") -> IOError: injected metadata write error
  Read(offset=16384, size=4096) -> IOError (Retryable): injected read error

The ring buffer is printed to a file automatically:
- On any fatal signal (SIGABRT, SIGSEGV, SIGTERM, SIGINT, SIGHUP, SIGFPE, SIGBUS, SIGILL, SIGQUIT, SIGXCPU, SIGXFSZ, SIGSYS) via a registered crash callback
- At the end of db_stress main(), for diagnostic visibility even when the test completes normally

This addresses a key debugging gap: when write fault injection causes secondary failures (e.g., the builder error propagation issue in T257612259), the injected errors were previously completely silent with no logging trail. The ring buffer provides the missing diagnostic context to correlate fault injection with downstream failures.

Changes:
- port/stack_trace.h/.cc: Add RegisterCrashCallback() API; extend InstallStackTraceHandler() to catch all catchable termination signals
- utilities/fault_injection_fs.h: Add InjectedErrorLog class with printf-style Record(), HexHead() for data bytes, and signal-safe PrintAll()
- utilities/fault_injection_fs.cc: Record full API arguments and error status at all 31 fault injection call sites
- db_stress_tool/db_stress_tool.cc: Register crash callback and print ring buffer at end of main()

Pull Request resolved: https://github.com/facebook/rocksdb/pull/14431

Reviewed By: hx235

Differential Revision: D95435430

Pulled By: xingbowang

fbshipit-source-id: 6c18e1b072044575d6c8c3f198070127b0f80608
2026-03-11 18:15:04 -07:00
..
win Compressor::CompressBlock API change and refactoring/improvement (#13805) 2025-07-31 08:39:56 -07:00
jemalloc_helper.h Reformat source files (#14331) 2026-02-13 11:56:22 -08:00
lang.h Refactor data block footer to reserve metadata bits for future features (#14332) 2026-02-17 17:28:54 -08:00
likely.h clang format files under port/ (#10849) 2022-10-24 16:56:01 -07:00
malloc.h Charge block cache for cache internal usage (#5797) 2019-09-16 15:26:21 -07:00
mmap.cc Fix compilation error using CLANG (#13864) 2025-08-11 15:15:26 -07:00
mmap.h More minor HCC refactoring + typed mmap (#11670) 2023-08-07 12:20:23 -07:00
port.h Add abort check to yield hook (#13164) 2024-11-27 16:45:59 -08:00
port_dirent.h clang format files under port/ (#10849) 2022-10-24 16:56:01 -07:00
port_example.h Remove obsolete compression code and some .h->.cc movement (#14325) 2026-02-13 11:18:05 -08:00
port_posix.cc Port codemod changes from fbcode/rocksdb (#13714) 2025-06-20 17:56:24 -07:00
port_posix.h Remove unnecessary, confusing 'extern' (#12300) 2024-01-29 10:38:08 -08:00
README reverting disastrous MOE commit, returning to r21 2011-04-19 23:11:15 +00:00
stack_trace.cc Add injected error log ring buffer for fault injection diagnostics (#14431) 2026-03-11 18:15:04 -07:00
stack_trace.h Add injected error log ring buffer for fault injection diagnostics (#14431) 2026-03-11 18:15:04 -07:00
sys_time.h clang format files under port/ (#10849) 2022-10-24 16:56:01 -07:00
util_logger.h Use EnvLogger instead of PosixLogger (#10436) 2022-08-01 14:37:18 -07:00
xpress.h Change RocksDB License 2017-07-15 16:11:23 -07:00

This directory contains interfaces and implementations that isolate the
rest of the package from platform details.

Code in the rest of the package includes "port.h" from this directory.
"port.h" in turn includes a platform specific "port_<platform>.h" file
that provides the platform specific implementation.

See port_posix.h for an example of what must be provided in a platform
specific header file.