Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Postgres/src/backend/access/rmgrdesc/   (Postgres Database Version 18.4©)  Datei vom 11.4.2026 mit Größe 3 kB image not shown  

Quelle  standbydesc.c

  Sprache: C
 

/*-------------------------------------------------------------------------
 *
 * standbydesc.c
 *   rmgr descriptor routines for storage/ipc/standby.c
 *
 * Portions Copyright (c) 1996-2025, PostgreSQL Global Development Group
 * Portions Copyright (c) 1994, Regents of the University of California
 *
 *
 * IDENTIFICATION
 *   src/backend/access/rmgrdesc/standbydesc.c
 *
 *-------------------------------------------------------------------------
 */

#include "postgres.h"

#include "storage/standbydefs.h"

static void
standby_desc_running_xacts(StringInfo buf, xl_running_xacts *xlrec)
{
 int   i;

 appendStringInfo(buf, "nextXid %u latestCompletedXid %u oldestRunningXid %u",
      xlrec->nextXid,
      xlrec->latestCompletedXid,
      xlrec->oldestRunningXid);
 if (xlrec->xcnt > 0)
 {
  appendStringInfo(buf, "; %d xacts:", xlrec->xcnt);
  for (i = 0; i < xlrec->xcnt; i++)
   appendStringInfo(buf, " %u", xlrec->xids[i]);
 }

 if (xlrec->subxid_overflow)
  appendStringInfoString(buf, "; subxid overflowed");

 if (xlrec->subxcnt > 0)
 {
  appendStringInfo(buf, "; %d subxacts:", xlrec->subxcnt);
  for (i = 0; i < xlrec->subxcnt; i++)
   appendStringInfo(buf, " %u", xlrec->xids[xlrec->xcnt + i]);
 }
}

void
standby_desc(StringInfo buf, XLogReaderState *record)
{
 char    *rec = XLogRecGetData(record);
 uint8  info = XLogRecGetInfo(record) & ~XLR_INFO_MASK;

 if (info == XLOG_STANDBY_LOCK)
 {
  xl_standby_locks *xlrec = (xl_standby_locks *) rec;
  int   i;

  for (i = 0; i < xlrec->nlocks; i++)
   appendStringInfo(buf, "xid %u db %u rel %u ",
        xlrec->locks[i].xid, xlrec->locks[i].dbOid,
        xlrec->locks[i].relOid);
 }
 else if (info == XLOG_RUNNING_XACTS)
 {
  xl_running_xacts *xlrec = (xl_running_xacts *) rec;

  standby_desc_running_xacts(buf, xlrec);
 }
 else if (info == XLOG_INVALIDATIONS)
 {
  xl_invalidations *xlrec = (xl_invalidations *) rec;

  standby_desc_invalidations(buf, xlrec->nmsgs, xlrec->msgs,
           xlrec->dbId, xlrec->tsId,
           xlrec->relcacheInitFileInval);
 }
}

const char *
standby_identify(uint8 info)
{
 const char *id = NULL;

 switch (info & ~XLR_INFO_MASK)
 {
  case XLOG_STANDBY_LOCK:
   id = "LOCK";
   break;
  case XLOG_RUNNING_XACTS:
   id = "RUNNING_XACTS";
   break;
  case XLOG_INVALIDATIONS:
   id = "INVALIDATIONS";
   break;
 }

 return id;
}

/* also used by non-standby records having analogous invalidation fields */
void
standby_desc_invalidations(StringInfo buf,
         int nmsgs, SharedInvalidationMessage *msgs,
         Oid dbId, Oid tsId,
         bool relcacheInitFileInval)
{
 int   i;

 /* Do nothing if there are no invalidation messages */
 if (nmsgs <= 0)
  return;

 if (relcacheInitFileInval)
  appendStringInfo(buf, "; relcache init file inval dbid %u tsid %u",
       dbId, tsId);

 appendStringInfoString(buf, "; inval msgs:");
 for (i = 0; i < nmsgs; i++)
 {
  SharedInvalidationMessage *msg = &msgs[i];

  if (msg->id >= 0)
   appendStringInfo(buf, " catcache %d", msg->id);
  else if (msg->id == SHAREDINVALCATALOG_ID)
   appendStringInfo(buf, " catalog %u", msg->cat.catId);
  else if (msg->id == SHAREDINVALRELCACHE_ID)
   appendStringInfo(buf, " relcache %u", msg->rc.relId);
  /* not expected, but print something anyway */
  else if (msg->id == SHAREDINVALSMGR_ID)
   appendStringInfoString(buf, " smgr");
  /* not expected, but print something anyway */
  else if (msg->id == SHAREDINVALRELMAP_ID)
   appendStringInfo(buf, " relmap db %u", msg->rm.dbId);
  else if (msg->id == SHAREDINVALSNAPSHOT_ID)
   appendStringInfo(buf, " snapshot %u", msg->sn.relId);
  else if (msg->id == SHAREDINVALRELSYNC_ID)
   appendStringInfo(buf, " relsync %u", msg->rs.relid);
  else
   appendStringInfo(buf, " unrecognized id %d", msg->id);
 }
}

Messung V0.5 in Prozent
C=89 H=97 G=93

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet am  2026-08-08) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.