[ARVADOS] updated: c088fcf0b5aaf31195ec1b94873e93f1fd3ee8ed

git at public.curoverse.com git at public.curoverse.com
Fri Oct 10 16:14:22 EDT 2014


Summary of changes:
 services/api/app/models/arvados_model.rb     |  1 -
 services/api/app/models/log.rb               |  5 +++++
 services/api/config/initializers/eventbus.rb |  3 +++
 services/api/lib/eventbus.rb                 | 16 +++++++++++-----
 4 files changed, 19 insertions(+), 6 deletions(-)

       via  c088fcf0b5aaf31195ec1b94873e93f1fd3ee8ed (commit)
       via  67f00f6ddc4570f878fcc64d4bbdc3eb198a48a3 (commit)
      from  4fe672034a740836e930733d741017d07f6ffa0c (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.


commit c088fcf0b5aaf31195ec1b94873e93f1fd3ee8ed
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Oct 10 16:14:15 2014 -0400

    3692: Explicitly incorporate sequence number test into where clause

diff --git a/services/api/lib/eventbus.rb b/services/api/lib/eventbus.rb
index 9f74b5d..96e9d04 100644
--- a/services/api/lib/eventbus.rb
+++ b/services/api/lib/eventbus.rb
@@ -57,20 +57,24 @@ class EventBus
           # Start with log rows readable by user, sorted in ascending order
           logs = Log.readable_by(ws.user).order("id asc")
 
+          cond_id = nil
+          cond_out = []
+          param_out = []
+
           if ws.last_log_id
             # Client is only interested in log rows that are newer than the
             # last log row seen by the client.
-            logs = logs.where("logs.id > ?", ws.last_log_id)
+            cond_id = "logs.id > ?"
+            param_out << ws.last_log_id
           elsif id
             # No last log id, so only look at the most recently changed row
-            logs = logs.where("logs.id = ?", id.to_i)
+            cond_id = "logs.id = ?"
+            param_out << id.to_i
           else
             return
           end
 
           # Now process filters provided by client
-          cond_out = []
-          param_out = []
           ws.filters.each do |filter|
             ft = record_filters filter.filters, Log
             if ft[:cond_out].any?
@@ -81,7 +85,9 @@ class EventBus
 
           # Add filters to query
           if cond_out.any?
-            logs = logs.where("(#{cond_out.join ') OR ('})", *param_out)
+            logs = logs.where(cond_id + " AND (#{cond_out.join ') OR ('})", *param_out)
+          else
+            logs = logs.where(cond_id, *param_out)
           end
 
           # Finally execute query and actually send the matching log rows

commit 67f00f6ddc4570f878fcc64d4bbdc3eb198a48a3
Author: Peter Amstutz <peter.amstutz at curoverse.com>
Date:   Fri Oct 10 15:43:52 2014 -0400

    Websocket server side fix, perform database notify in after_save callback on
    the log object instead of in log_change on ArvadosBase because crunch-dispatch
    was creating Log objects directly and bypassing the notification in log_change.

diff --git a/services/api/app/models/arvados_model.rb b/services/api/app/models/arvados_model.rb
index 2e17747..823fd55 100644
--- a/services/api/app/models/arvados_model.rb
+++ b/services/api/app/models/arvados_model.rb
@@ -526,7 +526,6 @@ class ArvadosModel < ActiveRecord::Base
     log = Log.new(event_type: event_type).fill_object(self)
     yield log
     log.save!
-    connection.execute "NOTIFY logs, '#{log.id}'"
     log_start_state
   end
 
diff --git a/services/api/app/models/log.rb b/services/api/app/models/log.rb
index 34e6dfa..39f789e 100644
--- a/services/api/app/models/log.rb
+++ b/services/api/app/models/log.rb
@@ -5,6 +5,7 @@ class Log < ArvadosModel
   serialize :properties, Hash
   before_validation :set_default_event_at
   attr_accessor :object, :object_kind
+  after_save :send_notify
 
   api_accessible :user, extend: :common do |t|
     t.add :id
@@ -80,4 +81,8 @@ class Log < ArvadosModel
     # logs can have references to deleted objects
   end
 
+  def send_notify
+    connection.execute "NOTIFY logs, '#{self.id}'"
+  end
+
 end
diff --git a/services/api/config/initializers/eventbus.rb b/services/api/config/initializers/eventbus.rb
index 4a6141c..ea1c210 100644
--- a/services/api/config/initializers/eventbus.rb
+++ b/services/api/config/initializers/eventbus.rb
@@ -12,5 +12,8 @@ Server::Application.configure do
       :mount => "/websocket",
       :websocket_only => (ENV['ARVADOS_WEBSOCKETS'] == "ws-only")
     }
+    Rails.logger.info "Websockets #{ENV['ARVADOS_WEBSOCKETS']}, running at /websocket"
+  else
+    Rails.logger.info "Websockets disabled"
   end
 end

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


hooks/post-receive
-- 




More information about the arvados-commits mailing list