|
8 | 8 | * |
9 | 9 | * |
10 | 10 | * IDENTIFICATION |
11 | | - * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.194 2001/05/25 15:34:49 momjian Exp $ |
| 11 | + * $Header: /cvsroot/pgsql/src/backend/commands/vacuum.c,v 1.195 2001/05/25 15:45:32 momjian Exp $ |
12 | 12 | * |
13 | 13 | *------------------------------------------------------------------------- |
14 | 14 | */ |
15 | 15 | #include"postgres.h" |
16 | 16 |
|
17 | 17 | #include<fcntl.h> |
18 | 18 | #include<unistd.h> |
19 | | -#include<stdlib.h> |
20 | | -#include<limits.h> |
21 | 19 | #include<time.h> |
22 | 20 | #include<sys/time.h> |
23 | 21 | #include<sys/types.h> |
24 | | -#include<dirent.h> |
25 | 22 | #include<sys/file.h> |
26 | 23 | #include<sys/stat.h> |
27 | 24 |
|
|
33 | 30 |
|
34 | 31 | #include"access/genam.h" |
35 | 32 | #include"access/heapam.h" |
36 | | -#include"access/transam.h" |
37 | 33 | #include"access/xlog.h" |
38 | 34 | #include"catalog/catalog.h" |
39 | 35 | #include"catalog/catname.h" |
@@ -163,7 +159,6 @@ static intvac_cmp_vtlinks(const void *left, const void *right); |
163 | 159 | staticboolenough_space(VacPagevacpage,Sizelen); |
164 | 160 | staticvoidinit_rusage(VacRUsage*ru0); |
165 | 161 | staticchar*show_rusage(VacRUsage*ru0); |
166 | | -staticvoidreport_orphans(void); |
167 | 162 |
|
168 | 163 |
|
169 | 164 | /* |
@@ -241,10 +236,6 @@ vacuum(VacuumStmt *vacstmt) |
241 | 236 |
|
242 | 237 | /* clean up */ |
243 | 238 | vacuum_shutdown(); |
244 | | - |
245 | | -if (VacRelName==NULL) |
246 | | -report_orphans(); |
247 | | - |
248 | 239 | } |
249 | 240 |
|
250 | 241 | /* |
@@ -2655,74 +2646,3 @@ show_rusage(VacRUsage *ru0) |
2655 | 2646 |
|
2656 | 2647 | returnresult; |
2657 | 2648 | } |
2658 | | - |
2659 | | -/* |
2660 | | - * report_orphans |
2661 | | - * |
2662 | | - * Report files that are not referenced by any pg_class.relfilenode. |
2663 | | - * Could be caused by backend crash no cleaning up. |
2664 | | - */ |
2665 | | -staticvoid |
2666 | | -report_orphans(void) |
2667 | | -{ |
2668 | | -DIR*db_dir; |
2669 | | -structdirent*db_de; |
2670 | | -Relationrel; |
2671 | | -TupleDesctupdesc; |
2672 | | -HeapScanDescscan; |
2673 | | -HeapTupletuple; |
2674 | | -Oiddir_file_oid; |
2675 | | -Oidrel_file_oid; |
2676 | | -Datumd; |
2677 | | -booln; |
2678 | | -boolmatch_found; |
2679 | | -charcwd[MAXPGPATH]; |
2680 | | - |
2681 | | -getcwd(cwd,MAXPGPATH); |
2682 | | -db_dir=opendir("."); |
2683 | | -rel=heap_openr(RelationRelationName,AccessShareLock); |
2684 | | -Assert(db_dir); |
2685 | | - |
2686 | | -/* |
2687 | | - * Cycle through directory and check each file against |
2688 | | - * pg_class.relfilenode. |
2689 | | - * XXX This is O(n^2). Is it too slow? bjm |
2690 | | - */ |
2691 | | -while ((db_de=readdir(db_dir))!=NULL) |
2692 | | -{ |
2693 | | -if (strspn(db_de->d_name,"0123456789")== |
2694 | | -strlen(db_de->d_name)) |
2695 | | -{ |
2696 | | -dir_file_oid= (Oid)strtoul((db_de->d_name),NULL,10); |
2697 | | - |
2698 | | -if (dir_file_oid >=GetMinStartupOid()|| |
2699 | | -dir_file_oid <=BootstrapObjectIdData) |
2700 | | -continue; |
2701 | | - |
2702 | | -tupdesc=RelationGetDescr(rel); |
2703 | | - |
2704 | | -match_found= false; |
2705 | | -scan=heap_beginscan(rel, false,SnapshotNow,0, (ScanKey)NULL); |
2706 | | -while (HeapTupleIsValid(tuple=heap_getnext(scan,0))) |
2707 | | -{ |
2708 | | -d=heap_getattr(tuple,Anum_pg_class_relfilenode,tupdesc,&n); |
2709 | | -rel_file_oid=DatumGetObjectId(d); |
2710 | | -if (dir_file_oid==rel_file_oid) |
2711 | | -{ |
2712 | | -match_found= true; |
2713 | | -break; |
2714 | | -} |
2715 | | -} |
2716 | | -heap_endscan(scan); |
2717 | | -/* make sure there was no oid wrap-around during the scan */ |
2718 | | -if (!match_found&&dir_file_oid <=ShmemVariableCache->nextOid) |
2719 | | -elog(NOTICE, |
2720 | | -"Unreferenced file found in database directory:\n\t%s/%s", |
2721 | | -cwd,db_de->d_name); |
2722 | | -/* Maybe one day we can unlink too. bjm 2001-05-24 */ |
2723 | | -} |
2724 | | -} |
2725 | | - |
2726 | | -heap_close(rel,AccessShareLock); |
2727 | | -closedir(db_dir); |
2728 | | -} |