Re: Patch to warn about oid/xid wraparound - Mailing list pgsql-hackers

From Bruce Momjian
Subject Re: Patch to warn about oid/xid wraparound
Date
Msg-id 200106131956.f5DJu7a13924@candle.pha.pa.us
Whole thread Raw
In response to Re: Patch to warn about oid/xid wraparound  (Lamar Owen <lamar.owen@wgcr.org>)
Responses Re: Patch to warn about oid/xid wraparound  (Peter Eisentraut <peter_e@gmx.net>)
List pgsql-hackers
> On Tuesday 12 June 2001 19:33, Bruce Momjian wrote:
> > Here is a patch that will warn you during VACUUM when you are within 75%
> > of oid/xid wraparound.
>
> > I will apply it if 7.2 has no solution to the wraparounds.
>
> Is this something a potential 7.1.3 release might need?  I consider this a
> bug workaround, actually.  Or even a feature patch against 7.1.x that people
> can download if they think they need it?
>
> As PostgreSQL gets used in bigger and bigger database installations, the
> wraparound problems become more and more likely.  And it's likely to be at
> least six months before 7.2beta, if the track record stays the same as it has
> the last three releases.

Here is an new patch that updates the percentage display when it is run,
rather than just displaying 75%.  I had to do the computation using
floats to prevent overflow.

Again, I will put this in 7.2 if we have no solution for rollover.

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
Index: src/backend/commands/vacuum.c
===================================================================
RCS file: /home/projects/pgsql/cvsroot/pgsql/src/backend/commands/vacuum.c,v
retrieving revision 1.195
diff -c -r1.195 vacuum.c
*** src/backend/commands/vacuum.c    2001/05/25 15:45:32    1.195
--- src/backend/commands/vacuum.c    2001/06/13 18:46:01
***************
*** 159,166 ****
  static bool enough_space(VacPage vacpage, Size len);
  static void init_rusage(VacRUsage *ru0);
  static char *show_rusage(VacRUsage *ru0);

-
  /*
   * Primary entry point for VACUUM and ANALYZE commands.
   */
--- 159,166 ----
  static bool enough_space(VacPage vacpage, Size len);
  static void init_rusage(VacRUsage *ru0);
  static char *show_rusage(VacRUsage *ru0);
+ static void check_limits(void);

  /*
   * Primary entry point for VACUUM and ANALYZE commands.
   */
***************
*** 236,241 ****
--- 236,242 ----

      /* clean up */
      vacuum_shutdown();
+     check_limits();
  }

  /*
***************
*** 2645,2648 ****
--- 2646,2674 ----
               (int) (ru1.tv.tv_usec - ru0->tv.tv_usec) / 10000);

      return result;
+ }
+
+ /*
+  *    check if we are near OID or XID wraparound
+  */
+ static void check_limits(void)
+ {
+     Oid nextOid;
+
+     /* If we are 75% to the limit, warn the user */
+     if (GetCurrentTransactionId() >
+         ~(TransactionId)0 - (~(TransactionId)0) / 4)
+         elog(NOTICE,"You are %.0f%% from the limit for transaction ids.\n"
+             "\t Dumping your databases, running initdb, and reloading will reset\n"
+             "\t the transaction id counter.",
+             GetCurrentTransactionId() - (float)(~(TransactionId)0) * 100);
+
+     /* If we are 75% to the limit, warn the user */
+     GetNewObjectId(&nextOid);
+     if (nextOid > ~(Oid)0 - (~(Oid)0) / 4)
+         elog(NOTICE,"You are %.0f%% from the limit for object ids.\n"
+             "\t If you are not using object ids as primary keys, dumping your\n"
+             "\t databases, running initdb, and reloading will reset\n"
+             "\t the oid counter.",
+             (float)nextOid / (float)~(Oid)0 * 100);
  }

pgsql-hackers by date:

Previous
From: Tom Lane
Date:
Subject: Re: create user problem
Next
From: Mike Cianflone
Date:
Subject: RE: vacuum