Coda File System

Re: doesn't work

From: Jan Harkes <>
Date: Fri, 25 Aug 2006 12:17:44 -0400
On Thu, Aug 24, 2006 at 10:53:56PM -0400, Sean Caron wrote:
> 22:43:18 VLDBLookup: VLDB_size unset. Calling VCheckVLDB()
> 22:43:18 VLDB_Lookup: cannot find "01000001"
> 22:43:18 Volume replica 1000001 doesn't exist!

I wouldn't be totally surprised if this isn't indirectly related to the
following code in venus,

    #if 1 /* XXX change this to hex after 5.3.9 servers are deployed */
	/* doesn't work as VLDB entries are still hashed by the old
	* volume-id representation */
	sprintf(volname, "%u", volid->Volume);
	sprintf(volname, "%08x", volid->Volume);

The backup program uses,

    int getReplica(repinfo_t *rep) {
        sprintf(volIdstr, "%08x", volId);

I guess the idea was to change the indexing from a decimal to a
hexadecimal representation. The initial sweep probably did %u -> %08x,
but then the Coda client broke and the change was reverted in the
client, but not in The following patch should fix that.

> and that's it. But yet, I created backup volumes, and they show up the VLDB:

You shouldn't have to create the backup volumes I think
already does the equivalent 'volutil lock ; volutil backup'. In fact it
prefers to do it that way because then it can lock all replicas
simultaneously and really get a consistent snapshot of the state of all
replicas of a volume.


diff --git a/coda-src/volutil/ b/coda-src/volutil/
index 01a5537..b94f79a 100644
--- a/coda-src/volutil/
+++ b/coda-src/volutil/
@@ -287,7 +287,7 @@ int getReplica(repinfo_t *rep) {
     VolumeId volId = rep->repvolId;
     rep->serverNum = 0;
-    sprintf(volIdstr, "%08x", volId);
+    sprintf(volIdstr, "%u", volId);
     vldbp = VLDBLookup(volIdstr);
     if (vldbp == NULL) {
 	LogMsg(0, 0, stdout, "Volume replica %x doesn't exist!\n", volId);
Received on 2006-08-25 12:19:57