Changeset: ab675d79f102 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ab675d79f102
Modified Files:
        sql/src/backends/monet5/merovingian/ChangeLog.Jun2010
        sql/src/backends/monet5/merovingian/merovingian_forkmserver.c
Branch: Jun2010
Log Message:

if the mapi_usock path is never going to work due to its length, just fall back 
to a regular TCP socket for communication (beware of the implicit performance 
difference based on the chosen prefix!)


diffs (45 lines):

diff -r 651a689b1500 -r ab675d79f102 
sql/src/backends/monet5/merovingian/ChangeLog.Jun2010
--- a/sql/src/backends/monet5/merovingian/ChangeLog.Jun2010     Mon Jul 26 
12:41:26 2010 +0200
+++ b/sql/src/backends/monet5/merovingian/ChangeLog.Jun2010     Mon Jul 26 
19:53:05 2010 +0200
@@ -1,9 +1,12 @@
 # ChangeLog file for sql/src/backends/monet5/merovingian
 # This file is updated with mchangelog
 
-  26 Jul 2010; Fabian Groffen <fab...@cwi.nl> merovingian.c, monetdb.c:
+  26 Jul 2010; Fabian Groffen <fab...@cwi.nl> merovingian.c,
+  merovingian_forkmserver.c, monetdb.c:
   On installs with (very) long prefixes, the UNIX domain sockets could get
   truncated, causing merovingian to become unavailable to monetdb and mclient.
+  Similarly, a fall back to a regular TCP socket for mapi connections is
+  used for forked mservers in this case.
 
   21 Jul 2010; Fabian Groffen <fab...@cwi.nl> merovingian.c:
   Really shutdown when an argument to merovingian was given, instead of
diff -r 651a689b1500 -r ab675d79f102 
sql/src/backends/monet5/merovingian/merovingian_forkmserver.c
--- a/sql/src/backends/monet5/merovingian/merovingian_forkmserver.c     Mon Jul 
26 12:41:26 2010 +0200
+++ b/sql/src/backends/monet5/merovingian/merovingian_forkmserver.c     Mon Jul 
26 19:53:05 2010 +0200
@@ -276,11 +276,21 @@
                argv[c++] = dbname;
                argv[c++] = "--set"; argv[c++] = muri;
                if (mydoproxy == 1) {
+                       struct sockaddr_un s; /* only for sizeof(s.sun_path) :( 
*/ (void)s;
                        argv[c++] = "--set"; argv[c++] = "mapi_open=false";
                        /* we "proxy", so we can just solely use UNIX domain 
sockets
-                        * internally */
-                       snprintf(port, 24, "mapi_port=0");
-                       snprintf(usock, 512, "mapi_usock=%s/.mapi.sock", 
(*stats)->path);
+                        * internally.  Before we hit our head, check if we can
+                        * actually use a UNIX socket (due to pathlength) */
+                       if (strlen((*stats)->path) + 11 < sizeof(s.sun_path)) {
+                               snprintf(port, 24, "mapi_port=0");
+                               snprintf(usock, 512, "mapi_usock=%s/.mapi.sock",
+                                               (*stats)->path);
+                       } else {
+                               argv[c++] = "--set"; argv[c++] = 
"mapi_autosense=true";
+                               /* for logic here, see comment below */
+                               snprintf(port, 24, "mapi_port=%d", _mero_port + 
1);
+                               snprintf(usock, 512, "mapi_usock=");
+                       }
                } else {
                        argv[c++] = "--set"; argv[c++] = "mapi_open=true";
                        argv[c++] = "--set"; argv[c++] = "mapi_autosense=true";
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to