Index: trunk/Nebulous/lib/Nebulous/Client.pm
===================================================================
--- trunk/Nebulous/lib/Nebulous/Client.pm	(revision 17658)
+++ trunk/Nebulous/lib/Nebulous/Client.pm	(revision 17693)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004-2008  Joshua Hoblitt
 #
-# $Id: Client.pm,v 1.48 2008-05-13 23:05:48 jhoblitt Exp $
+# $Id: Client.pm,v 1.49 2008-05-15 03:26:11 jhoblitt Exp $
 
 package Nebulous::Client;
@@ -38,5 +38,5 @@
                 type        => SCALAR,
                 optional    => 1,
-                default     => 'warn',
+                default     => 'fatal',
                 callbacks   => {
                     'is valid level' => sub {
@@ -115,5 +115,9 @@
     my $response = $self->{ 'server' }->create_object( $key, @params );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
+        $self->set_err($response->faultstring);
+        unless ($response->faultstring =~ /Duplicate entry/) {
+            $log->logdie("unhandled fault - ", $self->err);
+        }
+
         $log->debug( "leaving" );
 
@@ -151,5 +155,9 @@
     my $response = $self->{ 'server' }->create_object( $key, @params );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
+        $self->set_err($response->faultstring);
+        unless ($response->faultstring =~ /Duplicate entry/) {
+            $log->logdie("unhandled fault - ", $self->err);
+        }
+
         $log->debug( "leaving" );
 
@@ -204,8 +212,6 @@
     my $response = $self->{ 'server' }->replicate_object( $key, @params );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -347,13 +353,19 @@
         my $response = $self->{ 'server' }->lock_object( $key, $type );
         if ( $response->fault ) {
-            $log->error( $response->faultcode, " - ", $response->faultstring );
-            $log->debug( "leaving" );
-            
-            # don't bother to spin lock if the object doesn't exist
-            if ( $response->faultstring =~ /storage object does not exist/ ) {
+            $self->set_err($response->faultstring);
+
+            # "retry" means we couldn't get a lock because one was already held
+            # and we should try again
+            if ( $response->faultstring =~ /retry/ ) {
+                $log->debug( "failed to get a $type lock..." );
+                next;
+            }
+
+            if ($response->faultstring =~ /is valid object key/) {
+                $log->debug( "leaving" );
                 return;
             }
 
-            next;
+            $log->logdie("unhandled fault - ", $self->err);
         }
 
@@ -398,8 +410,34 @@
     my $response = $self->{ 'server' }->unlock_object( $key, $type );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+
+        # key doesn't exist
+        if ($response->faultstring =~ /is valid object key/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        # lock doesn't exist
+        if ($response->faultstring =~ /non-existant read lock/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        if ($response->faultstring =~ /non-existant write lock/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        if ($response->faultstring =~ /can not have a read lock under a write lock/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        if ($response->faultstring =~ /can not have a write lock under a read lock/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -417,5 +455,5 @@
 
 
-sub setxattr_object
+sub setxattr
 {
     my $self = shift;
@@ -442,9 +480,7 @@
 
     my $response = $self->{ 'server' }->setxattr_object( $key, $name, $value, $flags);
-    if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+    if ($response->fault) {
+        $self->set_err($response->faultstring);
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -455,5 +491,5 @@
 
 
-sub getxattr_object
+sub getxattr
 {
     my $self = shift;
@@ -472,8 +508,6 @@
     my $response = $self->{ 'server' }->getxattr_object( $key, $name );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -487,5 +521,5 @@
 
 
-sub listxattr_object
+sub listxattr
 {
     my $self = shift;
@@ -501,8 +535,6 @@
     my $response = $self->{ 'server' }->listxattr_object( $key );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -516,5 +548,5 @@
 
 
-sub removexattr_object
+sub removexattr
 {
     my $self = shift;
@@ -533,8 +565,6 @@
     my $response = $self->{ 'server' }->removexattr_object( $key, $name );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -548,5 +578,5 @@
     my $self = shift;
 
-    my ( $pattern ) = validate_pos( @_,
+    my @args = validate_pos( @_,
         {
             type        => SCALAR,
@@ -557,10 +587,14 @@
     $log->debug( "entered - @_" );
 
-    my $response = $self->{ 'server' }->find_objects( $pattern );
-    if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+    my $response = $self->{ 'server' }->find_objects( @args );
+    if ( $response->fault ) {
+        $self->set_err($response->faultstring);
+
+        if ($response->faultstring =~ /no keys found/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -575,6 +609,4 @@
     $log->debug( "leaving" );
 
-# note that no keys found is returned as []
-
     return $keys;
 }
@@ -598,8 +630,12 @@
     my $response = $self->{ 'server' }->find_instances( $key, @params );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+        # check to see if this failure is because $key doesn't exist
+        if ($response->faultstring =~ /is valid object key/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -607,8 +643,4 @@
 
     $log->debug( "server found: @$uris" );
-
-#    foreach my $path ( @{ $uris } ) {
-#        $path = _get_file_path( $path );
-#    }
 
     $log->debug( "leaving" );
@@ -806,8 +838,12 @@
     my $response = $self->{ 'server' }->rename_object( $key, $new_key );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+
+        if ($response->faultstring =~ /is valid object key/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -839,8 +875,12 @@
     my $response = $self->{ 'server' }->delete_instance( $uri );
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+
+        if ($response->faultstring =~ /no instance is associated with uri/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -867,8 +907,6 @@
     my $response = $self->{ 'server' }->mounts();
     if ( $response->fault ) {
-        $log->error( $response->faultcode, " - ", $response->faultstring );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -893,9 +931,11 @@
     my $response = $self->{ 'server' }->stat_object( $key );
     if ( $response->fault ) {
-        $self->set_err( $response->faultcode, " - ", $response->faultstring );
-        $log->error( $self->err );
-        $log->debug( "leaving" );
-
-        return;
+        $self->set_err($response->faultstring);
+        if ($response->faultstring =~ /is valid object key/) {
+            $log->debug( "leaving" );
+            return;
+        }
+
+        $log->logdie("unhandled fault - ", $self->err);
     }
 
@@ -904,10 +944,4 @@
     my $stats = $response->result;
 
-    # SOAP can't actually send back a perl "undef" so what we get is an empty
-    # string to indicate the key doesn't exist but there is no error.
-    if ($stats eq "") {
-        $stats = undef;
-    }
-
     $log->debug( "leaving" );
 
@@ -926,5 +960,10 @@
     my $self = shift;
 
-    $self->{ 'err' } = shift;
+    my $err_string = shift;
+
+    $self->{ 'err' } = $err_string;
+
+    local $Log::Log4perl::caller_depth += 1;
+    $log->error($err_string);
 
     return $self;
