On Fri, 2010-10-01 at 16:07 -0400, Jason Guiditta wrote:
> This blows up dbomatic for me, I think becuase of the
> two condor calls in rapid succession, but would like more
> eyes on it for other ideas.
>
> Basic idea is just to have a 'Remove Failed' button
> to get rid of instances that have a state of 'error'.
For reference, the error jay was seeing was:
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract_adapter.rb:221:in
`log': SQLite3::BusyException: database is locked: UPDATE
"quotas" (ActiveRecord::StatementInvalid)
SET "total_instances" = 0, "updated_at" = '2010-10-01 19:59:07',
"lock_version" = 15
WHERE id = 4
AND "lock_version" = 14
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/sqlite_adapter.rb:172:in
`execute'
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/sqlite_adapter.rb:417:in
`catch_schema_changes'
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/sqlite_adapter.rb:172:in
`execute'
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract/database_statements.rb:265:in
`update_sql'
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/sqlite_adapter.rb:176:in
`update_sql'
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract/database_statements.rb:49:in
`update_without_query_dirty'
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/connection_adapters/abstract/query_cache.rb:19:in
`update'
from
/usr/lib/ruby/gems/1.8/gems/activerecord-2.3.8/lib/active_record/locking/optimistic.rb:92:in
`update_without_dirty'
... 48 levels...
from
/usr/lib/ruby/gems/1.8/gems/rb-inotify-0.8.1/lib/rb-inotify/notifier.rb:215:in
`each'
from
/usr/lib/ruby/gems/1.8/gems/rb-inotify-0.8.1/lib/rb-inotify/notifier.rb:215:in
`process'
from
/usr/lib/ruby/gems/1.8/gems/rb-inotify-0.8.1/lib/rb-inotify/notifier.rb:198:in
`run'
from ./dbomatic:289
> ---
> src/app/controllers/instance_controller.rb | 63
> +++++++++++++++++-----------
> src/app/util/condormatic.rb | 6 +-
> src/app/views/instance/index.haml | 3 +
> 3 files changed, 44 insertions(+), 28 deletions(-)
>
> diff --git a/src/app/controllers/instance_controller.rb
> b/src/app/controllers/instance_controller.rb
> index c82d378..154f118 100644
> --- a/src/app/controllers/instance_controller.rb
> +++ b/src/app/controllers/instance_controller.rb
> @@ -121,33 +121,37 @@ class InstanceController < ApplicationController
> return
> end
>
> - # action list will be longer (restart, start, stop..)
> - action = if params[:shutdown]
> - 'stop'
> - #elsif params[:restart]
> - # 'restart'
> - end
> -
> - unless @instance.valid_action?(action)
> - raise ActionError.new("'#{action}' is an invalid action.")
> - end
> + if params[:remove_failed]
> + action = remove_failed
> + else
> + # action list will be longer (restart, start, stop..)
> + action = if params[:shutdown]
> + 'stop'
> + #elsif params[:restart]
> + # 'restart'
> + end
> +
> + unless @instance.valid_action?(action)
> + raise ActionError.new("'#{action}' is an invalid action.")
> + end
>
> - # not sure if task is used as everything goes through condor
> - #permissons check here
> - @task = @instance.queue_action(@current_user, action)
> - unless @task
> - raise ActionError.new("#{action} cannot be performed on this
> instance.")
> - end
> + # not sure if task is used as everything goes through condor
> + #permissons check here
> + @task = @instance.queue_action(@current_user, action)
> + unless @task
> + raise ActionError.new("#{action} cannot be performed on this
> instance.")
> + end
>
> - case action
> - when 'stop'
> - condormatic_instance_stop(@task)
> - when 'destroy'
> - condormatic_instance_destroy(@task)
> - when 'start'
> - condormatic_instance_create(@task)
> - else
> - raise ActionError.new("Sorry, action '#{action}' is currently not
> supported by condor backend.")
> + case action
> + when 'stop'
> + condormatic_instance_stop(@task)
> + when 'destroy'
> + condormatic_instance_destroy(@task)
> + when 'start'
> + condormatic_instance_create(@task)
> + else
> + raise ActionError.new("Sorry, action '#{action}' is currently not
> supported by condor backend.")
> + end
> end
>
> flash[:notice] = "#[email protected]}: #{action} was successfully
> queued."
> @@ -157,4 +161,13 @@ class InstanceController < ApplicationController
> def delete
> end
>
> + def remove_failed
> + action ='remove failed'
> + raise ActionError.new("#{action} cannot be performed on this instance.")
> unless
> + @instance.state == Instance::STATE_ERROR
> + condormatic_instance_reset_error(@instance)
> + puts "== Attempting to remove instance #[email protected]}"
> + action
> + end
> +
> end
> diff --git a/src/app/util/condormatic.rb b/src/app/util/condormatic.rb
> index c74872b..43f83d9 100644
> --- a/src/app/util/condormatic.rb
> +++ b/src/app/util/condormatic.rb
> @@ -155,7 +155,7 @@ def condormatic_instances_sync_states
> end
>
> def condormatic_instance_stop(task)
> - instance = task.instance
> + instance = task.instance_of?(InstanceTask) ? task.instance : task
>
> Rails.logger.info("calling condor_rm -constraint 'Cmd ==
> \"#{instance.condor_job_id}\"' 2>&1")
> pipe = IO.popen("condor_rm -constraint 'Cmd ==
> \"#{instance.condor_job_id}\"' 2>&1")
> @@ -166,9 +166,9 @@ def condormatic_instance_stop(task)
> Rails.logger.error("Error calling condor_rm (exit code #{$?}) on job:
> #{out}") if $? != 0
> end
>
> -def condormatic_instance_reset_error(task)
> - instance = task.instance
> +def condormatic_instance_reset_error(instance)
>
> + condormatic_instance_stop(instance)
> Rails.logger.info("calling condor_rm -forcex -constraint 'Cmd ==
> \"#{instance.condor_job_id}\"' 2>&1")
> pipe = IO.popen("condor_rm -forcex -constraint 'Cmd ==
> \"#{instance.condor_job_id}\"' 2>&1")
> out = pipe.read
> diff --git a/src/app/views/instance/index.haml
> b/src/app/views/instance/index.haml
> index 7b4322f..f734aef 100644
> --- a/src/app/views/instance/index.haml
> +++ b/src/app/views/instance/index.haml
> @@ -26,6 +26,9 @@
> %li.info
> %span
> = submit_tag "Instance Details", :name => "instance_details",
> :class => "icon"
> + %li.delete
> + %span
> + = submit_tag "Remove Failed", :name => "remove_failed", :class
> => "icon"
>
> .grid_13
> %h2 Pool Status
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel