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

Reply via email to