~bluet/+junk/gaialbs-datastore-redis

« back to all changes in this revision

Viewing changes to Redis.pm

  • Committer: BlueT - Matthew Lien - 練喆明
  • Date: 2013-02-20 19:30:23 UTC
  • Revision ID: bluet@bluet.org-20130220193023-id8qpwx010oe05fa
added:
        - stalk_nearby (logging for later recovery in case VSS crash)
        - unstalk_nearby (logging for later recovery in case VSS crash)

Show diffs side-by-side

added added

removed removed

Lines of Context:
947
947
}
948
948
 
949
949
 
 
950
# subscribe nearby
 
951
sub stalk_nearby {
 
952
        my $self = shift;
 
953
        my $cb = pop if "CODE" eq ref $_[-1];
 
954
        my $node_info = shift;
 
955
        my $radius = shift;
 
956
        
 
957
        my $redis = $self->{redis};
 
958
        my @error;
 
959
        
 
960
        my $node_key = 'node:' . $node_info->{apikey} . ':' . $node_info->{layer} . ':' . $node_info->{name};
 
961
        
 
962
        say Dumper($node_key, $radius) if $DEBUG;
 
963
        
 
964
        
 
965
        my $cs = AnyEvent::CallbackStack->new;
 
966
        
 
967
        $cs->start;
 
968
        say "START stalk_nearby" if $DEBUG;
 
969
        
 
970
        $cs->add( sub {
 
971
                $redis->hset(
 
972
                        $node_key, 'nearby_radius', $radius,
 
973
                        sub {
 
974
                                my ($result, $err) = @_;
 
975
                                push @error, $err if $err;
 
976
                                warn "HSET $node_key / nearby_radius $radius / $err" if $NOTICE or $DEBUG;
 
977
                                $result = 'OK' unless @error;
 
978
                                $cs->next( $result, \@error );
 
979
                        },
 
980
                );
 
981
        });
 
982
        
 
983
        defined $cb ? $cs->last->cb( sub { $cb->( $_[0]->recv ) } ) : return $cs->last;
 
984
        
 
985
}
 
986
 
 
987
 
 
988
# unsubscribe nearby
 
989
sub unstalk_nearby {
 
990
        my $self = shift;
 
991
        my $cb = pop if "CODE" eq ref $_[-1];
 
992
        my $node_info = shift;
 
993
        
 
994
        my $redis = $self->{redis};
 
995
        my @error;
 
996
        
 
997
        my $node_key = 'node:' . $node_info->{apikey} . ':' . $node_info->{layer} . ':' . $node_info->{name};
 
998
        
 
999
        say Dumper($node_key) if $DEBUG;
 
1000
        
 
1001
        
 
1002
        my $cs = AnyEvent::CallbackStack->new;
 
1003
        
 
1004
        $cs->start;
 
1005
        say "START unstalk_nearby" if $DEBUG;
 
1006
        
 
1007
        $cs->add( sub {
 
1008
                $redis->hdel(
 
1009
                        $node_key, 'nearby_radius',
 
1010
                        sub {
 
1011
                                my ($result, $err) = @_;
 
1012
                                push @error, $err if defined $err;
 
1013
                                warn "HDEL $node_key / nearby_radius / $err" if $NOTICE or $DEBUG;
 
1014
                                $result = 'OK' unless @error;
 
1015
                                $cs->next( $result, \@error );
 
1016
                        },
 
1017
                );
 
1018
        });
 
1019
        
 
1020
        defined $cb ? $cs->last->cb( sub { $cb->( $_[0]->recv ) } ) : return $cs->last;
 
1021
        
 
1022
}
 
1023
 
 
1024
 
950
1025
# remove all data belongs to node/apikey
951
1026
sub revoke {
952
1027
        my $self = shift;