Coda File System

Re: Coda Visualization Tool

From: Greg Troxel <gdt_at_ir.bbn.com>
Date: 29 Nov 2001 09:57:56 -0500
[on codalist particularly for portability suggestion #4, but also #3,
which I think really should be part of the coda distribution, even if
gui tools that use it aren't.]

I'm glad you did this; thanks for making the class project code
available.  I hope my comments are helpful.

I tried to build this on FreeBSD (4-stable, more or less).  I had
several problems.  Basically the code uses ulong, and the Makefile
seems slightly broken.  Patches at end for what I did to get it to
compile.

Build/portability suggestions:

1. Use autoconf/automake, to autodetect posix threads etc, and provide
   install targets, --prefix and so on.

2. stick to standard types.  Since this uses gtk, you might use
   guint32 instead of ulong.  (I'm guessing that ulong is usage
   specific to GNU/Linux.)  (I'm glad you used gtk - that part
   required zero effort on my part, and the gtk-config script worked
   as intended.)

3. Structurally, it would be really cool to see a library which can
   fetch info, separately from the GUI processing, so scripting
   languages, etc. could use this same back-end code.  It looks like
   some of this separation is present, but I think it would be good to
   have a more explicit separation, and even build a library (with
   libtool, perhaps) for this part.

4. There are venus ioctl and rpc2 defs in the source tree.  I realize
   that these are files that rpc2 and coda might not install in
   $(prefix)/include, but this is a sign that those pacakges perhaps
   should install include files for those things that are 

5. I got lots of warnings when compiling.  If this compiles cleanly on
   GNU/Linux, I can do this again and mail them to you, but I'd
   recommend doing builds on a least one BSD variant as well.

Usability

1.  The program appears to have a serious file descriptor leakage
    problem.  After about 10-20 minutes, I started getting 'too many
    open files in system' messages.  I couldn't even run 'killall
    codavis'.  Fortunately I had some bloatware running, and exiting
    that and typeing !k<ret> quickly let me win the race for file
    descriptors.

2.  I set up with one volume, and (I think - I don't want to run this
    again until the fd leak is fixed) got a blue ? for status.
    Tooltips showed me #cml entries, which was nice.  But I didn't get
    any obvious visual feedback on whether cml was =0 or not, etc.  (I
    was write-disconnected the whole time.)  The README doesn't
    explain the designed behavior - I'm not sure what was intended.
    Having to mouse over the GUI IMHO defeats the purpose.


        Greg Troxel <gdt_at_ir.bbn.com>


--- codavis/src/af.h    Thu Nov 29 00:34:16 2001
+++ codavis.build/src/af.h      Thu Nov 29 09:38:01 2001
@@ -14,6 +14,8 @@
 #define __AF_H__
 
 #include <sys/types.h>
+typedef unsigned long ulong;
+
 #include <sys/stat.h>
 #include <unistd.h>
 #include <stdlib.h>



--- codavis/src/Makefile        Wed Nov 28 18:06:39 2001
+++ codavis.build/src/Makefile  Thu Nov 29 09:28:26 2001
@@ -18,7 +18,7 @@
 #USER_LINK_FLAGS = -lpthread
 #endif
 
-USER_LINK_FLAGS = -lpthread
+USER_LINK_FLAGS = -pthread
 
 #GTK_INC_FLAGS =  -I/usr/include -DNEED_GNOMESUPPORT_H -I/usr/include/gtk-1.2 -I/usr/include/glib-1.2 -I/usr/lib/glib/include -I/usr/X11R6/include
 #GTK_LINK_FLAGS = -L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -lart_lgpl -lgdk_imlib -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm -lgthread
@@ -45,7 +45,7 @@
        $(CC) $(CPPFLAGS) $(CC_FLAGS) -c $(@:%.o=%.c)
 
 $(CODAVIS_ALL): $(CODAVIS_OBJS)
-       $(LINK_USER) -o $@ $(CODAVIS_OBJS) $(GTK_LINK_FLAGS)
+       $(CC) $(LINK_USER) -o $@ $(CODAVIS_OBJS) $(GTK_LINK_FLAGS)
 %.o: %.c
        $(CC) $(CPPFLAGS) $(CC_FLAGS) -c $(@:%.o=%.c)
Received on 2001-11-29 09:57:58