{"record":{"id":"956609865ded8a80","repo":"neondatabase/neon","slug":"aborting","errorCode":null,"errorMessage":"aborting...\n","messagePattern":"aborting\\.\\.\\.\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"pgxn/neon/walproposer_compat.c","lineNumber":21,"sourceCode":" * This is needed to avoid linking to full postgres server installation. This file\n * is compiled as a part of libwalproposer static library.\n */\n#include \"postgres.h\"\n\n#include <stdio.h>\n\n#include \"libpq/pqformat.h\"\n#include \"miscadmin.h\"\n#include \"utils/datetime.h\"\n#include \"walproposer.h\"\n\nvoid\nExceptionalCondition(const char *conditionName,\n\t\t\t\t\t const char *fileName, int lineNumber)\n{\n\tfprintf(stderr, \"ExceptionalCondition: %s:%d: %s\\n\",\n\t\t\tfileName, lineNumber, conditionName);\n\tfprintf(stderr, \"aborting...\\n\");\n\texit(1);\n}\n\nvoid\npq_copymsgbytes(StringInfo msg, char *buf, int datalen)\n{\n\tif (datalen < 0 || datalen > (msg->len - msg->cursor))\n\t\tExceptionalCondition(\"insufficient data left in message\", __FILE__, __LINE__);\n\tmemcpy(buf, &msg->data[msg->cursor], datalen);\n\tmsg->cursor += datalen;\n}\n\n/* --------------------------------\n *\t\tpq_getmsgint\t- get a binary integer from a message buffer\n *\n *\t\tValues are treated as unsigned.\n * --------------------------------\n */","sourceCodeStart":3,"sourceCodeEnd":39,"githubUrl":"https://github.com/neondatabase/neon/blob/8f60b04da47ffefe0e52bda2440134b42874eb75/pgxn/neon/walproposer_compat.c#L3-L39","documentation":"The second line printed by ExceptionalCondition in the walproposer compat layer, emitted immediately before exit(1). It is not an independent failure: it always accompanies the preceding 'ExceptionalCondition: file:line: condition' line and only announces that the process is terminating because of it.","triggerScenarios":"Always printed together with the ExceptionalCondition message when any assertion in the standalone walproposer fails, e.g. malformed WAL protocol input to pq_copymsgbytes or unsupported integer widths in pq_getmsgint.","commonSituations":"Safekeeper or walproposer processes found dead with 'aborting...' as the last log line; the actionable detail is on the line above it.","solutions":["Locate the 'ExceptionalCondition:' line above this message and investigate that file:line","Restart the process via its supervisor after fixing the underlying cause","Check version compatibility between the walproposer peers and capture logs for a report"],"exampleFix":"# before: safekeeper run bare, dies silently after the assertion\n# after: supervised restart while the root cause is investigated\n[Service]\nRestart=on-failure\nRestartSec=5","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run safekeepers under systemd or Kubernetes with restart policies","Alert on the 'ExceptionalCondition' signature in logs before 'aborting...' appears","Keep peers version-matched to avoid assertion paths","Capture the file:line from the preceding log line in alert payloads"],"tags":["walproposer","safekeeper","crash","exit","c"],"backgroundTag":"assertion-failure","analyzedSha":"8f60b04da47ffefe0e52bda2440134b42874eb75","analyzedAt":"2026-08-16T23:39:28.135Z","schemaVersion":2},"datasetVersion":"2026-08-17T04:17:16.089Z"}