Coda File System

Re: Various problems and comments

From: Peter J. Braam <braam_at_cs.cmu.edu>
Date: Sun, 5 Jul 1998 21:05:43 -0400 (EDT)
Ben,

Thanks for your interest and also for your detailed reports.  I'll try to
answer a few of your points -- and then hand over to another member of the
group.

(Jan: could you follow up with Ben on the repair problem and maybe try to
reproduce it here for us? )

On Sun, 5 Jul 1998 bwoodard_at_cisco.com wrote:

> Excuse me if you get two emails, I might have sent an email to the
> wrong place before.
> 
> I think that there is something wrong with the ioctl interface to
> venus. There are a couple things that I just can't seem to get
> working:
> 
> 1) first of all I can't seem to set acl's. When I run "cfs sa" I get
> "Connection timed out" instantly back.
> 
> [bwoodard_at_trill repair]$ cfs sa /coda System:AnyUser  rl
> /coda: Connection timed out
> 

I think your server is down, or unreachable.  Try cfs checkservers.
However, I have noticed some strange things myself with disconnected ACLs
and I will ask Jan to look into it.



> I did a strace and the problem seems to be in this little bit of code:
> 
> open("/coda/.CONTROL", O_RDONLY)        = 3
> ioctl(3, 0x40145602, 0xbffffba0)        = 0
> close(3)                                = 0
> open("/coda/.CONTROL", O_RDONLY)        = 3
> ioctl(3, 0x40145601, 0xbffffba0)        = -1 ETIMEDOUT (Connection timed out)
> close(3)                                = 0
> 

FYI, /coda/.CONTROL is a non-existent file.  Our pioctl interface (used by
repair and cfs) does an ioctl on this file which is intercepted by the
kernel. 


> 2) I can't seem to repair anything:
> 

First of all the quick fix: restart venus with -init. This will wipe out
the local object and your problem is gone. However, it might be good to
see why this isn't working -- I'll ask Jan to follow up with you on this. 

> First of all in my coda console I am getting:
> 
> 14:17:46 Local inconsistent object at
> /coda/home/bwoodard/Mail1/Contacts, please check! 
> 
> So I look in 3.6.2 of the manual and it says to use repair but my
> experience seems a bit different than what is documented:
> 
> [bwoodard_at_trill coda-4.6.1]$ repair
> This repair tool can be used to manually repair server/server
> or local/global conflicts on files and directories.
> You will first need to do a "beginrepair" to start a repair
> session where messages about the nature of the conflict and
> the commands that should be used to repair the conflict will
> be displayed. Help message on individual commands can also be
> obtained by using the "help" facility. Finally, you can use the
> "endrepair" or "quit" to terminate the current repair session.
> repair > begin
> Pathname of object in conflict? []: /coda/home/bwoodard/Mail1/Contacts
>  ENABLEREPAIR: /coda/home/bwoodard/Mail1/Contacts/: No such file or directory
> repair >          
> 
> When I run a strace, I find that once again an ioctl is failing: 
> 
> open("/coda/.CONTROL", O_RDONLY)        = 3
> ioctl(3, 0x401456d3, 0xbffffbd8)        = 0
> close(3)                                = 0
> open("/coda/.CONTROL", O_RDONLY)        = 3
> ioctl(3, 0x401456c5, 0xbfff9980)        = 0
> close(3)                                = 0
> open("/coda/.CONTROL", O_RDONLY)        = 3
> ioctl(3, 0x401456c5, 0xbfff9980)        = 0
> close(3)                                = 0
> open("/coda/.CONTROL", O_RDONLY)        = 3
> ioctl(3, 0x401456c0, 0xbfffb224)        = -1 ENOENT (No such file or directory)
> close(3)                                = 0 
> 
> I suspect that the problem around repair.cc:beginrepair() around:
> 
> 
>     /* Obtain names of rw replicas */
>     vioc.out_size = (short)sizeof(space);
>     vioc.in_size = 0;
>     vioc.out = space;
>     bzero(space, (int)sizeof(space));
>     rc = pioctl(prefix, VIOC_ENABLEREPAIR, &vioc, 0);
>     if (rc < 0)
>         {
>         if (errno == EWOULDBLOCK)
>             {
>             printf("Repair in progress on volume at \"%s\"\n", prefix);
>             /* Print out Workstation/IP addr here --- Satya */
>             }
>         else repair_perror(" ENABLEREPAIR", prefix, errno); /* some other error */
>         repair_finish(repv);
>         return;
>         }
>     sprintf(repv->rodir, "%s", reppath);
>  
> but I don't understand enough about the way the code works to say
> more.
> 

> 3) (documentation) to be able to get codacon working, I needed to put
> my current IP address after it e.g. "codacon 127.0.0.1" or else it
> trys to bind to whatever IP address I booted up with. There isn't even
> a codacon man page to tell you this and it isn't listed in the
> manual. However, I am confused should I be watching a codacon or
> should I be watching /usr/coda/etc/console it seems to have more
> useful information in it?


You are right, there is no manual page for codacon and we will fix that.
Thanks for pointing that out. 


Codacon has different and often more useful information than Console which
is onl printing stderr.  We often watch both by doing tail -f
/usr/coda/etc/console & codacon

I'm confused that you have to give the localhost ip, since Venus binds to
the socket at INADDR_ANY.   Are you changing IP address _while_ venus is
running perhaps?   I think we would love that to work but i don't think
that it does.

> 
> -ben
> 
Received on 1998-07-05 21:07:59