Re: [HACKERS] Page OpaqueData - Mailing list pgsql-patches

From Bruce Momjian
Subject Re: [HACKERS] Page OpaqueData
Date
Msg-id 200207020618.g626IhG05016@candle.pha.pa.us
Whole thread Raw
In response to Re: [HACKERS] Page OpaqueData  (Manfred Koizar <mkoi-pg@aon.at>)
List pgsql-patches
Patch applied.  Thanks.

---------------------------------------------------------------------------


 Manfred Koizar wrote:
> On Mon, 24 Jun 2002 12:53:42 -0400, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> >the extra level of struct naming for pd_opaque has no obvious
> >usefulness.
> >
> >> [...] should I post a patch that puts pagesize directly into
> >> PageHeaderData?
> >
> >If you're so inclined.  Given that pd_opaque is hidden in those macros,
> >there wouldn't be much of any gain in readability either, so I haven't
> >worried about changing the declaration.
>
> Thanks for the clarification.  Here is the patch.  Not much gain, but at
> least it saves the next junior hacker from scratching his head ...
>
> Cordialmente
>  Manfredinho :-)
>
> PS: Please do not apply before "Page access" patch from 2002-06-20.
>
> diff -ru ../base/src/backend/access/hash/hashutil.c src/backend/access/hash/hashutil.c
> --- ../base/src/backend/access/hash/hashutil.c    2002-05-21 11:54:11.000000000 +0200
> +++ src/backend/access/hash/hashutil.c    2002-06-21 16:43:24.000000000 +0200
> @@ -131,13 +131,13 @@
>      HashPageOpaque opaque;
>
>      Assert(page);
> -    Assert(((PageHeader) (page))->pd_lower >= (sizeof(PageHeaderData) - sizeof(ItemIdData)));
> +    Assert(((PageHeader) (page))->pd_lower >= SizeOfPageHeaderData);
>  #if 1
>      Assert(((PageHeader) (page))->pd_upper <=
>             (BLCKSZ - MAXALIGN(sizeof(HashPageOpaqueData))));
>      Assert(((PageHeader) (page))->pd_special ==
>             (BLCKSZ - MAXALIGN(sizeof(HashPageOpaqueData))));
> -    Assert(((PageHeader) (page))->pd_opaque.od_pagesize == BLCKSZ);
> +    Assert(PageGetPageSize(page) == BLCKSZ);
>  #endif
>      if (flags)
>      {
> diff -ru ../base/src/include/storage/bufpage.h src/include/storage/bufpage.h
> --- ../base/src/include/storage/bufpage.h    2002-06-20 12:22:21.000000000 +0200
> +++ src/include/storage/bufpage.h    2002-06-21 16:38:17.000000000 +0200
> @@ -65,8 +65,7 @@
>   * byte-offset position, tuples can be physically shuffled on a page
>   * whenever the need arises.
>   *
> - * AM-generic per-page information is kept in the pd_opaque field of
> - * the PageHeaderData.    (Currently, only the page size is kept here.)
> + * AM-generic per-page information is kept in PageHeaderData.
>   *
>   * AM-specific per-page data (if any) is kept in the area marked "special
>   * space"; each AM has an "opaque" structure defined somewhere that is
> @@ -92,25 +91,18 @@
>
>
>  /*
> + * disk page organization
>   * space management information generic to any page
>   *
> - *        od_pagesize        - size in bytes.
> - *                          Minimum possible page size is perhaps 64B to fit
> - *                          page header, opaque space and a minimal tuple;
> - *                          of course, in reality you want it much bigger.
> - *                          On the high end, we can only support pages up
> - *                          to 32KB because lp_off/lp_len are 15 bits.
> - */
> -typedef struct OpaqueData
> -{
> -    uint16        od_pagesize;
> -} OpaqueData;
> -
> -typedef OpaqueData *Opaque;
> -
> -
> -/*
> - * disk page organization
> + *        pd_lower       - offset to start of free space.
> + *        pd_upper       - offset to end of free space.
> + *        pd_special     - offset to start of special space.
> + *        pd_pagesize    - size in bytes.
> + *                      Minimum possible page size is perhaps 64B to fit
> + *                      page header, opaque space and a minimal tuple;
> + *                      of course, in reality you want it much bigger.
> + *                      On the high end, we can only support pages up
> + *                      to 32KB because lp_off/lp_len are 15 bits.
>   */
>  typedef struct PageHeaderData
>  {
> @@ -124,7 +116,7 @@
>      LocationIndex pd_lower;        /* offset to start of free space */
>      LocationIndex pd_upper;        /* offset to end of free space */
>      LocationIndex pd_special;    /* offset to start of special space */
> -    OpaqueData    pd_opaque;        /* AM-generic information */
> +    uint16        pd_pagesize;
>      ItemIdData    pd_linp[1];        /* beginning of line pointer array */
>  } PageHeaderData;
>
> @@ -216,14 +208,14 @@
>   * however, it can be called on a page for which there is no buffer.
>   */
>  #define PageGetPageSize(page) \
> -    ((Size) ((PageHeader) (page))->pd_opaque.od_pagesize)
> +    ((Size) ((PageHeader) (page))->pd_pagesize)
>
>  /*
>   * PageSetPageSize
>   *        Sets the page size of a page.
>   */
>  #define PageSetPageSize(page, size) \
> -    (((PageHeader) (page))->pd_opaque.od_pagesize = (size))
> +    (((PageHeader) (page))->pd_pagesize = (size))
>
>  /* ----------------
>   *        page special data macros
>
> Servus
>  Manfred
>
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 5: Have you checked our extensive FAQ?
>
> http://www.postgresql.org/users-lounge/docs/faq.html
>
>
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026



pgsql-patches by date:

Previous
From: Bruce Momjian
Date:
Subject: Re: pg_dump: fix 2 memory leaks
Next
From: Bruce Momjian
Date:
Subject: Re: Domain coercions