Fix bogus hashtable setup. (This code has quite a few other problems
authorTom Lane
Thu, 5 May 2005 22:18:27 +0000 (22:18 +0000)
committerTom Lane
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);
 }