[freeside-commits] branch master updated. 664189df19ccc7bd6d39dea57c63c4d6a021d02f

Mark Wells mark at 420.am
Tue Apr 29 12:37:57 PDT 2014


The branch, master has been updated
       via  664189df19ccc7bd6d39dea57c63c4d6a021d02f (commit)
      from  cb0c60153102a21028425cf31ba12c8cdf31dca4 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 664189df19ccc7bd6d39dea57c63c4d6a021d02f
Author: Mark Wells <mark at freeside.biz>
Date:   Tue Apr 29 12:37:52 2014 -0700

    make non-blocking location upgrade optional, #28883

diff --git a/FS/FS/cust_main/Location.pm b/FS/FS/cust_main/Location.pm
index 560736d..32590bb 100644
--- a/FS/FS/cust_main/Location.pm
+++ b/FS/FS/cust_main/Location.pm
@@ -126,6 +126,8 @@ sub location_fields { @location_fields }
 
 sub _upgrade_data {
   my $class = shift;
+  my %opt = @_;
+
   eval "use FS::contact;
         use FS::contact_class;
         use FS::contact_phone;
@@ -167,12 +169,17 @@ sub _upgrade_data {
   my $num_jobs = FS::queue->count('job = \'FS::cust_main::Location::process_upgrade_location\' and status != \'failed\'');
   if ( $num_to_upgrade > 0 ) {
     warn "Need to migrate $num_to_upgrade customer locations.\n";
-    if ( $num_jobs > 0 ) {
-      warn "Upgrade already queued.\n";
-    } else {
-      warn "Scheduling upgrade.\n";
-      my $job = FS::queue->new({ job => 'FS::cust_main::Location::process_upgrade_location' });
-      $job->insert;
+
+    if ( $opt{queue} ) {
+      if ( $num_jobs > 0 ) {
+        warn "Upgrade already queued.\n";
+      } else {
+        warn "Scheduling upgrade.\n";
+        my $job = FS::queue->new({ job => 'FS::cust_main::Location::process_upgrade_location' });
+        $job->insert;
+      }
+    } else { #do it now
+      process_upgrade_location();
     }
 
   }
diff --git a/FS/bin/freeside-upgrade b/FS/bin/freeside-upgrade
index 45d2709..3755a81 100755
--- a/FS/bin/freeside-upgrade
+++ b/FS/bin/freeside-upgrade
@@ -1,7 +1,7 @@
 #!/usr/bin/perl -w
 
 use strict;
-use vars qw( $opt_d $opt_s $opt_q $opt_v $opt_r $opt_c );
+use vars qw( $opt_d $opt_s $opt_q $opt_v $opt_r $opt_c $opt_j );
 use vars qw( $DEBUG $DRY_RUN );
 use Getopt::Std;
 use DBIx::DBSchema 0.31; #0.39
@@ -17,7 +17,7 @@ my $start = time;
 
 die "Not running uid freeside!" unless checkeuid();
 
-getopts("dqrcs");
+getopts("dqrcsj");
 
 $DEBUG = !$opt_q;
 #$DEBUG = $opt_v;
@@ -30,6 +30,14 @@ $FS::UID::callback_hack = 1;
 my $dbh = adminsuidsetup($user);
 $FS::UID::callback_hack = 0;
 
+# pass command line opts through to upgrade* routines
+my %upgrade_opts = (
+  quiet   => $opt_q,
+  verbose => $opt_v,
+  queue   => $opt_j,
+  # others?
+);
+
 if ( driver_name =~ /^mysql/i ) { #until 0.39 is required above
   eval "use DBIx::DBSchema 0.39;";
   die $@ if $@;
@@ -102,7 +110,7 @@ if ( $DRY_RUN ) {
       or die "Error: ". $dbh->errstr. "\n executing: $statement";
   }
 
-  upgrade_schema();
+  upgrade_schema(%upgrade_opts);
 
   dbdef_create($dbh, $dbdef_file);
   delete $FS::Schema::dbdef_cache{$dbdef_file}; #force an actual reload
@@ -286,7 +294,7 @@ foreach my $cfst ( @cfst ) {
 }
 warn "Custom fields data upgrade completed";
 
-upgrade_config()
+upgrade_config(%upgrade_opts)
   unless $DRY_RUN || $opt_s;
 
 $dbh->commit or die $dbh->errstr;
@@ -294,7 +302,7 @@ $dbh->commit or die $dbh->errstr;
 warn "Config updates completed in ". (time-$start). " seconds\n"; # if $DEBUG;
 $start = time;
 
-upgrade()
+upgrade(%upgrade_opts)
   unless $DRY_RUN || $opt_s;
 
 $dbh->commit or die $dbh->errstr;
@@ -302,7 +310,7 @@ $dbh->commit or die $dbh->errstr;
 warn "Table updates completed in ". (time-$start). " seconds\n"; # if $DEBUG;
 $start = time;
 
-upgrade_sqlradius()
+upgrade_sqlradius(%upgrade_opts)
   unless $DRY_RUN || $opt_s || $opt_r;
 
 warn "SQL RADIUS updates completed in ". (time-$start). " seconds\n"; # if $DEBUG;
@@ -364,6 +372,11 @@ Also performs other upgrade functions:
   [ -s ]: Schema changes only.  Useful for Pg/slony slaves where the data
           changes will be replicated from the Pg/slony master.
 
+  [ -j ]: Run certain upgrades asychronously from the job queue.  Currently 
+          used only for the 2.x -> 3.x cust_location upgrade.  This may cause
+          odd behavior before the upgrade is complete, so it's recommended 
+          only for very large cust_main tables that take too long to upgrade.
+
 =head1 SEE ALSO
 
 =cut

-----------------------------------------------------------------------

Summary of changes:
 FS/FS/cust_main/Location.pm |   19 +++++++++++++------
 FS/bin/freeside-upgrade     |   25 +++++++++++++++++++------
 2 files changed, 32 insertions(+), 12 deletions(-)




More information about the freeside-commits mailing list