rpush 3.1.0 → 3.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -7
- data/lib/generators/rpush_migration_generator.rb +1 -0
- data/lib/generators/templates/rpush_3_1_1_updates.rb +15 -0
- data/lib/rpush/daemon/store/active_record.rb +13 -22
- data/lib/rpush/version.rb +1 -1
- data/spec/support/active_record_setup.rb +3 -1
- data/spec/unit/daemon/store/active_record_spec.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: deccc35a73da0b426daeb20fdbbe287be5e9df9e4b8c8fcd5ef2b69c6663da68
|
4
|
+
data.tar.gz: c7038ba47604bde8a322beff513ab999e1a2692e56bd83b983cb757301e7e590
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2a405b20855ef2d3c77f33c842058f95da8c7436a911712e221d5d199af82708dc8b5757f11219d2e31787311f8ea8f25384f85821c806f5492998436770743e
|
7
|
+
data.tar.gz: 4fdfe15b520768b4cbcc24c09c8859fa220fccfe18aed3a00680ff317d70ef95a4503f240262a1bdaf4aa0c4ea10be20478a4d1080e11b9b466458a8a68374c0
|
data/CHANGELOG.md
CHANGED
@@ -1,16 +1,35 @@
|
|
1
|
-
|
1
|
+
## HEAD
|
2
2
|
|
3
|
-
|
3
|
+
### Breaking Changes
|
4
|
+
|
5
|
+
- None
|
4
6
|
|
5
|
-
|
7
|
+
### Added
|
6
8
|
|
7
|
-
|
9
|
+
- None
|
8
10
|
|
9
|
-
|
11
|
+
### Fixed
|
12
|
+
|
13
|
+
- None
|
14
|
+
|
15
|
+
## 3.1.1 (2018-04-16)
|
16
|
+
|
17
|
+
### Breaking Changes
|
10
18
|
|
11
|
-
|
19
|
+
- None
|
20
|
+
|
21
|
+
### Added
|
22
|
+
|
23
|
+
- None
|
24
|
+
|
25
|
+
### Fixed
|
26
|
+
|
27
|
+
- Database deadlock [#200](https://github.com/rpush/rpush/issues/200) (by [@loadhigh](https://github.com/loadhigh) in [#428](https://github.com/rpush/rpush/issues/428))
|
28
|
+
|
29
|
+
### Enhancements
|
12
30
|
|
13
|
-
-
|
31
|
+
- Change the index on `rpush_notifications` to minimize number of locked records and pre-sort the records ([#428](https://github.com/rpush/rpush/issues/428) by [@loadhigh](https://github.com/loadhigh))
|
32
|
+
- Minimize the locking duration by moving the row dump code outside of the transaction ([#428](https://github.com/rpush/rpush/issues/428) by [@loadhigh](https://github.com/loadhigh))
|
14
33
|
|
15
34
|
## 3.1.0 (2018-04-11)
|
16
35
|
|
@@ -45,6 +45,7 @@ class RpushMigrationGenerator < Rails::Generators::Base
|
|
45
45
|
add_rpush_migration('rpush_3_0_0_updates')
|
46
46
|
add_rpush_migration('rpush_3_0_1_updates')
|
47
47
|
add_rpush_migration('rpush_3_1_0_add_pushy')
|
48
|
+
add_rpush_migration('rpush_3_1_1_updates')
|
48
49
|
end
|
49
50
|
|
50
51
|
protected
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class Rpush311Updates < ActiveRecord::VERSION::MAJOR >= 5 ? ActiveRecord::Migration[5.0] : ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
change_table :rpush_notifications do |t|
|
4
|
+
t.remove_index name: 'index_rpush_notifications_multi'
|
5
|
+
t.index [:delivered, :failed, :processing, :deliver_after, :created_at], name: 'index_rpush_notifications_multi', where: 'NOT delivered AND NOT failed'
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.down
|
10
|
+
change_table :rpush_notifications do |t|
|
11
|
+
t.remove_index name: 'index_rpush_notifications_multi'
|
12
|
+
t.index [:delivered, :failed], name: 'index_rpush_notifications_multi', where: 'NOT delivered AND NOT failed'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -11,7 +11,6 @@ module Rpush
|
|
11
11
|
DEFAULT_MARK_OPTIONS = { persist: true }
|
12
12
|
|
13
13
|
def initialize
|
14
|
-
@using_oracle = adapter_name =~ /oracle/
|
15
14
|
reopen_log unless Rpush.config.embedded
|
16
15
|
end
|
17
16
|
|
@@ -29,13 +28,21 @@ module Rpush
|
|
29
28
|
|
30
29
|
def deliverable_notifications(limit)
|
31
30
|
with_database_reconnect_and_retry do
|
32
|
-
Rpush::Client::ActiveRecord::Notification.transaction do
|
31
|
+
notifications = Rpush::Client::ActiveRecord::Notification.transaction do
|
33
32
|
relation = ready_for_delivery
|
34
33
|
relation = relation.limit(limit)
|
35
|
-
|
36
|
-
|
37
|
-
|
34
|
+
ids = relation.lock(true).ids
|
35
|
+
unless ids.empty?
|
36
|
+
relation = Rpush::Client::ActiveRecord::Notification.where(id: ids)
|
37
|
+
# mark processing
|
38
|
+
relation.update_all(processing: true, updated_at: Time.now)
|
39
|
+
relation
|
40
|
+
else
|
41
|
+
[]
|
42
|
+
end
|
38
43
|
end
|
44
|
+
|
45
|
+
notifications.to_a
|
39
46
|
end
|
40
47
|
end
|
41
48
|
|
@@ -190,23 +197,7 @@ module Rpush
|
|
190
197
|
|
191
198
|
def ready_for_delivery
|
192
199
|
relation = Rpush::Client::ActiveRecord::Notification.where('processing = ? AND delivered = ? AND failed = ? AND (deliver_after IS NULL OR deliver_after < ?)', false, false, false, Time.now)
|
193
|
-
|
194
|
-
end
|
195
|
-
|
196
|
-
def mark_processing(notifications)
|
197
|
-
return if notifications.empty?
|
198
|
-
|
199
|
-
ids = []
|
200
|
-
notifications.each do |n|
|
201
|
-
n.processing = true
|
202
|
-
ids << n.id
|
203
|
-
end
|
204
|
-
Rpush::Client::ActiveRecord::Notification.where(id: ids).update_all(['processing = ?', true])
|
205
|
-
end
|
206
|
-
|
207
|
-
def claim(relation)
|
208
|
-
notifications = relation.lock(true).to_a
|
209
|
-
@using_oracle ? notifications.sort_by(&:created_at) : notifications
|
200
|
+
relation.order('deliver_after ASC, created_at ASC')
|
210
201
|
end
|
211
202
|
|
212
203
|
def adapter_name
|
data/lib/rpush/version.rb
CHANGED
@@ -34,6 +34,7 @@ require 'generators/templates/rpush_2_7_0_updates'
|
|
34
34
|
require 'generators/templates/rpush_3_0_0_updates'
|
35
35
|
require 'generators/templates/rpush_3_0_1_updates'
|
36
36
|
require 'generators/templates/rpush_3_1_0_add_pushy'
|
37
|
+
require 'generators/templates/rpush_3_1_1_updates'
|
37
38
|
|
38
39
|
migrations = [
|
39
40
|
AddRpush,
|
@@ -43,7 +44,8 @@ migrations = [
|
|
43
44
|
Rpush270Updates,
|
44
45
|
Rpush300Updates,
|
45
46
|
Rpush301Updates,
|
46
|
-
Rpush310AddPushy
|
47
|
+
Rpush310AddPushy,
|
48
|
+
Rpush311Updates
|
47
49
|
]
|
48
50
|
|
49
51
|
unless ENV['TRAVIS']
|
@@ -63,7 +63,7 @@ describe Rpush::Daemon::Store::ActiveRecord do
|
|
63
63
|
Rpush.config.batch_size = 5000
|
64
64
|
relation = double.as_null_object
|
65
65
|
expect(relation).to receive(:limit).with(5000)
|
66
|
-
allow(relation).to receive_messages(
|
66
|
+
allow(relation).to receive_messages(pluck: [])
|
67
67
|
allow(store).to receive_messages(ready_for_delivery: relation)
|
68
68
|
store.deliverable_notifications(Rpush.config.batch_size)
|
69
69
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rpush
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ian Leitch
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-04-
|
11
|
+
date: 2018-04-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: multi_json
|
@@ -371,6 +371,7 @@ files:
|
|
371
371
|
- lib/generators/templates/rpush_3_0_0_updates.rb
|
372
372
|
- lib/generators/templates/rpush_3_0_1_updates.rb
|
373
373
|
- lib/generators/templates/rpush_3_1_0_add_pushy.rb
|
374
|
+
- lib/generators/templates/rpush_3_1_1_updates.rb
|
374
375
|
- lib/rpush.rb
|
375
376
|
- lib/rpush/apns_feedback.rb
|
376
377
|
- lib/rpush/cli.rb
|