Uh, this patch was never applied.  Do we want it?

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

On Thu, Jun 12, 2014 at 03:39:14PM +0200, Christoph Berg wrote:
> Re: Andres Freund 2014-06-12 <20140612094112.gz8...@alap3.anarazel.de>
> > > * Make initdb determine the best shm type for this platform and write
> > >   it into postgresql.conf as it does now.
> > > * If no dynamic_shared_memory_type is found in the config, default to
> > >   "none".
> > > * Modify the three identical error messages concerned about shm
> > >   segments to include the shm type instead of always just saying
> > >   "FATAL:  could not open shared memory segment"
> > > * Add a HINT to the POSIX error message:
> > >   "HINT: This might indicate that /dev/shm is not mounted, or its
> > >   permissions do not allow the database user to create files there"
> > 
> > Sounds like a sane plan to me.
> 
> Here are two patches, one that implements the annotated error
> messages, and one that selects none as default.
> 
> It might also make sense to add a Note that POSIX depends on /dev/shm,
> and also a Note that dynamic_shared_memory_type is not related to
> the shared_buffers shm segments, which I didn't include here.
> 
> Christoph
> -- 
> c...@df7cb.de | http://www.df7cb.de/

> diff --git a/src/backend/storage/ipc/dsm_impl.c 
> b/src/backend/storage/ipc/dsm_impl.c
> new file mode 100644
> index 0819641..780e3a5
> *** a/src/backend/storage/ipc/dsm_impl.c
> --- b/src/backend/storage/ipc/dsm_impl.c
> *************** dsm_impl_posix(dsm_op op, dsm_handle han
> *** 289,296 ****
>               if (errno != EEXIST)
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not open shared memory 
> segment \"%s\": %m",
> !                                                     name)));
>               return false;
>       }
>   
> --- 289,299 ----
>               if (errno != EEXIST)
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not open POSIX shared 
> memory segment \"%s\": %m",
> !                                                     name),
> !                                      errhint("This error usually means that 
> /dev/shm is not mounted, or its "
> !                                                      "permissions do not 
> allow the database user to create files "
> !                                                      "there.")));
>               return false;
>       }
>   
> *************** dsm_impl_posix(dsm_op op, dsm_handle han
> *** 313,319 ****
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not stat shared memory 
> segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> --- 316,322 ----
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not stat POSIX shared 
> memory segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> *************** dsm_impl_posix(dsm_op op, dsm_handle han
> *** 332,338 ****
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !              errmsg("could not resize shared memory segment %s to %zu 
> bytes: %m",
>                               name, request_size)));
>               return false;
>       }
> --- 335,341 ----
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !              errmsg("could not resize POSIX shared memory segment %s to %zu 
> bytes: %m",
>                               name, request_size)));
>               return false;
>       }
> *************** dsm_impl_posix(dsm_op op, dsm_handle han
> *** 358,364 ****
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> --- 361,367 ----
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap POSIX shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> *************** dsm_impl_posix(dsm_op op, dsm_handle han
> *** 382,388 ****
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map shared memory segment 
> \"%s\": %m",
>                                               name)));
>               return false;
>       }
> --- 385,391 ----
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map POSIX shared memory 
> segment \"%s\": %m",
>                                               name)));
>               return false;
>       }
> *************** dsm_impl_sysv(dsm_op op, dsm_handle hand
> *** 512,518 ****
>                               errno = save_errno;
>                               ereport(elevel,
>                                               
> (errcode_for_dynamic_shared_memory(),
> !                                              errmsg("could not get shared 
> memory segment: %m")));
>                       }
>                       return false;
>               }
> --- 515,521 ----
>                               errno = save_errno;
>                               ereport(elevel,
>                                               
> (errcode_for_dynamic_shared_memory(),
> !                                              errmsg("could not get System V 
> shared memory segment: %m")));
>                       }
>                       return false;
>               }
> *************** dsm_impl_sysv(dsm_op op, dsm_handle hand
> *** 530,536 ****
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> --- 533,539 ----
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap System V shared 
> memory segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> *************** dsm_impl_sysv(dsm_op op, dsm_handle hand
> *** 540,546 ****
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not remove shared memory 
> segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> --- 543,549 ----
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not remove System V shared 
> memory segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> *************** dsm_impl_sysv(dsm_op op, dsm_handle hand
> *** 556,562 ****
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not stat shared memory 
> segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> --- 559,565 ----
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not stat System V shared 
> memory segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> *************** dsm_impl_sysv(dsm_op op, dsm_handle hand
> *** 577,583 ****
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map shared memory segment 
> \"%s\": %m",
>                                               name)));
>               return false;
>       }
> --- 580,586 ----
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map System V shared memory 
> segment \"%s\": %m",
>                                               name)));
>               return false;
>       }
> *************** dsm_impl_windows(dsm_op op, dsm_handle h
> *** 645,651 ****
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> --- 648,654 ----
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap Windows shared 
> memory segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> *************** dsm_impl_windows(dsm_op op, dsm_handle h
> *** 655,661 ****
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not remove shared memory 
> segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> --- 658,664 ----
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not remove Windows shared 
> memory segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> *************** dsm_impl_windows(dsm_op op, dsm_handle h
> *** 691,697 ****
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not create shared memory 
> segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> --- 694,700 ----
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not create Windows shared 
> memory segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> *************** dsm_impl_windows(dsm_op op, dsm_handle h
> *** 718,724 ****
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not open shared memory 
> segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> --- 721,727 ----
>                       _dosmaperr(GetLastError());
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not open Windows shared 
> memory segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> *************** dsm_impl_windows(dsm_op op, dsm_handle h
> *** 739,745 ****
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map shared memory segment 
> \"%s\": %m",
>                                               name)));
>               return false;
>       }
> --- 742,748 ----
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map Windows shared memory 
> segment \"%s\": %m",
>                                               name)));
>               return false;
>       }
> *************** dsm_impl_windows(dsm_op op, dsm_handle h
> *** 763,769 ****
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not stat shared memory segment 
> \"%s\": %m",
>                                               name)));
>               return false;
>       }
> --- 766,772 ----
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not stat Windows shared memory 
> segment \"%s\": %m",
>                                               name)));
>               return false;
>       }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 808,814 ****
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> --- 811,817 ----
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap mmap shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 818,824 ****
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not remove shared memory 
> segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> --- 821,827 ----
>               {
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                               errmsg("could not remove mmap shared memory 
> segment \"%s\": %m",
>                                                name)));
>                       return false;
>               }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 832,838 ****
>               if (errno != EEXIST)
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not open shared memory 
> segment \"%s\": %m",
>                                                       name)));
>               return false;
>       }
> --- 835,841 ----
>               if (errno != EEXIST)
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not open mmap shared 
> memory segment \"%s\": %m",
>                                                       name)));
>               return false;
>       }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 856,862 ****
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not stat shared memory 
> segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> --- 859,865 ----
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not stat mmap shared 
> memory segment \"%s\": %m",
>                                                       name)));
>                       return false;
>               }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 875,881 ****
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !              errmsg("could not resize shared memory segment %s to %zu 
> bytes: %m",
>                               name, request_size)));
>               return false;
>       }
> --- 878,884 ----
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !              errmsg("could not resize mmap shared memory segment %s to %zu 
> bytes: %m",
>                               name, request_size)));
>               return false;
>       }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 923,929 ****
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not resize shared memory 
> segment %s to %zu bytes: %m",
>                                                       name, request_size)));
>                       return false;
>               }
> --- 926,932 ----
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                      errmsg("could not resize mmap shared 
> memory segment %s to %zu bytes: %m",
>                                                       name, request_size)));
>                       return false;
>               }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 950,956 ****
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> --- 953,959 ----
>   
>                       ereport(elevel,
>                                       (errcode_for_dynamic_shared_memory(),
> !                                errmsg("could not unmap mmap shared memory 
> segment \"%s\": %m",
>                                                 name)));
>                       return false;
>               }
> *************** dsm_impl_mmap(dsm_op op, dsm_handle hand
> *** 974,980 ****
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map shared memory segment 
> \"%s\": %m",
>                                               name)));
>               return false;
>       }
> --- 977,983 ----
>   
>               ereport(elevel,
>                               (errcode_for_dynamic_shared_memory(),
> !                              errmsg("could not map mmap shared memory 
> segment \"%s\": %m",
>                                               name)));
>               return false;
>       }

> diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml
> new file mode 100644
> index 697cf99..db52c77
> *** a/doc/src/sgml/config.sgml
> --- b/doc/src/sgml/config.sgml
> *************** include 'filename'
> *** 1416,1429 ****
>           <literal>windows</> (for Windows shared memory), <literal>mmap</>
>           (to simulate shared memory using memory-mapped files stored in the
>           data directory), and <literal>none</> (to disable this feature).
> !         Not all values are supported on all platforms; the first supported
> !         option is the default for that platform.  The use of the
> !         <literal>mmap</> option, which is not the default on any platform,
>           is generally discouraged because the operating system may write
>           modified pages back to disk repeatedly, increasing system I/O load;
>           however, it may be useful for debugging, when the
>           <literal>pg_dynshmem</> directory is stored on a RAM disk, or when
>           other shared memory facilities are not available.
>          </para>
>         </listitem>
>        </varlistentry>
> --- 1416,1432 ----
>           <literal>windows</> (for Windows shared memory), <literal>mmap</>
>           (to simulate shared memory using memory-mapped files stored in the
>           data directory), and <literal>none</> (to disable this feature).
> !         Not all values are supported on all platforms.
> !         The use of the <literal>mmap</> option
>           is generally discouraged because the operating system may write
>           modified pages back to disk repeatedly, increasing system I/O load;
>           however, it may be useful for debugging, when the
>           <literal>pg_dynshmem</> directory is stored on a RAM disk, or when
>           other shared memory facilities are not available.
> +         <application>initdb</> will select a suitable setting for the 
> system.
> +         The default, when not configured explicitely in
> +         <filename>postgresql.conf</>, is to disable the use of dynamic 
> shared
> +         memory.
>          </para>
>         </listitem>
>        </varlistentry>
> diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c
> new file mode 100644
> index 1d094f0..e73f6c1
> *** a/src/backend/utils/misc/guc.c
> --- b/src/backend/utils/misc/guc.c
> *************** static struct config_enum ConfigureNames
> *** 3453,3459 ****
>                       NULL
>               },
>               &dynamic_shared_memory_type,
> !             DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE, 
> dynamic_shared_memory_options,
>               NULL, NULL, NULL
>       },
>   
> --- 3453,3459 ----
>                       NULL
>               },
>               &dynamic_shared_memory_type,
> !             DSM_IMPL_NONE, dynamic_shared_memory_options,
>               NULL, NULL, NULL
>       },
>   
> diff --git a/src/include/storage/dsm_impl.h b/src/include/storage/dsm_impl.h
> new file mode 100644
> index 6e2a013..aa3487a
> *** a/src/include/storage/dsm_impl.h
> --- b/src/include/storage/dsm_impl.h
> ***************
> *** 26,41 ****
>    */
>   #ifdef WIN32
>   #define USE_DSM_WINDOWS
> - #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE          DSM_IMPL_WINDOWS
>   #else
>   #ifdef HAVE_SHM_OPEN
>   #define USE_DSM_POSIX
> - #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE          DSM_IMPL_POSIX
>   #endif
>   #define USE_DSM_SYSV
> - #ifndef DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE
> - #define DEFAULT_DYNAMIC_SHARED_MEMORY_TYPE          DSM_IMPL_SYSV
> - #endif
>   #define USE_DSM_MMAP
>   #endif
>   
> --- 26,36 ----

> 
> -- 
> Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers


-- 
  Bruce Momjian  <br...@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + Everyone has their own god. +


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to