Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Added Delayed::Worker.default_priority

  • Loading branch information...
commit 948223b6a86dde0c1eb1e46155072cdd0190c970 1 parent fc692e2
@eugenebolshakov eugenebolshakov authored bkeepers committed
View
173 .redcar/tags
@@ -0,0 +1,173 @@
+1289585416
+0 /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+0 /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+0 /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+0 /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+ActiveRecord /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb module ActiveRecord
+Autoloaded /Users/brandon/projects/oss/delayed_job/spec/autoloaded/clazz.rb module Autoloaded
+Autoloaded /Users/brandon/projects/oss/delayed_job/spec/autoloaded/struct.rb module Autoloaded
+Backend /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb module Backend
+Backend /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb module Backend
+Base /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb class ActiveRecord::Base
+Base /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb module Base
+CallbackJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class CallbackJob
+Class /Users/brandon/projects/oss/delayed_job/lib/delayed/yaml_ext.rb class Class
+ClassMethods /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb module ClassMethods
+ClassMethods /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb module ClassMethods
+Clazz /Users/brandon/projects/oss/delayed_job/spec/autoloaded/clazz.rb class Clazz
+Command /Users/brandon/projects/oss/delayed_job/lib/delayed/command.rb class Command
+CreateDelayedJobs /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/templates/migration.rb class CreateDelayedJobs
+CustomRescheduleJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class CustomRescheduleJob
+DelayProxy /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb class DelayProxy
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb module Delayed
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb module Delayed
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/command.rb module Delayed
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb module Delayed
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_mailer.rb module Delayed
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_method.rb module Delayed
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/railtie.rb module Delayed
+Delayed /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb module Delayed
+DelayedJobGenerator /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/delayed_job_generator.rb class DelayedJobGenerator
+DeserializationError /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb class DeserializationError
+ErrorJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class ErrorJob
+Fable /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb class Fable
+Job /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb class Job
+LongRunningJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class LongRunningJob
+M /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb module M
+MessageSending /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb module MessageSending
+Module /Users/brandon/projects/oss/delayed_job/lib/delayed/yaml_ext.rb class Module
+ModuleJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class ModuleJob
+MyMailer /Users/brandon/projects/oss/delayed_job/spec/performable_mailer_spec.rb class MyMailer
+NamedJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class NamedJob
+OnPermanentFailureJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class OnPermanentFailureJob
+ParseObjectFromYaml /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb ParseObjectFromYaml =
+PerformableMailer /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_mailer.rb class PerformableMailer
+PerformableMethod /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_method.rb class PerformableMethod
+Railtie /Users/brandon/projects/oss/delayed_job/lib/delayed/railtie.rb class Railtie
+SimpleJob /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb class SimpleJob
+Story /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb class Story
+Story /Users/brandon/projects/oss/delayed_job/spec/spec_helper.rb class Story
+Struct /Users/brandon/projects/oss/delayed_job/lib/delayed/yaml_ext.rb class Struct
+Struct /Users/brandon/projects/oss/delayed_job/spec/autoloaded/struct.rb class Struct
+Worker /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb class Worker
+Yarn /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb class Yarn
+after /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def after
+after_fork /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def self.after_fork
+after_fork /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def after_fork
+args /Users/brandon/projects/oss/delayed_job/lib/delayed/recipes.rb def args
+backend /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_reader :backend
+backend /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def self.backend
+before /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def before
+before_fork /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def self.before_fork
+before_fork /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def before_fork
+clear_locks! /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def self.clear_locks!
+create_job /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/shared_spec.rb def create_job
+create_migration_file /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/delayed_job_generator.rb def create_migration_file
+create_script_file /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/delayed_job_generator.rb def create_script_file
+daemonize /Users/brandon/projects/oss/delayed_job/lib/delayed/command.rb def daemonize
+db_time_now /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def self.db_time_now
+default_priority /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+delay /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb def delay
+delay /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_mailer.rb def delay
+delay /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_mailer.rb def self.delay
+destroy_failed_jobs /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :destroy_failed_jobs
+display_name /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_method.rb def display_name
+display_name /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def display_name
+down /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/templates/migration.rb def self.down
+enqueue /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def enqueue
+enqueue /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def enqueue
+error /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def error
+failed /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb alias_method :failed
+failed? /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def failed?
+failure /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def failure
+failure /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def failure
+find_available /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def self.find_available
+find_available_jobs /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def find_available_jobs
+guess_backend /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def self.guess_backend
+handle_asynchronously /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb def handle_asynchronously
+handle_failed_job /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def handle_failed_job
+hook /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def hook
+importance /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb attr_accessor :importance
+importance /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb attr_accessor :importance
+included /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def self.included
+initialize /Users/brandon/projects/oss/delayed_job/lib/delayed/command.rb def initialize
+initialize /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb def initialize
+initialize /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_method.rb def initialize
+initialize /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def initialize
+invoke_job /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def invoke_job
+is /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/shared_spec.rb it "should raise a DeserializationError when the job class is
+lock_exclusively! /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def lock_exclusively!
+log_queries /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+logger /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+max_attempts /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+max_priority /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+max_run_time /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+messages /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :messages
+method_missing /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb def method_missing
+method_missing /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_method.rb def method_missing
+min_priority /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+name /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def name
+name /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/shared_spec.rb it "should be the class name
+name /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def name
+name /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def name
+name_prefix /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb attr_accessor :name_prefix
+next_migration_number /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/delayed_job_generator.rb def self.next_migration_number
+payload_object /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def payload_object
+payload_object /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def payload_object
+perform /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_mailer.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_method.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/autoloaded/clazz.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/autoloaded/struct.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def perform
+perform /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def perform
+private_method /Users/brandon/projects/oss/delayed_job/spec/performable_method_spec.rb def private_method
+rails_env /Users/brandon/projects/oss/delayed_job/lib/delayed/recipes.rb def rails_env
+reschedule /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def reschedule
+reschedule_at /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def reschedule_at
+reschedule_at /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def reschedule_at
+reserve_and_run_one_job /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def reserve_and_run_one_job
+respond_to? /Users/brandon/projects/oss/delayed_job/lib/delayed/performable_method.rb def respond_to?
+run /Users/brandon/projects/oss/delayed_job/lib/delayed/command.rb def run
+run /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def run
+run_process /Users/brandon/projects/oss/delayed_job/lib/delayed/command.rb def run_process
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+runs /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+say /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def say
+self /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+self /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+self /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+self /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb cattr_accessor :runs; self.runs = 0
+send_at /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb def send_at
+send_later /Users/brandon/projects/oss/delayed_job/lib/delayed/message_sending.rb def send_later
+set_default_run_at /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def set_default_run_at
+signup /Users/brandon/projects/oss/delayed_job/spec/performable_mailer_spec.rb def signup
+sleep_delay /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger, :log_queries
+source_root /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/delayed_job_generator.rb def self.source_root
+spin /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb def spin
+start /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def start
+success /Users/brandon/projects/oss/delayed_job/spec/sample_jobs.rb def success
+tell /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb def tell
+tell /Users/brandon/projects/oss/delayed_job/spec/spec_helper.rb def tell
+tell! /Users/brandon/projects/oss/delayed_job/spec/message_sending_spec.rb def tell!
+to_yaml /Users/brandon/projects/oss/delayed_job/lib/delayed/yaml_ext.rb def to_yaml
+to_yaml_properties /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def to_yaml_properties
+unlock /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def unlock
+up /Users/brandon/projects/oss/delayed_job/lib/generators/delayed_job/templates/migration.rb def self.up
+whatever /Users/brandon/projects/oss/delayed_job/spec/spec_helper.rb def whatever
+work_off /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/base.rb def work_off
+work_off /Users/brandon/projects/oss/delayed_job/lib/delayed/worker.rb def work_off
+worker_count /Users/brandon/projects/oss/delayed_job/lib/delayed/command.rb attr_accessor :worker_count
+yaml_new /Users/brandon/projects/oss/delayed_job/lib/delayed/backend/active_record.rb def self.yaml_new
+yaml_new /Users/brandon/projects/oss/delayed_job/lib/delayed/yaml_ext.rb def self.yaml_new
+yaml_tag_read_class /Users/brandon/projects/oss/delayed_job/lib/delayed/yaml_ext.rb def self.yaml_tag_read_class
+yaml_tag_read_class /Users/brandon/projects/oss/delayed_job/lib/delayed/yaml_ext.rb def yaml_tag_read_class
View
2  .rvmrc
@@ -0,0 +1,2 @@
+rvm_gemset_create_on_use_flag=1
+rvm gemset use ree-1.8.7@delayed_job
View
4 lib/delayed/backend/base.rb
@@ -16,7 +16,7 @@ def enqueue(*args)
raise ArgumentError, 'Cannot enqueue items which do not respond to perform'
end
- priority = args.first || 0
+ priority = args.first || Delayed::Worker.default_priority
run_at = args[1]
self.create(:payload_object => object, :priority => priority.to_i, :run_at => run_at)
end
@@ -108,4 +108,4 @@ def set_default_run_at
end
end
-end
+end
View
13 lib/delayed/message_sending.rb
@@ -4,14 +4,15 @@ def initialize(target, options)
@target = target
@options = options
end
-
+
def method_missing(method, *args)
- Job.create @options.merge(
- :payload_object => PerformableMethod.new(@target, method.to_sym, args)
- )
+ Job.create({
+ :payload_object => PerformableMethod.new(@target, method.to_sym, args),
+ :priority => Delayed::Worker.default_priority
+ }.merge(@options))
end
end
-
+
module MessageSending
def delay(options = {})
DelayProxy.new(self, options)
@@ -39,4 +40,4 @@ def handle_asynchronously(method)
end
end
end
-end
+end
View
3  lib/delayed/worker.rb
@@ -3,10 +3,11 @@
module Delayed
class Worker
- cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :sleep_delay, :logger
+ cattr_accessor :min_priority, :max_priority, :max_attempts, :max_run_time, :default_priority, :sleep_delay, :logger
self.sleep_delay = 5
self.max_attempts = 25
self.max_run_time = 4.hours
+ self.default_priority = 0
# By default failed jobs are destroyed after too many attempts. If you want to keep them around
# (perhaps to inspect the reason for the failure), set this to false.
View
6 spec/backend/shared_backend_spec.rb
@@ -6,6 +6,7 @@ def create_job(opts = {})
before do
Delayed::Worker.max_priority = nil
Delayed::Worker.min_priority = nil
+ Delayed::Worker.default_priority = 99
SimpleJob.runs = 0
end
@@ -32,6 +33,11 @@ def create_job(opts = {})
@job.priority.should == 5
end
+ it "should use default priority when it is not set" do
+ @job = @backend.enqueue SimpleJob.new
+ @job.priority.should == 99
+ end
+
it "should be able to set run_at when enqueuing items" do
later = @backend.db_time_now + 5.minutes
@job = @backend.enqueue SimpleJob.new, 5, later
View
51 spec/message_sending_spec.rb
@@ -0,0 +1,51 @@
+require 'spec_helper'
+
+describe Delayed::MessageSending do
+ describe "handle_asynchronously" do
+ class Story < ActiveRecord::Base
+ def tell!(arg)
+ end
+ handle_asynchronously :tell!
+ end
+
+ it "should alias original method" do
+ Story.new.should respond_to(:tell_without_delay!)
+ Story.new.should respond_to(:tell_with_delay!)
+ end
+
+ it "should create a PerformableMethod" do
+ story = Story.create!
+ lambda {
+ job = story.tell!(1)
+ job.payload_object.class.should == Delayed::PerformableMethod
+ job.payload_object.method.should == :tell_without_delay!
+ job.payload_object.args.should == [1]
+ }.should change { Delayed::Job.count }
+ end
+ end
+
+ context "delay" do
+ it "should create a new PerformableMethod job" do
+ lambda {
+ job = "hello".delay.count('l')
+ job.payload_object.class.should == Delayed::PerformableMethod
+ job.payload_object.method.should == :count
+ job.payload_object.args.should == ['l']
+ }.should change { Delayed::Job.count }.by(1)
+ end
+
+ it "should set default priority" do
+ Delayed::Worker.default_priority = 99
+ job = Object.delay.to_s
+ job.priority.should == 99
+ Delayed::Worker.default_priority = 0
+ end
+
+ it "should set job options" do
+ run_at = Time.parse('2010-05-03 12:55 AM')
+ job = Object.delay(:priority => 20, :run_at => run_at).to_s
+ job.run_at.should == run_at
+ job.priority.should == 20
+ end
+ end
+end
Please sign in to comment.
Something went wrong with that request. Please try again.