Coda File System

odd repair problem

From: Greg Troxel <>
Date: Wed, 15 Aug 2001 09:35:21 -0400
I am running coda from cvs.  Last build on 2001-07-17.  I read the
diffs since then and don't see anything relevant.

I put a largish (200k) file into coda while disconnected, and made a
few mistakes, so I ended up naming it wrong and running mv twice.
Here is my CML:

Create  /coda/home/gdt/ELF-4
Chown   /coda/home/gdt/ELF-4 (owner = 0)
Chmod   /coda/home/gdt/ELF-4 (mode = 644)
Store   /coda/home/gdt/ELF-4 (length = 202597)
Rename  /coda/home/gdt/ELF-4 (to: /coda/home/gdt/FreeBSD/ELF-4/bpdksh-5.2.14.tgz)
Rename  /coda/home/gdt/FreeBSD/ELF-4/bpdksh-5.2.14.tgz (to: /coda/home/gdt/FreeBSD/ELF-4/pdksh-5.2.14.tgz)

I don't see why this should be a problem, as ~/ELF-4 doesn't exist,
and there was no file with ksh in the name in the real target
directory.  There are 45 other files there with different names.

When I reconnected (via a local lan hop and then 28.8 dialup), I found

  Status of volume 0x7f000001 (2130706433) named "u.gdt"
  Volume type is ReadWrite
  Connection State is WriteDisconnected
  Minimum quota is 0, maximum quota is unlimited
  Current blocks used are 362613
  The partition has 3208094 blocks available out of 3849596
  Write-back is disabled
  *** There are pending conflicts in this volume ***
  There are 6 CML entries pending for reintegration

Looking in ~/FreeBSD/ELF-4, I found a dangling conflict symlink

gdt gdt 786 ~/%co/FreeBSD/ELF-4 > l pdksh-5.2.14.tgz 
lr--r--r--  1 root  4294967294  27 Aug 15 09:16 pdksh-5.2.14.tgz -> @7f000001.ffffffff.00080011

I would expect this to be a local/global conflict (I only have one server)

Trying to repair, it seems to lose.

gdt gdt 787 ~/%co/FreeBSD/ELF-4 > 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 pdksh-5.2.14.tgz
VIOCGETVOLSTAT /coda/home/gdt/FreeBSD/ELF-4/pdksh-5.2.14.tgz/global failed
Could not allocate replica list
beginrepair failed.
repair > 
[6]+  Stopped                 repair

This is not too surprising, as there is no server state for this file.

gdt gdt 788 ~/%co/FreeBSD/ELF-4 > l pdksh-5.2.14.tgz 
total 198
lrw-r--r--  1 root  nobody      27 Aug 15 08:41 global -> @7f000001.00003796.00003c52
-rw-r--r--  1 root  nobody  202597 Aug 15 07:24 local

Now, repair won't let me discardlocal or replay the cml, since the
repair attempt fails.  I can 'cfs er' to get it back to the original state.

So, any clues as to what is wrong?

Why is this a conflict?

Is venus trying to compress the CML?  Strictly speaking, this is fuzzy
on semantics, since if someone else added a ~/ELF-4 file while I was
disconnected, then this should be a conflict, since my mistake would
have bashed it.

How can there be a conflict but not a conflict?  Note that there is no
conflict in the homedir.

Why can't venus apply the earlier steps of the CML?  Or if not, why
isn't there a conflict in my homedir?

As a minor issue, I am running with the following local patch, to get
around lossage with the 28.8 link where the bw estimate gets too big
and then I get timeouts.

RCS file: /coda-src/coda/coda-src/venus/,v
retrieving revision 4.74
diff -u -r4.74
---     2001/05/25 11:48:10     4.74
+++     2001/08/15 13:27:52
@@ -1392,6 +1392,9 @@
+    if ( bw > 2000 ) bw = 1999;
     *Bandwidth = bw;
     if (bw != oldbw) {
        MarinerLog("connection::bandwidth %s %d %d %d\n", name,bwmin,bw,bwmax);

But I'm pretty sure this is orthogonal to the conflict :-)
Received on 2001-08-15 09:35:26