Ralf,

I tried the same steps I tried on the Linux client:
1) cleared out the DB directory
2) added "%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private" to 
rpmmacros
3) ran: rpm --db-rebuild (ran to completion and was able to do an rpm -qa, which 
reported the gpg-pubkey)
4) removed "%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private" from 
rpmmacros
5) ran: rpm -qa and got the usual errors:
> rpm -qa
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /usr/psr.oit/solaris9/RPM/DB
no packages

6) re-added "%__dbi_cdb create cdb mpool mp_mmapsize=16Mb mp_size=1Mb private" to 
rpmmacros
7) ran: > rpm -Uvh openpkg-20031006-20031006.sparc64-solaris2.9-ups.rpm, and got:

Preparing...                ########################################### [100%]
        package openpkg-20031006-20031006 is intended for a solaris2.9 operating system

Again, this is one of the systems that all these packages were built on, using 
openpkg-1.3.0 and openpkg-1.3.1.
And uname -a reports:
> uname -a
SunOS verges.Princeton.EDU 5.9 Generic_112233-07 sun4u sparc SUNW,Sun-Blade-100

So unfortunately, I can't use rpm as is, without turning off the locks, even if its DB 
is supposedly correct.

And do you know why it is complaining about the os version here too?

Thanks,
       Dennis

-----Original Message-----
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Behalf Of Dennis McRitchie
Sent: Friday, October 17, 2003 3:42 PM
To: [EMAIL PROTECTED]
Subject: RE: Problems running openpkg-20031006-20031006 on Solaris and
Linux (was Two problems building/running openpkg-20031006-20031006 on
RedHat 9)


Ralf,

Thanks for the second test program. Interestingly, it gives no errors at all in a 
situation where rpm 4.2.1 is reporting
mmap EAGAIN errors.

All target files were on an NFS mounted filesystem, but this time the system is hosted 
by a RedHat 9 server (since out
usual Solaris 8 NFS system was running out of locks again). But the behavior is 
identical to the behavior when using the
Solaris NFS server, so I don't think that it is a factor right now.

Output from your test program, both before and after running rpm 4.2.1:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
> ./testlock2
open() -> 3, 0
fcntl() -> 0, 0
write() -> 8192, 0
mmap() -> ff3a0000, 0
munmap() -> 0, 0
fcntl() -> 0, 0
close() -> 0, 0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Partial output from rpm:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
15701:  stat64("/", 0xFFBFF698)                         = 0
15701:  stat64("/usr/", 0xFFBFF698)                     = 0
15701:  stat64("/usr/psr.oit/", 0xFFBFF698)             = 0
15701:  stat64("/usr/psr.oit/solaris9/", 0xFFBFF698)    = 0
15701:  stat64("/usr/psr.oit/solaris9/RPM/", 0xFFBFF698) = 0
15701:  stat64("/usr/psr.oit/solaris9/RPM/DB", 0xFFBFF698) = 0
15701:  access("/usr/psr.oit/solaris9/RPM/DB", 2)       = 0
15701:  stat64("/usr/psr.oit/solaris9/RPM/DB/__db.001", 0xFFBFF7C0) = 0
15701:  access("/usr/psr.oit/solaris9/RPM/DB/__db.001", 0) = 0
15701:  access("/usr/psr.oit/solaris9/RPM/DB/Packages", 0) = 0
15701:  stat("/usr/psr.oit/solaris9/RPM/DB/DB_CONFIG", 0xFFBFF3C8) Err#2 ENOENT
15701:  open("/usr/psr.oit/solaris9/RPM/DB/DB_CONFIG", O_RDONLY) Err#2 ENOENT
15701:  stat("/usr/psr.oit/solaris9/RPM/DB/__db.001", 0xFFBFF448) = 0
15701:  open("/usr/psr.oit/solaris9/RPM/DB/__db.001", O_RDWR|O_CREAT|O_EXCL, 0644) 
Err#17 EEXIST
15701:  open("/usr/psr.oit/solaris9/RPM/DB/__db.001", O_RDWR) = 3
15701:  fcntl(3, F_SETFD, 0x00000001)                   = 0
15701:  ioctl(3, 0x2000664C, 0x00000001)                = 0
15701:  fstat(3, 0xFFBFF4C0)                            = 0
15701:  open("/usr/psr.oit/solaris9/RPM/DB/__db.001", O_RDWR|O_CREAT, 0644) = 4
15701:  fcntl(4, F_SETFD, 0x00000001)                   = 0
15701:  ioctl(4, 0x2000664C, 0x00000001)                = 0
15701:  lseek(4, 0, SEEK_END)                           = 0
15701:  lseek(4, 0, SEEK_CUR)                           = 0
15701:  write(4, "\0\0\0\0\0\0\0\0\0\0\0\0".., 8192)    = 8192
15701:  mmap(0x00000000, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, 4, 0) Err#11 EAGAIN
15701:  fstat64(2, 0xFFBFE478)                          = 0
15701:  write(2, " r p m d b", 5)                       = 5
15701:  write(2, " :  ", 2)                             = 2
15701:  write(2, " m m a p :  ", 6)                     = 6
15701:  write(2, " R e s o u r c e   t e m".., 32)      = 32
15701:  write(2, "\n", 1)                               = 1
15701:  close(4)                                        = 0
15701:  close(3)                                        = 0
15701:  write(2, " e r r o r :  ", 7)                   = 7
15701:  write(2, " d b 4   e r r o r ( 1 1".., 65)      = 65
15701:  write(2, " e r r o r :  ", 7)                   = 7
15701:  write(2, " c a n n o t   o p e n  ".., 27)      = 27
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

So I changed your program to use "__db.001" as the filename to open, and lo and behold:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
> ./testlock2.db.001
open() -> 3, 0
fcntl() -> 0, 0
write() -> 8192, 0
mmap() -> ffffffff, 11
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(BTW, I had to change your prog to test for MAP_FAILED instead of NULL for mmap 
failure.)

So I saved and cleaned out the DB directory and ran rpm --db-build and got loads of 
EAGAINs:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
> truss -f -o/tmp/rpmdebug.build rpm --db-build
rpmdb: BUILDING NEW RPM DATABASE FROM SCRATCH (/usr/psr.oit/solaris9/RPM/DB)
rpmdb: removing (possibly existing) old RPM database DB files
rpmdb: creating new RPM database (built-in RPM procedure)
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
rpmdb: operating on new RPM database
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /usr/psr.oit/solaris9/RPM/DB
error: /usr/psr.oit/solaris9/etc/openpkg/openpkg.pgp: import failed.
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /usr/psr.oit/solaris9/RPM/DB
error: package gpg-pubkey-63c4cb9f-3c591eda is not installed
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages database in /usr/psr.oit/solaris9/RPM/DB
rpmdb: rebuilding new RPM database (built-in RPM procedure)
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index
rpmdb: making sure RPM database contains all possible DB files
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
db_load: mmap: Resource temporarily unavailable
rpmdb: rebuilding RPM database (built-in RPM procedure)
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index
rpmdb: performing read/write operation on RPM database
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /usr/psr.oit/solaris9/RPM/DB
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /usr/psr.oit/solaris9/RPM/DB
rpmdb: mmap: Resource temporarily unavailable
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /usr/psr.oit/solaris9/RPM/DB
error: /usr/psr.oit/solaris9/etc/openpkg/openpkg.pgp: import failed.
rpmdb: making sure RPM database files have consistent attributes
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

This is what the directory contains afterward:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
> ls -l
total 1152
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Basenames
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Conflictname
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Depends
-rw-r--r--   1 psr      psr        32768 Oct 17 15:29 Dirnames
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Filemd5s
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Group
-rw-r--r--   1 psr      psr        32768 Oct 17 15:29 Installtid
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Name
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Packages
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Providename
-rw-r--r--   1 psr      psr        32768 Oct 17 15:29 Provideversion
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Pubkeys
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Requirename
-rw-r--r--   1 psr      psr        32768 Oct 17 15:29 Requireversion
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Sha1header
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Sigmd5
-rw-r--r--   1 psr      psr        49152 Oct 17 15:29 Triggername
-rw-r--r--   1 psr      psr         8192 Oct 17 15:29 __db.001
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.002
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.003
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.004
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.005
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.006
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.007
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.008
-rw-r--r--   1 psr      psr            0 Oct 17 15:29 __db.009
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

And this is the first EAGAIN from the truss output. It looks a lot like the one before:
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
16417:  stat64("/", 0xFFBFF730)                         = 0
16417:  stat64("/usr/", 0xFFBFF730)                     = 0
16417:  stat64("/usr/psr.oit/", 0xFFBFF730)             = 0
16417:  stat64("/usr/psr.oit/solaris9/", 0xFFBFF730)    = 0
16417:  stat64("/usr/psr.oit/solaris9/RPM/", 0xFFBFF730) = 0
16417:  stat64("/usr/psr.oit/solaris9/RPM/DB", 0xFFBFF730) = 0
16417:  access("/usr/psr.oit/solaris9/RPM/DB", 2)       = 0
16417:  stat64("/usr/psr.oit/solaris9/RPM/DB/__db.001", 0xFFBFF858) Err#2 ENOENT
16417:  access("/usr/psr.oit/solaris9/RPM/DB/__db.001", 0) Err#2 ENOENT
16417:  stat("/usr/psr.oit/solaris9/RPM/DB/DB_CONFIG", 0xFFBFF460) Err#2 ENOENT
16417:  open("/usr/psr.oit/solaris9/RPM/DB/DB_CONFIG", O_RDONLY) Err#2 ENOENT
16417:  stat("/usr/psr.oit/solaris9/RPM/DB/__db.001", 0xFFBFF4E0) Err#2 ENOENT
16417:  open("/usr/psr.oit/solaris9/RPM/DB/__db.001", O_RDWR|O_CREAT|O_EXCL, 0644) = 3
16417:  fcntl(3, F_SETFD, 0x00000001)                   = 0
16417:  ioctl(3, 0x2000664C, 0x00000001)                = 0
16417:  open("/usr/psr.oit/solaris9/RPM/DB/__db.001", O_RDWR|O_CREAT, 0644) = 4
16417:  fcntl(4, F_SETFD, 0x00000001)                   = 0
16417:  ioctl(4, 0x2000664C, 0x00000001)                = 0
16417:  lseek(4, 0, SEEK_END)                           = 0
16417:  lseek(4, 0, SEEK_CUR)                           = 0
16417:  write(4, "\0\0\0\0\0\0\0\0\0\0\0\0".., 8192)    = 8192
16417:  mmap(0x00000000, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, 4, 0) Err#11 EAGAIN
16417:  fstat64(2, 0xFFBFE510)                          = 0
16417:  write(2, " r p m d b", 5)                       = 5
16417:  write(2, " :  ", 2)                             = 2
16417:  write(2, " m m a p :  ", 6)                     = 6
16417:  write(2, " R e s o u r c e   t e m".., 32)      = 32
16417:  write(2, "\n", 1)                               = 1
16417:  close(4)                                        = 0
16417:  close(3)                                        = 0
16417:  write(2, " e r r o r :  ", 7)                   = 7
16417:  write(2, " d b 4   e r r o r ( 1 1".., 65)      = 65
16417:  write(2, " e r r o r :  ", 7)                   = 7
16417:  write(2, " c a n n o t   o p e n  ".., 77)      = 77
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

At this point, your original test program still reports no problems in creating or 
opening an existing foo.db. But the
modified test program that opens __db.001 still reports an EAGAIN, even though 
__db.001 was just now created by
the --db-build process.

Any ideas as to what I could try next?

Thanks,
       Dennis

> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] Behalf Of Ralf S. Engelschall
> Sent: Friday, October 17, 2003 9:06 AM
> To: [EMAIL PROTECTED]
> Subject: Re: Problems running openpkg-20031006-20031006 on Solaris and
> Linux (was Two problems building/running openpkg-20031006-20031006 on
> RedHat 9)
>
>
> On Thu, Oct 16, 2003, Dennis McRitchie wrote:
>
> > 3) When I tried to tun "rpm --db-rebuild" on our Solaris 9 system, (as
> > alaways the DB files were on the NFS system), I got the same problem
> > as before: EAGAIN on the mmap calls. (Yet your test program still runs
> > successfully.) Stderr output is:
> > [...]
> > 9887:       open("/usr/psr.oit/solaris9/RPM/DB/__db.001", O_RDWR|O_CREAT, 0644) = 4
> > 9887:       fcntl(4, F_SETFD, 0x00000001)                   = 0
> > 9887:       ioctl(4, 0x2000664C, 0x00000001)                = 0
> > 9887:       lseek(4, 0, SEEK_END)                           = 0
> > 9887:       lseek(4, 0, SEEK_CUR)                           = 0
> > 9887:       write(4, "\0\0\0\0\0\0\0\0\0\0\0\0".., 8192)    = 8192
> > 9887:       mmap(0x00000000, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, 4, 0) Err#11 
> > EAGAIN
> > [...]
> > Any idea why this might still be happening even though your test
> > program seems to suggest that locking is working?
>
> Well, my test program is for the fcntl(2) call only. Your problem now
> is the failing mmap(2): EAGAIN on mmap(2) is something completely
> different. That's interesting. So, we're now at least one step further
> for your situation.
>
> So, next round: what about the following extended test program "foo.c"?
>
> -------------------------------------------------------------------
> #include <stdlib.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <string.h>
> #include <fcntl.h>
> #include <errno.h>
> #include <sys/types.h>
> #include <sys/mman.h>
>
> int main(int argc, char *argv[])
> {
>     int fd;
>     struct flock l;
>     int rv;
>     char buf[8192];
>     void *vp;
>
>     fd = open("foo.db", O_RDWR|O_CREAT, 0644);
>     printf("open() -> %d, %d\n", fd, fd == -1 ? errno : 0);
>     if (fd == -1) { exit(1); }
>
>     l.l_type   = F_WRLCK;
>     l.l_whence = SEEK_SET;
>     l.l_start  = 0;
>     l.l_len    = 0;
>     rv = fcntl(fd, F_SETLKW, &l);
>     printf("fcntl() -> %d, %d\n", rv, rv == -1 ? errno : 0);
>     if (rv == -1) { exit(1); }
>
>     memset(buf, 0, 8192);
>     rv = write(fd, buf, 8192);
>     printf("write() -> %d, %d\n", rv, rv == -1 ? errno : 0);
>     if (rv == -1) { exit(1); }
>
>     vp = mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
>     printf("mmap() -> %lx, %d\n", (unsigned long)vp, vp == NULL ? errno : 0);
>     if (vp == NULL) { exit(1); }
>
>     rv = munmap(vp, 8192);
>     printf("munmap() -> %d, %d\n", rv, rv == -1 ? errno : 0);
>     if (rv == -1) { exit(1); }
>
>     l.l_type = F_UNLCK;
>     rv = fcntl(fd, F_SETLKW, &l);
>     printf("fcntl() -> %d, %d\n", rv, rv == -1 ? errno : 0);
>     if (rv == -1) { exit(1); }
>
>     rv = close(fd);
>     printf("close() -> %d, %d\n", rv, rv == -1 ? errno : 0);
>     if (rv == -1) { exit(1); }
>
>     return 0;
> }
> -------------------------------------------------------------------
>
> What is the output when run on multiple systems while staying (with
> current working directory) on NFS, UFS and MFS/TEMPFS filesystems?
> Hopefully here we see the EAGAIN again...
>
>                                        Ralf S. Engelschall
>                                        [EMAIL PROTECTED]
>                                        www.engelschall.com
>
> ______________________________________________________________________
> The OpenPKG Project                                    www.openpkg.org
> User Communication List                      [EMAIL PROTECTED]
>

______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
User Communication List                      [EMAIL PROTECTED]

______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
User Communication List                      [EMAIL PROTECTED]

Reply via email to