Clarify licensing, ensure footers are consistent throughout the project
[dbsrgits/DBIx-Class.git] / lib / DBIx / Class / Storage / DBI / Replicated / Pool.pm
index dfc33ec..9980b4d 100644 (file)
@@ -5,9 +5,9 @@ use DBIx::Class::Storage::DBI::Replicated::Replicant;
 use List::Util 'sum';
 use Scalar::Util 'reftype';
 use DBI ();
-use Carp::Clan qw/^DBIx::Class/;
 use MooseX::Types::Moose qw/Num Int ClassName HashRef/;
 use DBIx::Class::Storage::DBI::Replicated::Types 'DBICStorageDBI';
+use Try::Tiny;
 
 use namespace::clean -except => 'meta';
 
@@ -23,7 +23,7 @@ shouldn't need to create instances of this class.
 =head1 DESCRIPTION
 
 In a replicated storage type, there is at least one replicant to handle the
-read only traffic.  The Pool class manages this replicant, or list of 
+read-only traffic.  The Pool class manages this replicant, or list of
 replicants, and gives some methods for querying information about their status.
 
 =head1 ATTRIBUTES
@@ -53,7 +53,7 @@ has 'maximum_lag' => (
 
 This is an integer representing a time since the last time the replicants were
 validated. It's nothing fancy, just an integer provided via the perl L<time|perlfunc/time>
-builtin.
+built-in.
 
 =cut
 
@@ -81,13 +81,13 @@ has 'replicant_type' => (
   default=>'DBIx::Class::Storage::DBI',
   handles=>{
     'create_replicant' => 'new',
-  },  
+  },
 );
 
 =head2 replicants
 
 A hashref of replicant, with the key being the dsn and the value returning the
-actual replicant storage.  For example if the $dsn element is something like:
+actual replicant storage.  For example, if the $dsn element is something like:
 
   "dbi:SQLite:dbname=dbfile"
 
@@ -117,7 +117,7 @@ The number of replicants in the pool
 
 =item delete_replicant ($key)
 
-removes the replicant under $key from the pool
+Removes the replicant under $key from the pool
 
 =back
 
@@ -219,7 +219,7 @@ sub connect_replicants {
     }
 
     $replicant->id($key);
-    $self->set_replicant($key => $replicant);  
+    $self->set_replicant($key => $replicant);
 
     push @newly_created, $replicant;
   }
@@ -254,12 +254,7 @@ sub connect_replicant {
 
   Moose::Meta::Class->initialize(ref $replicant);
 
-  my $class = Moose::Meta::Class->create_anon_class(
-    superclasses => [ ref $replicant ],
-    roles        => [ 'DBIx::Class::Storage::DBI::Replicated::Replicant' ],
-    cache        => 1,
-  );
-  $class->rebless_instance($replicant);
+  DBIx::Class::Storage::DBI::Replicated::Replicant->meta->apply($replicant);
 
   # link back to master
   $replicant->master($self->master);
@@ -273,7 +268,7 @@ The standard ensure_connected method with throw an exception should it fail to
 connect.  For the master database this is desirable, but since replicants are
 allowed to fail, this behavior is not desirable.  This method wraps the call
 to ensure_connected in an eval in order to catch any generated errors.  That
-way a slave can go completely offline (ie, the box itself can die) without
+way a slave can go completely offline (e.g. the box itself can die) without
 bringing down your entire pool of databases.
 
 =cut
@@ -298,18 +293,16 @@ Returns 1 on success and undef on failure.
 sub _safely {
   my ($self, $replicant, $name, $code) = @_;
 
-  eval {
-    $code->()
-  };
-  if ($@) {
+  return try {
+    $code->();
+    1;
+  } catch {
     $replicant->debugobj->print(sprintf(
       "Exception trying to $name for replicant %s, error is %s",
-      $replicant->_dbi_connect_info->[0], $@)
+      $replicant->_dbi_connect_info->[0], $_)
     );
-    return undef;
-  }
-
-  return 1;
+    undef;
+  };
 }
 
 =head2 connected_replicants
@@ -369,8 +362,8 @@ This does a check to see if 1) each replicate is connected (or reconnectable),
 defined by L</maximum_lag>.  Replicants that fail any of these tests are set to
 inactive, and thus removed from the replication pool.
 
-This tests L<all_replicants>, since a replicant that has been previous marked
-as inactive can be reactived should it start to pass the validation tests again.
+This tests L</all_replicants>, since a replicant that has been previous marked
+as inactive can be reactivated should it start to pass the validation tests again.
 
 See L<DBIx::Class::Storage::DBI> for more about checking if a replicating
 connection is not following a master or is lagging.
@@ -402,9 +395,9 @@ sub validate_replicants {
             if($lag_behind_master <= $self->maximum_lag) {
               $replicant->active(1);
             } else {
-              $replicant->active(0);  
+              $replicant->active(0);
             }
-          }    
+          }
         } else {
           $replicant->active(0);
         }
@@ -413,17 +406,20 @@ sub validate_replicants {
       $replicant->active(0);
     }
   }
-  ## Mark that we completed this validation.  
-  $self->_last_validated(time);  
+  ## Mark that we completed this validation.
+  $self->_last_validated(time);
 }
 
-=head1 AUTHOR
+=head1 FURTHER QUESTIONS?
 
-John Napiorkowski <john.napiorkowski@takkle.com>
+Check the list of L<additional DBIC resources|DBIx::Class/GETTING HELP/SUPPORT>.
 
-=head1 LICENSE
+=head1 COPYRIGHT AND LICENSE
 
-You may distribute this code under the same terms as Perl itself.
+This module is free software L<copyright|DBIx::Class/COPYRIGHT AND LICENSE>
+by the L<DBIx::Class (DBIC) authors|DBIx::Class/AUTHORS>. You can
+redistribute it and/or modify it under the same terms as the
+L<DBIx::Class library|DBIx::Class/COPYRIGHT AND LICENSE>.
 
 =cut