added "u" before uid for create_user
[cloudstore.git] / lib / CloudStore / API.pm
index a166b74..1b4b27a 100644 (file)
@@ -35,7 +35,7 @@ sub new {
 
 sub slice_dir_port {
        my ($self,$slice) = @_;
-       my ( undef, $dir, $port, undef ) = getgrnam($slice);
+       my ( undef, $dir, $port, undef ) = getgrnam($slice) || die "getgrnam $slice: $!";
        warn "# slice_dir_port $slice = $dir $port\n";
        return ( $dir, $port );
 }
@@ -77,8 +77,12 @@ sub create_user {
        close($fh);
 
        my $slice = $ENV{SLICE} || 's1';
+       $slice =~ s{/.+/(\w+)$}{$1};
        my ( $dir, $port ) = $self->slice_dir_port( $slice );
 
+       $dir ||= $ENV{SLICE};
+       $port ||= 6501;
+
        if ( ! $found ) {
                $max_uid++;
                $dir .= "/$max_uid";
@@ -101,7 +105,7 @@ sub create_user {
        # FIXME update quota only on create?
        $self->gearman_do( $self->dir2gearman( $dir, 'quota', 'set' ) => "$found $new_quota" );
 
-       return $found;
+       return 'u' . $found;
 }
 
 sub mkbasepath {
@@ -221,6 +225,7 @@ sub send_file {
        if ( $ok ) {
                $self->append( $t, 'recv', $size, $f->{uid}, $t_path );
                $self->append_meta('md5sum', $t, $md5 => $t_path ) if $md5; # md5sum for received files! FIXME -- cross-slice md5
+               $self->refresh_file_list( $t );
        }
 
        return $size;
@@ -245,6 +250,8 @@ sub rename_file {
        $self->append_meta('md5sum', $user, 'rename' => $from );
        $self->append_meta('md5sum', $user, $md5 => $from );
 
+       $self->refresh_file_list( $user );
+
        return $ok;
 }
 
@@ -280,6 +287,8 @@ sub delete {
        $self->append( $user, 'delete', -$deleted_size, $user->{uid}, $path );
        $self->append_meta('md5sum', $user, 'delete', $path );
 
+       $self->refresh_file_list( $user );
+
        return $full_path;
 }
 
@@ -291,4 +300,14 @@ sub file_size {
        return -s $full_path;
 }
 
+sub refresh_file_list {
+       my ( $self, $user ) = @_;
+       $user = $self->user_info($user) unless ref $user eq 'HASH';
+       my $full_path = "$user->{dir}/.meta/files";
+       if ( -e $full_path ) {
+               warn "## refresh_file_list $full_path";
+               unlink $full_path;
+       }
+}
+
 1;