cleanings
authorCédric Villemain <cedric.villemain.debian@gmail.com>
Wed, 23 Dec 2009 23:24:55 +0000 (00:24 +0100)
committerCédric Villemain <cedric.villemain.debian@gmail.com>
Wed, 23 Dec 2009 23:24:55 +0000 (00:24 +0100)
pgfincore.c
pgfincore.sql.in

index 74931506e4b9f7c90f260ed5745341ac182c04d8..b73cf1a2165ccb27c6d628ba3b345675ffd14a6f 100644 (file)
@@ -43,6 +43,7 @@ Datum pgsysconf(PG_FUNCTION_ARGS);
 Datum pgfincore(PG_FUNCTION_ARGS);
 static Datum pgmincore_file(char *filename, int writeStat, FunctionCallInfo fcinfo);
 static Datum pgfadvise_file(char *filename, int action, FunctionCallInfo fcinfo);
+static int pgfadv_snapshot(char *filename, int fd, int action);
 
 /*
  * pgsysconf
@@ -201,7 +202,8 @@ pgfincore(PG_FUNCTION_ARGS)
  * pgmincore_file handle the mmaping, mincore process (and access file, etc.)
  */
 static Datum
-pgmincore_file(char *filename, int writeStat, FunctionCallInfo fcinfo) {
+pgmincore_file(char *filename, int writeStat, FunctionCallInfo fcinfo)
+{
   HeapTuple    tuple;
   TupleDesc tupdesc;
   Datum                values[5];
@@ -360,7 +362,7 @@ pgfadvise_file(char *filename, int action, FunctionCallInfo fcinfo)
   // OS things
   int64 pageSize  = sysconf(_SC_PAGESIZE); /* Page size */
 
-  tupdesc = CreateTemplateTupleDesc(5, false);
+  tupdesc = CreateTemplateTupleDesc(4, false);
   TupleDescInitEntry(tupdesc, (AttrNumber) 1, "relpath",     TEXTOID, -1, 0);
   TupleDescInitEntry(tupdesc, (AttrNumber) 2, "block_size",  INT8OID, -1, 0);
   TupleDescInitEntry(tupdesc, (AttrNumber) 3, "block_disk",  INT8OID, -1, 0);
@@ -389,17 +391,7 @@ pgfadvise_file(char *filename, int action, FunctionCallInfo fcinfo)
        break;
        case 21 : /* FADVISE_WILLNEED from mincore file */
          elog(DEBUG1, "pgfadv_willneed: setting flag from file");
-         FILE       *f;
-         int blockNum=0;
-         unsigned int c;
-
-         f = fopen(strcat(filename,"_mincore") , "rb");
-         while ((c = fgetc(f)) != EOF) {
-                 if (c & 01)
-                       posix_fadvise(fd, (blockNum*pageSize), pageSize, POSIX_FADV_WILLNEED);
-                 blockNum++;
-         }
-         fclose(f);
+         pgfadv_snapshot(filename, fd, action);
        break;
        case 30 : /* FADVISE_DONTNEED */
          elog(DEBUG1, "pgfadv_dontneed: setting flag");
@@ -442,3 +434,31 @@ error:
   tuple = heap_form_tuple(tupdesc, values, nulls);
   return (HeapTupleGetDatum(tuple));
 }
+
+/*
+* pgfadv_snapshot
+* to handle work with _mincore files.
+*/
+static int
+pgfadv_snapshot(char *filename, int fd, int action)
+{
+  FILE       *f;
+  int blockNum=0;
+  unsigned int c;
+  // OS things
+  int64 pageSize  = sysconf(_SC_PAGESIZE); /* Page size */
+
+  switch (action)
+  {
+       case 21 : /* FADVISE_WILLNEED from mincore file */
+         f = fopen(strcat(filename,"_mincore") , "rb");
+         while ((c = fgetc(f)) != EOF) {
+                 if (c & 01)
+                       posix_fadvise(fd, (blockNum*pageSize), pageSize, POSIX_FADV_WILLNEED);
+                 blockNum++;
+         }
+         fclose(f);
+       break;
+  }
+  return 0;
+}
\ No newline at end of file
index acb729232928a041d4424335abfba4f65e85de6e..d05b78125e0e348cd11a8e093e664ee1c40a2e55 100644 (file)
@@ -42,7 +42,6 @@ pgfadv_willneed(IN regclass,
                                OUT relpath text,
                                OUT block_size bigint,
                                OUT block_disk bigint,
-                               OUT block_cache bigint,
                                OUT block_free bigint)
 RETURNS setof record
 AS 'SELECT pgfincore($1, ''main'', 20)'
@@ -53,7 +52,6 @@ pgfadv_willneed_snapshot(IN regclass,
                                OUT relpath text,
                                OUT block_size bigint,
                                OUT block_disk bigint,
-                               OUT block_cache bigint,
                                OUT block_free bigint)
 RETURNS setof record
 AS 'SELECT pgfincore($1, ''main'', 21)'
@@ -64,7 +62,6 @@ pgfadv_dontneed(IN regclass,
                                OUT relpath text,
                                OUT block_size bigint,
                                OUT block_disk bigint,
-                               OUT block_cache bigint,
                                OUT block_free bigint)
 RETURNS setof record
 AS 'SELECT pgfincore($1, ''main'', 30)'
@@ -75,7 +72,6 @@ pgfadv_normal(IN regclass,
                          OUT relpath text,
                          OUT block_size bigint,
                          OUT block_disk bigint,
-                         OUT block_cache bigint,
                          OUT block_free bigint)
 RETURNS setof record
 AS 'SELECT pgfincore($1, ''main'', 40)'
@@ -86,7 +82,6 @@ pgfadv_sequential(IN regclass,
                                  OUT relpath text,
                                  OUT block_size bigint,
                                  OUT block_disk bigint,
-                                 OUT block_cache bigint,
                                  OUT block_free bigint)
 RETURNS setof record
 AS 'SELECT pgfincore($1, ''main'', 50)'
@@ -97,7 +92,6 @@ pgfadv_random(IN regclass,
                          OUT relpath text,
                          OUT block_size bigint,
                          OUT block_disk bigint,
-                         OUT block_cache bigint,
                          OUT block_free bigint)
 RETURNS setof record
 AS 'SELECT pgfincore($1, ''main'', 60)'