X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/cfe9b58cc374794df00910b7708ffa245aaf03bf..ad18aa8b7f032e5acf356bd97e1d62684c24e891:/services/api/app/controllers/application_controller.rb diff --git a/services/api/app/controllers/application_controller.rb b/services/api/app/controllers/application_controller.rb index 3750befb3f..cf7271bbff 100644 --- a/services/api/app/controllers/application_controller.rb +++ b/services/api/app/controllers/application_controller.rb @@ -46,7 +46,8 @@ class ApplicationController < ActionController::Base before_action :load_limit_offset_order_params, only: [:index, :contents] before_action :load_select_param before_action(:find_object_by_uuid, - except: [:index, :create] + ERROR_ACTIONS) + except: [:index, :create, :update] + ERROR_ACTIONS) + before_action :find_object_for_update, only: [:update] before_action :load_where_param, only: [:index, :contents] before_action :load_filters_param, only: [:index, :contents] before_action :find_objects_for_index, :only => :index @@ -464,7 +465,11 @@ class ApplicationController < ActionController::Base controller_name end - def find_object_by_uuid + def find_object_for_update + find_object_by_uuid(with_lock: true) + end + + def find_object_by_uuid(with_lock: false) if params[:id] and params[:id].match(/\D/) params[:uuid] = params.delete :id end @@ -475,7 +480,11 @@ class ApplicationController < ActionController::Base @filters = [] @objects = nil find_objects_for_index - @object = @objects.first + if with_lock && Rails.configuration.API.LockBeforeUpdate + @object = @objects.lock.first + else + @object = @objects.first + end end def nullable_attributes @@ -688,11 +697,6 @@ class ApplicationController < ActionController::Base } end - def client_accepts_plain_text_stream - (request.headers['Accept'].split(' ') & - ['text/plain', '*/*']).count > 0 - end - def render *opts if opts.first response = opts.first[:json]