Coda File System

Re: Replication on more than two servers?

From: Jan Harkes <jaharkes_at_cs.cmu.edu>
Date: Wed, 13 Oct 1999 10:08:39 -0400
On Wed, Oct 13, 1999 at 11:47:35AM +0200, Daniel Schmitt wrote:
> First try:
> 
> Coda 5.3.1, set up according to the instructions in the HowTo. I was
> unable to start a non-SCM server, while the SCM worked fine. This
> problem was mentioned several times before on this mailing list, for
> example on February 2nd and 3rd by Bernd Markgraf and on September
> 10th by Alex Fomin. After toying around with this for a while, I
> scrapped the installation and moved on to the...

I haven't been ably to reproduce any problems regarding the failing
non-SCM servers. But then again, maybe I'm doing something wrong.

Now to trap that bug....

> #6  0x400b17bb in qsort (b=0xbffff220, n=4294967294, s=4,
>     cmp=0x80d1500 <cmpHost(long *, long *)>) at msort.c:114

Strange, # elements to sort (n) = 4294967294 (i.e. (unsigned long)-2)

> #7  0x80d157a in vsgent::vsgent (this=0x8207d28, vsgaddr=3758096644,
>     hosts=0xbffff220, nh=-2) at vsg.cc:67

Ok, passed in number of hosts (nh) = -2

> #8  0x80d1bc2 in InitVSGDB () at vsg.cc:213

related code fragment...
        int i = sscanf(string, "%lx %s %s %s %s %s %s %s %s\n",
                       &vsgaddr, Host[0], Host[1], 
                       Host[2], Host[3], Host[4], 
                       Host[5], Host[6], Host[7]);
        if (i == 0) break;
        /* number of hosts = i - 1 */
        for (int j = 0; j < i - 1; j++){
            he = gethostbyname(Host[j]);
            Haddr[j] = ntohl(*(unsigned long *)(he->h_addr));
        }
        vsgent *newve = new vsgent(vsgaddr, Haddr, i-1);

Ok, got it, the sscanf returns -1. Or EOF, which I would understand if
the function was fscanf, not with sscanf. Could this be new behaviour in
glibc2.1?

In any case this error isn't picked up correctly as a terminating
condition for the loop. Could you check whether adding or removing an
empty line at the end of /vice/db/VSGDB works as a temporary fix?

In any case the following change will probably fix the problem.

                       Host[2], Host[3], Host[4], 
                       Host[5], Host[6], Host[7]);
-        if (i == 0) break;
+        if (i < 2) break;     /* not enough fields read to create a vsg */
        /* number of hosts = i - 1 */
        for (int j = 0; j < i - 1; j++){

Jan
Received on 1999-10-13 10:09:47