X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/9429a5c85024430b96e2349f3ec36cc2161058b2..cb690390d4f253c3bbb9c543e243cf988f39fbb3:/services/api/app/controllers/arvados/v1/containers_controller.rb diff --git a/services/api/app/controllers/arvados/v1/containers_controller.rb b/services/api/app/controllers/arvados/v1/containers_controller.rb index 8e36cdc0d4..13aa478d26 100644 --- a/services/api/app/controllers/arvados/v1/containers_controller.rb +++ b/services/api/app/controllers/arvados/v1/containers_controller.rb @@ -31,10 +31,10 @@ class Arvados::V1::ContainersController < ApplicationController end def update - if (resource_attrs.keys - [:cost, :gateway_address, :output_properties, :progress, :runtime_status]).empty? + if (resource_attrs.keys.map(&:to_sym) - [:cost, :gateway_address, :output_properties, :progress, :runtime_status]).empty? # If no attributes are being updated besides these, there are no - # cascading changes to other rows/tables, so we should just use - # row locking. + # cascading changes to other rows/tables, the only lock will the + # single row lock on SQL UPDATE. super else Container.transaction do @@ -51,7 +51,17 @@ class Arvados::V1::ContainersController < ApplicationController if action_name == 'lock' || action_name == 'unlock' # Avoid loading more fields than we need @objects = @objects.select(:id, :uuid, :state, :priority, :auth_uuid, :locked_by_uuid, :lock_count) - @select = %w(uuid state priority auth_uuid locked_by_uuid) + # This gets called from within find_object_by_uuid. + # find_object_by_uuid stores the original value of @select in + # @preserve_select, edits the value of @select, calls + # find_objects_for_index, then restores @select from the value + # of @preserve_select. So if we want our updated value of + # @select here to stick, we have to set @preserve_select. + @select = @preserve_select = %w(uuid state priority auth_uuid locked_by_uuid) + elsif action_name == 'update_priority' + # We're going to reload in update_priority!, which will select + # all attributes, but will fail if we don't select :id now. + @objects = @objects.select(:id, :uuid) end end