[open-ils-commits] [GIT] Evergreen ILS branch master updated. db7600f7efcd5703097b7187a57c1a13711ec451

Evergreen Git git at git.evergreen-ils.org
Thu Feb 2 15:38:07 EST 2017


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Evergreen ILS".

The branch, master has been updated
       via  db7600f7efcd5703097b7187a57c1a13711ec451 (commit)
      from  421bf913c15eabfae6badfcf1b2e420865d9613d (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 db7600f7efcd5703097b7187a57c1a13711ec451
Author: Mike Rylander <mrylander at gmail.com>
Date:   Tue Jan 31 12:35:05 2017 -0500

    LP#1660059: Protect against null value in group field
    
    If a nullable event grouping field is configured, and a null value is indeed
    encountered when pulling together events, the Action/Trigger code will exit
    unceremoniously.  To prevent this, we will now collect events with either
    a null grouping object or grouping field, and use a new batch invalidation
    API call to get rid of them as quickly as possible after group sorting is
    complete.
    
    Signed-off-by: Mike Rylander <mrylander at gmail.com>
    Signed-off-by: Chris Sharp <csharp at georgialibraries.org>

diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger.pm
index 920175b..3336dcb 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger.pm
@@ -757,6 +757,7 @@ sub grouped_events {
         $client->status( new OpenSRF::DomainObject::oilsContinueStatus );
     }
 
+    my @invalid; # sync for events with a null grouping field
     for my  $e (@fleshed_events) {
         if (my $group = $e->event->event_def->group_field) {
 
@@ -771,12 +772,19 @@ sub grouped_events {
             };
 
             unless($node) { # should not get here, but to be safe..
-                $e->update_state('invalid');
+                push @invalid, $e;
                 next;
             }
 
             # get the grouping value for the grouping object on this event
             my $ident_value = $node->$group_field();
+
+            # could by false-y, so check definedness
+            if (!defined($ident_value)) {
+                push @invalid, $e;
+                next;
+            }
+
             if(ref $ident_value) {
                 my $ident_field = $ident_value->Identity; 
                 $ident_value = $ident_value->$ident_field()
@@ -791,6 +799,7 @@ sub grouped_events {
         }
     }
 
+    OpenILS::Application::Trigger::Event->invalidate(@invalid) if @invalid;
 
     return \%groups;
 }
diff --git a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Event.pm b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Event.pm
index 91c7994..bd85e38 100644
--- a/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Event.pm
+++ b/Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Event.pm
@@ -10,6 +10,27 @@ use Safe;
 
 my $log = 'OpenSRF::Utils::Logger';
 
+sub invalidate {
+    my $class = shift;
+    my @events = @_;
+
+    # if called as an instance method
+    unshift(@events,$class) if ref($class);
+
+    my $e = new_editor();
+    $e->xact_begin;
+
+    map {
+        $_->editor($e);
+        $_->standalone(0);
+        $_->update_state('invalid');
+    } @events;
+
+    $e->commit;
+
+    return @events;
+}
+
 sub new {
     my $class = shift;
     my $id = shift;

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

Summary of changes:
 .../perlmods/lib/OpenILS/Application/Trigger.pm    |   11 +++++++++-
 .../lib/OpenILS/Application/Trigger/Event.pm       |   21 ++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletions(-)


hooks/post-receive
-- 
Evergreen ILS


More information about the open-ils-commits mailing list