]> granicus.if.org Git - postgresql/commitdiff
Fix bogus hashtable setup. (This code has quite a few other problems
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 5 May 2005 22:18:27 +0000 (22:18 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 5 May 2005 22:18:27 +0000 (22:18 +0000)
too, but that one is in my way at the moment.)

src/backend/utils/init/checkfiles.c

index 1c0a53c1d47eb9e4b78254b42dade6d62aaa9ee7..8ed5110d73c6da2bfb908053340ecd44023f4a0d 100644 (file)
@@ -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
  *     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 "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 "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 "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);
 }