Here is a patch that adds a Rendezvous GUC variable to set the
Rendezvous name.  Chris, would you please test this and let me know how
it works.

I know we are past cutoff, but I want to get Rendezvous completely
functional.  I didn't bother with conditionally including it in
postgresql.conf because we don't do that with other options that aren't
enabled by default, like SSL and Kerberos.

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

Chris Campbell wrote:
> On Wednesday, Jun 11, 2003, at 10:43 US/Eastern, Bruce Momjian wrote:
> 
> > Bruce Momjian wrote:
> >> Tom Lane wrote:
> >>> Bruce Momjian <[EMAIL PROTECTED]> writes:
> >>>> I also _didn't_ add the Rendezvous GUC variable, so we default to 
> >>>> the
> >>>> host name.  If there is need, we can add it later.
> >>>
> >>> How do you figure there is not need for it?  What about running more
> >>> than one postmaster at a time?
> >>
> >> No one brought up that idea, and Chris agreed we could try it without
> >> it.  Chris, is that an issue?  I see the port number in the Rendezvous
> >> function call:
> 
> Rendezvous advertises the port number of the service, yes, but the 
> service name itself (which is usually related to the host name) MUST be 
> unique. So if there are two postmasters running on the same machine, 
> the first one will be advertised, and when the second one tries to 
> register to be advertised, it will silently fail to register. It will 
> still work just fine as a postmaster process, but it won't be 
> advertised.
> 
> This is identical to the situation where there are two machines on the 
> same network with identical Rendezvous names -- the second one to 
> attempt to register a service with that name will silently fail.
> 
> Just to reassure you: nothing will break if the second postmaster fails 
> to register its service name -- it just won't be advertised. That's the 
> only consequence. There are no additional runtime costs, no strange log 
> messages, nothing like that.
> 
> I'd love to have that GUC variable so that the service name could be 
> configured...but I think that 99% of the people that will want to use 
> the Rendezvous support in PostgreSQL will only be running a single 
> instance of postmaster on a machine. Like you said, if people need the 
> ability to configure the service name, the GUC variable can be added 
> later. The way we're doing it now, Rendezvous will be enabled and the 
> postmaster will be advertised by default on systems that support it. I 
> like that. :) If we add the variable, then it won't be configured and 
> advertised by default (I'm assuming).
> 
> > Two more issues --- first, I changed 'pgsql' to 'postgresql' as the
> > service name, to match our registered TCP service name.  Second, if we
> > do add a GUC variable, it has to conditionally be included in
> > postgresql.conf.sample if Rendezvous is enabled.
> 
> For the first issue, "_postgresql._tcp" sounds great. For the second 
> one...is conditional inclusion in postgresql.conf.sample hard? Would it 
> suffice to put a "This option can only be configured on systems with 
> support for Rendezvous (ex: Darwin, Mac OS X)" comment above the 
> (commented out) line that configures the variable?
> 
> Thanks!
> 
> - Chris
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]
> 

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: doc/src/sgml/runtime.sgml
===================================================================
RCS file: /cvsroot/pgsql-server/doc/src/sgml/runtime.sgml,v
retrieving revision 1.193
diff -c -c -r1.193 runtime.sgml
*** doc/src/sgml/runtime.sgml   14 Jul 2003 20:00:22 -0000      1.193
--- doc/src/sgml/runtime.sgml   18 Jul 2003 20:43:38 -0000
***************
*** 732,737 ****
--- 732,747 ----
        </listitem>
       </varlistentry>
       
+      <varlistentry>
+       <term><varname>RENDEZVOUS_NAME</varname> (<type>string</type>)</term>
+       <listitem>
+        <para>
+         Specifies the Rendezvous broadcast name.  By default, the
+         local hostname is used.
+        </para>
+       </listitem>
+      </varlistentry>
+      
       </variablelist>
       </sect3>
       <sect3 id="runtime-config-connection-security">
Index: src/backend/postmaster/postmaster.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/postmaster/postmaster.c,v
retrieving revision 1.333
diff -c -c -r1.333 postmaster.c
*** src/backend/postmaster/postmaster.c 12 Jun 2003 07:36:51 -0000      1.333
--- src/backend/postmaster/postmaster.c 18 Jul 2003 20:43:42 -0000
***************
*** 210,215 ****
--- 210,217 ----
  bool          Log_connections = false;
  bool          Db_user_namespace = false;
  
+ char          *rendezvous_name = NULL;
+ 
  /* For FNCTL_NONBLOCK */
  #if defined(WIN32) || defined(__BEOS__)
  long ioctlsocket_ret;
***************
*** 756,772 ****
                                        "socket.");
                        }
                }
! #ifdef USE_RENDEZVOUS                    
!                 if (service_name != NULL)
!                 {
!                         DNSServiceRegistrationCreate(NULL,    /* default to hostname 
*/
!                                                      "_postgresql._tcp.",
!                                                      "",
!                                                      htonl(PostPortNumber),
!                                                      "",
!                                                      
(DNSServiceRegistrationReply)reg_reply,
!                                                      NULL);
!                 }
  #endif
        }
  
--- 758,775 ----
                                        "socket.");
                        }
                }
! #ifdef USE_RENDEZVOUS                                  
!                               if (service_name != NULL)
!                               {
!                                               
DNSServiceRegistrationCreate((rendezvous_name && strlen(rendezvous_name) > 0)) ?
!                                                                                      
                   rendezvous_name : NULL, /* default to hostname */
!                                                                                      
                  "_postgresql._tcp.",
!                                                                                      
                  "",
!                                                                                      
                  htonl(PostPortNumber),
!                                                                                      
                  "",
!                                                                                      
                  (DNSServiceRegistrationReply)reg_reply,
!                                                                                      
                  NULL);
!                               }
  #endif
        }
  
Index: src/backend/utils/misc/guc.c
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/misc/guc.c,v
retrieving revision 1.137
diff -c -c -r1.137 guc.c
*** src/backend/utils/misc/guc.c        15 Jul 2003 19:19:56 -0000      1.137
--- src/backend/utils/misc/guc.c        18 Jul 2003 20:43:47 -0000
***************
*** 1299,1304 ****
--- 1299,1313 ----
                PG_KRB_SRVTAB, NULL, NULL
        },
  
+       {
+               {"rendezvous_name", PGC_POSTMASTER, CONN_AUTH_SETTINGS,
+                       gettext_noop("The Rendezvous broadcast service name"),
+                       NULL
+               },
+               &rendezvous_name,
+               NULL /* defaults to local hostname */, NULL, NULL
+       },
+ 
        /* See main.c about why defaults for LC_foo are not all alike */
  
        {
Index: src/backend/utils/misc/postgresql.conf.sample
===================================================================
RCS file: /cvsroot/pgsql-server/src/backend/utils/misc/postgresql.conf.sample,v
retrieving revision 1.85
diff -c -c -r1.85 postgresql.conf.sample
*** src/backend/utils/misc/postgresql.conf.sample       18 Jul 2003 19:16:03 -0000     
 1.85
--- src/backend/utils/misc/postgresql.conf.sample       18 Jul 2003 20:43:47 -0000
***************
*** 38,43 ****
--- 38,44 ----
  #unix_socket_group = ''
  #unix_socket_permissions = 0777       # octal
  #virtual_host = ''
+ #rendezvous_name = ''         # defaults to local hostname
  
  # - Security & Authentication -
  
Index: src/include/tcop/tcopprot.h
===================================================================
RCS file: /cvsroot/pgsql-server/src/include/tcop/tcopprot.h,v
retrieving revision 1.57
diff -c -c -r1.57 tcopprot.h
*** src/include/tcop/tcopprot.h 5 May 2003 00:44:56 -0000       1.57
--- src/include/tcop/tcopprot.h 18 Jul 2003 20:43:48 -0000
***************
*** 32,37 ****
--- 32,38 ----
  extern bool log_hostname;
  extern bool LogSourcePort;
  extern DLLIMPORT const char *debug_query_string;
+ extern char *rendezvous_name;
  
  #ifndef BOOTSTRAP_INCLUDE
  
---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to