Changeset 479

Show
Ignore:
Timestamp:
05/15/08 17:22:31 (6 months ago)
Author:
whitaker
Message:

Reverting this because it was causing errors with
type-sync workers.

Fatal error with /topic/category:[category:Religion:729]:OK:: Cannot
call method 'begin_work' on object
'Data::ObjectDriver::Driver::Cache::Memcached=HASH(0x6ffee80)'
at /home/garth/eng/trunk/core/lib/TypeCore/Object.pm line 173

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/Data/ObjectDriver/Driver/BaseCache.pm

    r478 r479  
    1010use Carp (); 
    1111 
    12 __PACKAGE__->mk_accessors(qw( cache fallback txn_active txn_buffer)); 
     12__PACKAGE__->mk_accessors(qw( cache fallback )); 
    1313__PACKAGE__->mk_classdata(qw( Disabled )); 
    1414 
     
    3030    $driver->fallback($param{fallback}) 
    3131        or Carp::croak("fallback is required"); 
    32     $driver->txn_active(0); 
    33     $driver->txn_buffer([]); 
    3432    $driver; 
    35 } 
    36  
    37 sub begin_work { 
    38     my $driver = shift; 
    39  
    40     my $rv = $driver->fallback->begin_work(@_); 
    41     $driver->txn_active(1); 
    42     return $rv; 
    43 } 
    44  
    45 sub commit { 
    46     my $driver = shift; 
    47     my $rv = $driver->fallback->commit(@_); 
    48  
    49     while (my $cb = shift @{$driver->txn_buffer}) { 
    50         $cb->(); 
    51     } 
    52     $driver->txn_active(0); 
    53  
    54     return $rv; 
    55 } 
    56  
    57 sub rollback {  
    58     my $driver = shift; 
    59     my $rv = $driver->fallback->rollback(@_); 
    60  
    61     $driver->txn_buffer([]); 
    62     $driver->txn_active(0); 
    63  
    64     return $rv; 
    6533} 
    6634 
     
    7341    ## all layers below this, as well. 
    7442    unless (exists $obj->{__cached} && $obj->{__cached}{ref $driver}) { 
    75         $driver->modify_cache(sub { 
    76             $driver->add_to_cache( 
     43        $driver->add_to_cache( 
    7744                $driver->cache_key(ref($obj), $obj->primary_key), 
    7845                $driver->deflate($obj) 
    7946            ); 
    80         }); 
    8147        $driver->fallback->cache_object($obj); 
    8248    } 
     
    201167    my $ret = $driver->fallback->update($obj); 
    202168    my $key = $driver->cache_key(ref($obj), $obj->primary_key); 
    203     $driver->modify_cache(sub { 
    204         $driver->update_cache($key, $driver->deflate($obj)); 
    205     }); 
     169    $driver->update_cache($key, $driver->deflate($obj)); 
    206170    return $ret; 
    207171} 
     
    218182    if ($has_pk) { 
    219183        my $key = $driver->cache_key(ref($obj), $obj->primary_key); 
    220         $driver->modify_cache(sub { 
    221             $driver->update_cache($key, $driver->deflate($obj)); 
    222         }); 
     184        $driver->update_cache($key, $driver->deflate($obj)); 
    223185    }  
    224186    return $ret; 
     
    247209    my($obj) = @_; 
    248210    my $key = $driver->cache_key(ref($obj), $obj->primary_key); 
    249     return $driver->modify_cache(sub { 
    250         delete $obj->{__cached}; 
    251         $driver->remove_from_cache($key); 
    252         $driver->fallback->uncache_object($obj); 
    253     }); 
     211    delete $obj->{__cached}; 
     212    $driver->remove_from_cache($key); 
     213    $driver->fallback->uncache_object($obj); 
     214    return; 
    254215} 
    255216 
     
    265226    } 
    266227    return $key; 
    267 } 
    268  
    269 # if we're operating within a transaction then we need to buffer CRUD 
    270 # and only commit to the cache upon commit 
    271 sub modify_cache { 
    272     my ($driver, $cb) = @_; 
    273     unless ($driver->txn_active) { 
    274         return $cb->(); 
    275     } 
    276     push @{$driver->txn_buffer} => $cb; 
    277228} 
    278229 
  • trunk/lib/Data/ObjectDriver/Driver/DBI.pm

    r478 r479  
    525525    my $driver = shift; 
    526526    my $dbh = $driver->dbh; 
    527  
    528527    unless ($dbh) { 
    529528        $driver->{__delete_dbh_after_txn} = 1; 
     
    531530        $driver->dbh($dbh); 
    532531    } 
    533     return unless $dbh->{AutoCommit}; 
    534  
    535532    eval { 
    536533        $dbh->begin_work; 
    537534    }; 
    538     if (my $err = $@) { 
     535    if ($@) { 
    539536        $driver->rollback; 
    540         Carp::croak("Begin work failed for driver $driver: $err"); 
     537        Carp::croak("Begin work failed for driver $driver: $@"); 
    541538    } 
    542539} 
     
    548545    my $driver = shift; 
    549546    my($action) = @_; 
    550  
    551547    my $dbh = $driver->dbh 
    552548        or Carp::croak("$action called without a stored handle--begin_work?"); 
    553  
    554     return if $dbh->{AutoCommit}; 
    555  
    556549    eval { $dbh->$action() }; 
    557550    if ($@) { 
  • trunk/lib/Data/ObjectDriver/Driver/Partition.pm

    r478 r479  
    2727    my($class, $ids) = @_; 
    2828    $driver->get_driver->($ids->[0])->lookup_multi($class, $ids); 
    29 } 
    30  
    31 sub begin_work { 
    32     my $driver = shift; 
    33     $driver->_do_txn('begin_work', @_); 
    34 } 
    35  
    36 sub commit { 
    37     my $driver = shift; 
    38     $driver->_do_txn('commit', @_); 
    39 } 
    40  
    41 sub rollback { 
    42     my $driver = shift; 
    43     $driver->_do_txn('rollback', @_); 
    44 } 
    45  
    46 sub _do_txn { 
    47     my ($driver, $method, $pk_cb) = @_; 
    48     croak("Partition->$method requires a PK callback") 
    49         unless ref $pk_cb eq 'CODE'; 
    50  
    51     my $id = $pk_cb->(); 
    52     $driver->get_driver->($id)->$method; 
    53  
    5429} 
    5530