Unix Technical Forum

Re: Strange issue with initdb on 8.0 and Solaris automounts

This is a discussion on Re: Strange issue with initdb on 8.0 and Solaris automounts within the pgsql Hackers forums, part of the PostgreSQL category; --> Kenneth Lareau <elessar@numenor.org> writes: > In message <22095.1106869848@sss.pgh.pa.us>, Tom Lane writes: >> Could you truss that and see what ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Hackers

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 04-11-2008, 03:30 AM
Tom Lane
 
Posts: n/a
Default Re: Strange issue with initdb on 8.0 and Solaris automounts

Kenneth Lareau <elessar@numenor.org> writes:
> In message <22095.1106869848@sss.pgh.pa.us>, Tom Lane writes:
>> Could you truss that and see what it does?


> Here's the relevant truss output from 'mkdir /software/postgresql-8.0.0'
> on my Solaris 9 system:


> 10832: mkdir("/software/postgresql-8.0.0", 0777) Err#89 ENOSYS
> 10832: stat64("/software/postgresql-8.0.0", 0xFFBFFA38) = 0


> It's doing the stat after the mkdir attempt it seems, and coming back
> with the correct response. Hmm, maybe I should look at the Solaris 8
> code for the mkdir command...


Well, the important point is that the stat does succeed. I'm not going
to put in anything as specific as a check for ENOSYS, but it seems
reasonable to try the stat first and mkdir only if stat fails.
I've applied the attached patch.

regards, tom lane

*** src/bin/initdb/initdb.c.orig Sat Jan 8 17:51:12 2005
--- src/bin/initdb/initdb.c Thu Jan 27 19:23:49 2005
***************
*** 476,481 ****
--- 476,484 ----
* this tries to build all the elements of a path to a directory a la mkdir -p
* we assume the path is in canonical form, i.e. uses / as the separator
* we also assume it isn't null.
+ *
+ * note that on failure, the path arg has been modified to show the particular
+ * directory level we had problems with.
*/
static int
mkdir_p(char *path, mode_t omode)
***************
*** 544,573 ****
}
if (last)
(void) umask(oumask);
! if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0)
{
! if (errno == EEXIST || errno == EISDIR)
! {
! if (stat(path, &sb) < 0)
! {
! retval = 1;
! break;
! }
! else if (!S_ISDIR(sb.st_mode))
! {
! if (last)
! errno = EEXIST;
! else
! errno = ENOTDIR;
! retval = 1;
! break;
! }
! }
! else
{
retval = 1;
break;
}
}
if (!last)
*p = '/';
--- 547,570 ----
}
if (last)
(void) umask(oumask);
!
! /* check for pre-existing directory; ok if it's a parent */
! if (stat(path, &sb) == 0)
{
! if (!S_ISDIR(sb.st_mode))
{
+ if (last)
+ errno = EEXIST;
+ else
+ errno = ENOTDIR;
retval = 1;
break;
}
+ }
+ else if (mkdir(path, last ? omode : S_IRWXU | S_IRWXG | S_IRWXO) < 0)
+ {
+ retval = 1;
+ break;
}
if (!last)
*p = '/';

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 11:22 PM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
www.UnixAdminTalk.com