Hello community,
here is the log from the commit of package rubygem-delayed_job_active_record
for openSUSE:Factory checked in at 2018-04-19 15:33:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rubygem-delayed_job_active_record (Old)
and /work/SRC/openSUSE:Factory/.rubygem-delayed_job_active_record.new
(New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "rubygem-delayed_job_active_record"
Thu Apr 19 15:33:21 2018 rev:17 rq:598481 version:4.1.3
Changes:
--------
---
/work/SRC/openSUSE:Factory/rubygem-delayed_job_active_record/rubygem-delayed_job_active_record.changes
2017-06-02 10:33:59.158363652 +0200
+++
/work/SRC/openSUSE:Factory/.rubygem-delayed_job_active_record.new/rubygem-delayed_job_active_record.changes
2018-04-19 15:33:23.673422432 +0200
@@ -1,0 +2,6 @@
+Thu Apr 19 09:51:13 UTC 2018 - [email protected]
+
+- updated to version 4.1.3
+ no changelog found
+
+-------------------------------------------------------------------
Old:
----
delayed_job_active_record-4.1.2.gem
New:
----
delayed_job_active_record-4.1.3.gem
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ rubygem-delayed_job_active_record.spec ++++++
--- /var/tmp/diff_new_pack.s2stpD/_old 2018-04-19 15:33:24.293396854 +0200
+++ /var/tmp/diff_new_pack.s2stpD/_new 2018-04-19 15:33:24.297396688 +0200
@@ -1,7 +1,7 @@
#
# spec file for package rubygem-delayed_job_active_record
#
-# Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -24,7 +24,7 @@
#
Name: rubygem-delayed_job_active_record
-Version: 4.1.2
+Version: 4.1.3
Release: 0
%define mod_name delayed_job_active_record
%define mod_full_name %{mod_name}-%{version}
@@ -33,7 +33,7 @@
BuildRequires: %{ruby}
BuildRequires: ruby-macros >= 5
Url: http://github.com/collectiveidea/delayed_job_active_record
-Source: http://rubygems.org/gems/%{mod_full_name}.gem
+Source: https://rubygems.org/gems/%{mod_full_name}.gem
Source1: gem2rpm.yml
Summary: ActiveRecord backend for DelayedJob
License: MIT
++++++ delayed_job_active_record-4.1.2.gem ->
delayed_job_active_record-4.1.3.gem ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/README.md new/README.md
--- old/README.md 2017-05-27 18:42:35.000000000 +0200
+++ new/README.md 2018-04-13 20:46:27.000000000 +0200
@@ -1,7 +1,7 @@
**If you're viewing this at
https://github.com/collectiveidea/delayed_job_active_record,
you're reading the documentation for the master branch.
[View documentation for the latest release
-(4.1.2).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.2)**
+(4.1.3).](https://github.com/collectiveidea/delayed_job_active_record/tree/v4.1.3)**
# DelayedJob ActiveRecord Backend
Binary files old/checksums.yaml.gz and new/checksums.yaml.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/delayed_job_active_record.gemspec
new/delayed_job_active_record.gemspec
--- old/delayed_job_active_record.gemspec 2017-05-27 18:42:35.000000000
+0200
+++ new/delayed_job_active_record.gemspec 2018-04-13 20:46:27.000000000
+0200
@@ -1,14 +1,14 @@
Gem::Specification.new do |spec|
- spec.add_dependency "activerecord", [">= 3.0", "< 5.2"]
+ spec.add_dependency "activerecord", [">= 3.0", "< 5.3"]
spec.add_dependency "delayed_job", [">= 3.0", "< 5"]
spec.authors = ["Brian Ryckbost", "Matt Griffin", "Erik
Michaels-Ober"]
spec.description = "ActiveRecord backend for Delayed::Job, originally
authored by Tobias Lütke"
spec.email = ["[email protected]", "[email protected]",
"[email protected]"]
- spec.files = %w(CONTRIBUTING.md LICENSE.md README.md
delayed_job_active_record.gemspec) + Dir["lib/**/*.rb"]
+ spec.files = %w[CONTRIBUTING.md LICENSE.md README.md
delayed_job_active_record.gemspec] + Dir["lib/**/*.rb"]
spec.homepage =
"http://github.com/collectiveidea/delayed_job_active_record"
spec.licenses = ["MIT"]
spec.name = "delayed_job_active_record"
spec.require_paths = ["lib"]
spec.summary = "ActiveRecord backend for DelayedJob"
- spec.version = "4.1.2"
+ spec.version = "4.1.3"
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/delayed/backend/active_record.rb
new/lib/delayed/backend/active_record.rb
--- old/lib/delayed/backend/active_record.rb 2017-05-27 18:42:35.000000000
+0200
+++ new/lib/delayed/backend/active_record.rb 2018-04-13 20:46:27.000000000
+0200
@@ -10,7 +10,9 @@
end
def reserve_sql_strategy=(val)
- raise ArgumentError, "allowed values are :optimized_sql or
:default_sql" unless val == :optimized_sql || val == :default_sql
+ if !(val == :optimized_sql || val == :default_sql)
+ raise ArgumentError, "allowed values are :optimized_sql or
:default_sql"
+ end
@reserve_sql_strategy = val
end
end
@@ -34,6 +36,9 @@
end
scope :by_priority, lambda { order("priority ASC, run_at ASC") }
+ scope :min_priority, lambda { where("priority >= ?",
Worker.min_priority) if Worker.min_priority }
+ scope :max_priority, lambda { where("priority <= ?",
Worker.max_priority) if Worker.max_priority }
+ scope :for_queues, lambda { |queues = Worker.queues| where(queue:
queues) if Array(queues).any? }
before_save :set_default_run_at
@@ -45,7 +50,12 @@
set_delayed_job_table_name
def self.ready_to_run(worker_name, max_run_time)
- where("(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR
locked_by = ?) AND failed_at IS NULL", db_time_now, db_time_now - max_run_time,
worker_name)
+ where(
+ "(run_at <= ? AND (locked_at IS NULL OR locked_at < ?) OR
locked_by = ?) AND failed_at IS NULL",
+ db_time_now,
+ db_time_now - max_run_time,
+ worker_name
+ )
end
def self.before_fork
@@ -61,15 +71,13 @@
where(locked_by: worker_name).update_all(locked_by: nil, locked_at:
nil)
end
- def self.reserve(worker, max_run_time = Worker.max_run_time) #
rubocop:disable CyclomaticComplexity
- # scope to filter to records that are "ready to run"
- ready_scope = ready_to_run(worker.name, max_run_time)
-
- # scope to filter to the single next eligible job
- ready_scope = ready_scope.where("priority >= ?",
Worker.min_priority) if Worker.min_priority
- ready_scope = ready_scope.where("priority <= ?",
Worker.max_priority) if Worker.max_priority
- ready_scope = ready_scope.where(queue: Worker.queues) if
Worker.queues.any?
- ready_scope = ready_scope.by_priority
+ def self.reserve(worker, max_run_time = Worker.max_run_time)
+ ready_scope =
+ ready_to_run(worker.name, max_run_time)
+ .min_priority
+ .max_priority
+ .for_queues
+ .by_priority
reserve_with_scope(ready_scope, worker, db_time_now)
end
@@ -88,41 +96,12 @@
def self.reserve_with_scope_using_optimized_sql(ready_scope, worker,
now)
case connection.adapter_name
- when "PostgreSQL"
- # Custom SQL required for PostgreSQL because postgres does not
support UPDATE...LIMIT
- # This locks the single record 'FOR UPDATE' in the subquery
- #
http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE
- # Note: active_record would attempt to generate UPDATE...LIMIT like
- # SQL for Postgres if we use a .limit() filter, but it would not
- # use 'FOR UPDATE' and we would have many locking conflicts
- quoted_table_name = connection.quote_table_name(table_name)
- subquery_sql =
ready_scope.limit(1).lock(true).select("id").to_sql
- reserved = find_by_sql(["UPDATE #{quoted_table_name} SET
locked_at = ?, locked_by = ? WHERE id IN (#{subquery_sql}) RETURNING *", now,
worker.name])
- reserved[0]
+ when "PostgreSQL", "PostGIS"
+ reserve_with_scope_using_optimized_postgres(ready_scope, worker,
now)
when "MySQL", "Mysql2"
- # Removing the millisecond precision from now(time object)
- # MySQL 5.6.4 onwards millisecond precision exists, but the
- # datetime object created doesn't have precision, so discarded
- # while updating. But during the where clause, for mysql(>=5.6.4),
- # it queries with precision as well. So removing the precision
- now = now.change(usec: 0)
- # This works on MySQL and possibly some other DBs that support
- # UPDATE...LIMIT. It uses separate queries to lock and return the
job
- count = ready_scope.limit(1).update_all(locked_at: now, locked_by:
worker.name)
- return nil if count == 0
- where(locked_at: now, locked_by: worker.name, failed_at: nil).first
+ reserve_with_scope_using_optimized_mysql(ready_scope, worker, now)
when "MSSQL", "Teradata"
- # The MSSQL driver doesn't generate a limit clause when update_all
- # is called directly
- subsubquery_sql = ready_scope.limit(1).to_sql
- # select("id") doesn't generate a subquery, so force a subquery
- subquery_sql = "SELECT id FROM (#{subsubquery_sql}) AS x"
- quoted_table_name = connection.quote_table_name(table_name)
- sql = ["UPDATE #{quoted_table_name} SET locked_at = ?, locked_by =
? WHERE id IN (#{subquery_sql})", now, worker.name]
- count = connection.execute(sanitize_sql(sql))
- return nil if count == 0
- # MSSQL JDBC doesn't support OUTPUT INSERTED.* for returning a
result set, so query locked row
- where(locked_at: now, locked_by: worker.name, failed_at: nil).first
+ reserve_with_scope_using_optimized_mssql(ready_scope, worker, now)
# Fallback for unknown / other DBMS
else
reserve_with_scope_using_default_sql(ready_scope, worker, now)
@@ -137,6 +116,48 @@
end
end
+ def self.reserve_with_scope_using_optimized_postgres(ready_scope,
worker, now)
+ # Custom SQL required for PostgreSQL because postgres does not
support UPDATE...LIMIT
+ # This locks the single record 'FOR UPDATE' in the subquery
+ #
http://www.postgresql.org/docs/9.0/static/sql-select.html#SQL-FOR-UPDATE-SHARE
+ # Note: active_record would attempt to generate UPDATE...LIMIT like
+ # SQL for Postgres if we use a .limit() filter, but it would not
+ # use 'FOR UPDATE' and we would have many locking conflicts
+ quoted_name = connection.quote_table_name(table_name)
+ subquery = ready_scope.limit(1).lock(true).select("id").to_sql
+ sql = "UPDATE #{quoted_name} SET locked_at = ?, locked_by =
? WHERE id IN (#{subquery}) RETURNING *"
+ reserved = find_by_sql([sql, now, worker.name])
+ reserved[0]
+ end
+
+ def self.reserve_with_scope_using_optimized_mysql(ready_scope, worker,
now)
+ # Removing the millisecond precision from now(time object)
+ # MySQL 5.6.4 onwards millisecond precision exists, but the
+ # datetime object created doesn't have precision, so discarded
+ # while updating. But during the where clause, for mysql(>=5.6.4),
+ # it queries with precision as well. So removing the precision
+ now = now.change(usec: 0)
+ # This works on MySQL and possibly some other DBs that support
+ # UPDATE...LIMIT. It uses separate queries to lock and return the job
+ count = ready_scope.limit(1).update_all(locked_at: now, locked_by:
worker.name)
+ return nil if count == 0
+ where(locked_at: now, locked_by: worker.name, failed_at: nil).first
+ end
+
+ def self.reserve_with_scope_using_optimized_mssql(ready_scope, worker,
now)
+ # The MSSQL driver doesn't generate a limit clause when update_all
+ # is called directly
+ subsubquery_sql = ready_scope.limit(1).to_sql
+ # select("id") doesn't generate a subquery, so force a subquery
+ subquery_sql = "SELECT id FROM (#{subsubquery_sql}) AS x"
+ quoted_table_name = connection.quote_table_name(table_name)
+ sql = "UPDATE #{quoted_table_name} SET locked_at = ?, locked_by = ?
WHERE id IN (#{subquery_sql})"
+ count = connection.execute(sanitize_sql([sql, now, worker.name]))
+ return nil if count == 0
+ # MSSQL JDBC doesn't support OUTPUT INSERTED.* for returning a
result set, so query locked row
+ where(locked_at: now, locked_by: worker.name, failed_at: nil).first
+ end
+
# Get the current time (GMT or local depending on DB)
# Note: This does not ping the DB to get the time, so all your clients
# must have syncronized clocks.
@@ -146,7 +167,7 @@
elsif ::ActiveRecord::Base.default_timezone == :utc
Time.now.utc
else
- Time.now
+ Time.now # rubocop:disable Rails/TimeZone
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/lib/generators/delayed_job/active_record_generator.rb
new/lib/generators/delayed_job/active_record_generator.rb
--- old/lib/generators/delayed_job/active_record_generator.rb 2017-05-27
18:42:35.000000000 +0200
+++ new/lib/generators/delayed_job/active_record_generator.rb 2018-04-13
20:46:27.000000000 +0200
@@ -22,9 +22,7 @@
private
def migration_version
- if ActiveRecord::VERSION::MAJOR >= 5
- "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]"
- end
+ "[#{ActiveRecord::VERSION::MAJOR}.#{ActiveRecord::VERSION::MINOR}]" if
ActiveRecord::VERSION::MAJOR >= 5
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/lib/generators/delayed_job/upgrade_generator.rb
new/lib/generators/delayed_job/upgrade_generator.rb
--- old/lib/generators/delayed_job/upgrade_generator.rb 2017-05-27
18:42:35.000000000 +0200
+++ new/lib/generators/delayed_job/upgrade_generator.rb 2018-04-13
20:46:27.000000000 +0200
@@ -7,7 +7,11 @@
module DelayedJob
class UpgradeGenerator < ActiveRecordGenerator
def create_migration_file
- migration_template "upgrade_migration.rb",
"db/migrate/add_queue_to_delayed_jobs.rb", migration_version: migration_version
+ migration_template(
+ "upgrade_migration.rb",
+ "db/migrate/add_queue_to_delayed_jobs.rb",
+ migration_version: migration_version
+ )
end
end
end
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/metadata new/metadata
--- old/metadata 2017-05-27 18:42:35.000000000 +0200
+++ new/metadata 2018-04-13 20:46:27.000000000 +0200
@@ -1,7 +1,7 @@
--- !ruby/object:Gem::Specification
name: delayed_job_active_record
version: !ruby/object:Gem::Version
- version: 4.1.2
+ version: 4.1.3
platform: ruby
authors:
- Brian Ryckbost
@@ -10,7 +10,7 @@
autorequire:
bindir: bin
cert_chain: []
-date: 2017-05-27 00:00:00.000000000 Z
+date: 2018-04-13 00:00:00.000000000 Z
dependencies:
- !ruby/object:Gem::Dependency
name: activerecord
@@ -21,7 +21,7 @@
version: '3.0'
- - "<"
- !ruby/object:Gem::Version
- version: '5.2'
+ version: '5.3'
type: :runtime
prerelease: false
version_requirements: !ruby/object:Gem::Requirement
@@ -31,7 +31,7 @@
version: '3.0'
- - "<"
- !ruby/object:Gem::Version
- version: '5.2'
+ version: '5.3'
- !ruby/object:Gem::Dependency
name: delayed_job
requirement: !ruby/object:Gem::Requirement
@@ -93,7 +93,7 @@
version: '0'
requirements: []
rubyforge_project:
-rubygems_version: 2.6.11
+rubygems_version: 2.7.6
signing_key:
specification_version: 4
summary: ActiveRecord backend for DelayedJob