mirror of
https://github.com/postgres/postgres.git
synced 2025-05-09 18:21:05 +03:00
Fix bogus hashtable setup. (This code has quite a few other problems
too, but that one is in my way at the moment.)
This commit is contained in:
parent
c2e729fa20
commit
6f1ca7e457
@ -1,7 +1,7 @@
|
||||
/*-------------------------------------------------------------------------
|
||||
*
|
||||
* checkfiles.c
|
||||
* support to clean up stale relation files on crash recovery
|
||||
* check for stale relation files during crash recovery
|
||||
*
|
||||
* If a backend crashes while in a transaction that has created or
|
||||
* deleted a relfilenode, a stale file can be left over in the data
|
||||
@ -14,24 +14,24 @@
|
||||
* files, and use the 'dirty' flag to determine if we should run this on
|
||||
* a clean startup.
|
||||
*
|
||||
* $PostgreSQL: pgsql/src/backend/utils/init/checkfiles.c,v 1.1 2005/05/02 18:26:53 momjian Exp $
|
||||
* $PostgreSQL: pgsql/src/backend/utils/init/checkfiles.c,v 1.2 2005/05/05 22:18:27 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include "storage/fd.h"
|
||||
|
||||
#include "utils/flatfiles.h"
|
||||
#include "miscadmin.h"
|
||||
#include "catalog/pg_tablespace.h"
|
||||
#include "catalog/catalog.h"
|
||||
#include "access/skey.h"
|
||||
#include "utils/fmgroids.h"
|
||||
#include "access/relscan.h"
|
||||
#include "access/heapam.h"
|
||||
#include "access/relscan.h"
|
||||
#include "access/skey.h"
|
||||
#include "catalog/catalog.h"
|
||||
#include "catalog/pg_tablespace.h"
|
||||
#include "miscadmin.h"
|
||||
#include "storage/fd.h"
|
||||
#include "utils/flatfiles.h"
|
||||
#include "utils/fmgroids.h"
|
||||
#include "utils/resowner.h"
|
||||
|
||||
|
||||
static void CheckStaleRelFilesFrom(Oid tablespaceoid, Oid dboid);
|
||||
static void CheckStaleRelFilesFromTablespace(Oid tablespaceoid);
|
||||
|
||||
@ -52,11 +52,6 @@ AllocateDirChecked(char *path)
|
||||
/*
|
||||
* Scan through all tablespaces for relations left over
|
||||
* by aborted transactions.
|
||||
*
|
||||
* For example, if a transaction issues
|
||||
* BEGIN; CREATE TABLE foobar ();
|
||||
* and then the backend crashes, the file is left in the
|
||||
* tablespace until CheckStaleRelFiles deletes it.
|
||||
*/
|
||||
void
|
||||
CheckStaleRelFiles(void)
|
||||
@ -125,31 +120,18 @@ CheckStaleRelFilesFrom(Oid tablespaceoid, Oid dboid)
|
||||
struct dirent *de;
|
||||
HASHCTL hashctl;
|
||||
HTAB *relfilenodeHash;
|
||||
MemoryContext mcxt;
|
||||
RelFileNode rnode;
|
||||
char *path;
|
||||
|
||||
/*
|
||||
* We create a private memory context so that we can easily deallocate the
|
||||
* hash table and its contents
|
||||
*/
|
||||
mcxt = AllocSetContextCreate(TopMemoryContext, "CheckStaleRelFiles",
|
||||
ALLOCSET_DEFAULT_MINSIZE,
|
||||
ALLOCSET_DEFAULT_INITSIZE,
|
||||
ALLOCSET_DEFAULT_MAXSIZE);
|
||||
|
||||
hashctl.hash = tag_hash;
|
||||
|
||||
/*
|
||||
* The entry contents is not used for anything, we just check if an oid is
|
||||
* in the hash table or not.
|
||||
*/
|
||||
hashctl.keysize = sizeof(Oid);
|
||||
hashctl.entrysize = 1;
|
||||
hashctl.hcxt = mcxt;
|
||||
hashctl.entrysize = sizeof(Oid);
|
||||
hashctl.hash = tag_hash;
|
||||
relfilenodeHash = hash_create("relfilenodeHash", 100, &hashctl,
|
||||
HASH_FUNCTION
|
||||
| HASH_ELEM | HASH_CONTEXT);
|
||||
HASH_FUNCTION | HASH_ELEM);
|
||||
|
||||
/* Read all relfilenodes from pg_class into the hash table */
|
||||
{
|
||||
@ -209,10 +191,9 @@ CheckStaleRelFilesFrom(Oid tablespaceoid, Oid dboid)
|
||||
rnode.relNode = relfilenode;
|
||||
|
||||
filepath = relpath(rnode);
|
||||
|
||||
ereport(LOG,
|
||||
(errcode_for_file_access(),
|
||||
errmsg("The table or index file \"%s\" is stale and can be safely removed",
|
||||
errmsg("table or index file \"%s\" is stale and can safely be removed",
|
||||
filepath)));
|
||||
pfree(filepath);
|
||||
}
|
||||
@ -221,5 +202,4 @@ CheckStaleRelFilesFrom(Oid tablespaceoid, Oid dboid)
|
||||
FreeDir(dirdesc);
|
||||
pfree(path);
|
||||
hash_destroy(relfilenodeHash);
|
||||
MemoryContextDelete(mcxt);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user