Applied. (Thanks (to me). :-)) ---------------------------------------------------------------------------
Bruce Momjian wrote: > Bruce Momjian wrote: > > Tom Lane wrote: > > > Bruce Momjian <pgman@candle.pha.pa.us> writes: > > > > I have fixed the code to properly remove *.backup files from the > > > > /pg_xlog directory once they are archived. > > > > > > I do not actually think that this is a good idea. The .backup files are > > > not large and they are pretty critical info --- so having multiple > > > copies of them seems like a good idea. We don't auto-remove timeline > > > history files either, for the same reason. > > > > I realize the files are small, but the number of entries in the > > directory might get pretty large. I am also worried about folks > > realizing we are not cleaning out those directories and mucking in there > > when they shouldn't --- I already got a private email asking why there > > are so many files in there and can they be cleared out. In fact, the > > archive_status/ directory also keeps *.done files for the backup files. > > > > We knowe we have archived the *.backup files. Are these files any use > > if we can't get the archive files restored? > > > > OK, how about if we do this cleanup when we do pg_stop_backup() so we > > delete any previous *.backup files, rather than do it as part of > > checkpoint. > > OK, new version that removes old backup files only when pg_stop_backup() > is run. This way the current backup file will always be in pg_xlog/. > > -- > Bruce Momjian | http://candle.pha.pa.us > pgman@candle.pha.pa.us | (610) 359-1001 > + If your life is a hard drive, | 13 Roberts Road > + Christ can be your backup. | Newtown Square, Pennsylvania 19073 > Index: src/backend/access/transam/xlog.c > =================================================================== > RCS file: /cvsroot/pgsql/src/backend/access/transam/xlog.c,v > retrieving revision 1.198 > diff -c -c -r1.198 xlog.c > *** src/backend/access/transam/xlog.c 8 Jun 2005 15:50:26 -0000 1.198 > --- src/backend/access/transam/xlog.c 9 Jun 2005 14:52:11 -0000 > *************** > *** 450,455 **** > --- 450,456 ---- > static int PreallocXlogFiles(XLogRecPtr endptr); > static void MoveOfflineLogs(uint32 log, uint32 seg, XLogRecPtr endptr, > int *nsegsremoved, int > *nsegsrecycled); > + static void RemoveOldBackupHistory(void); > static XLogRecord *ReadRecord(XLogRecPtr *RecPtr, int emode); > static bool ValidXLOGHeader(XLogPageHeader hdr, int emode); > static XLogRecord *ReadCheckpointRecord(XLogRecPtr RecPtr, int whichChkpt); > *************** > *** 2356,2361 **** > --- 2357,2417 ---- > } > > /* > + * Remove previous backup history files > + */ > + static void > + RemoveOldBackupHistory(void) > + { > + DIR *xldir; > + struct dirent *xlde; > + char path[MAXPGPATH]; > + > + xldir = AllocateDir(XLogDir); > + if (xldir == NULL) > + ereport(ERROR, > + (errcode_for_file_access(), > + errmsg("could not open transaction log directory > \"%s\": %m", > + XLogDir))); > + > + errno = 0; > + while ((xlde = readdir(xldir)) != NULL) > + { > + if (strlen(xlde->d_name) > 24 && > + strspn(xlde->d_name, "0123456789ABCDEF") == 24 && > + strcmp(xlde->d_name + strlen(xlde->d_name) - > strlen(".backup"), > + ".backup") == 0) > + { > + /* Remove any *.backup files that have been archived. */ > + if (!XLogArchivingActive() || > XLogArchiveIsDone(xlde->d_name)) > + { > + ereport(DEBUG2, > + (errmsg("removing transaction log > backup history file \"%s\"", > + xlde->d_name))); > + snprintf(path, MAXPGPATH, "%s/%s", XLogDir, > xlde->d_name); > + unlink(path); > + XLogArchiveCleanup(xlde->d_name); > + } > + } > + errno = 0; > + } > + #ifdef WIN32 > + > + /* > + * This fix is in mingw cvs (runtime/mingwex/dirent.c rev 1.4), but > + * not in released version > + */ > + if (GetLastError() == ERROR_NO_MORE_FILES) > + errno = 0; > + #endif > + if (errno) > + ereport(ERROR, > + (errcode_for_file_access(), > + errmsg("could not read transaction log directory > \"%s\": %m", > + XLogDir))); > + FreeDir(xldir); > + } > + > + /* > * Restore the backup blocks present in an XLOG record, if any. > * > * We assume all of the record has been read into memory at *record. > *************** > *** 5737,5742 **** > --- 5793,5800 ---- > errmsg("could not remove file \"%s\": %m", > labelfilepath))); > > + RemoveOldBackupHistory(); > + > /* > * Notify archiver that history file may be archived immediately > */ > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to [EMAIL PROTECTED]) -- Bruce Momjian | http://candle.pha.pa.us pgman@candle.pha.pa.us | (610) 359-1001 + If your life is a hard drive, | 13 Roberts Road + Christ can be your backup. | Newtown Square, Pennsylvania 19073 ---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]