pg_eventstore 1.0.0.rc2 → 1.0.0
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ebd667d51438040640b8edeee4d75fe2a88f6f0605c33f7dcb70a5a250d92efd
|
4
|
+
data.tar.gz: 5ca82322415c77be0ef1a44efe594bd6a3813552157e7bffcc67d64f8703718e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b339460c69fd29a43b23cc9d48847527e24a0c3a32b2524f03bec348058f1bad8873508cdf219d83a27ed4fefdb04ef3691aaeca9f67e93d78fff9556fbd1857
|
7
|
+
data.tar.gz: a122c0c6dcd1a65a12fbdf76df47167d26a727db6df47bd38122a0943622433dd410430450fcc9355bfc1ceb2b7f312eed03f1f25ababa4e897d56f8f3f60b76
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
## [1.0.0]
|
4
|
+
|
5
|
+
- Improve performance of Subscription#update by relaxing transaction isolation level
|
6
|
+
- Fix calculation of events number in the subscription's chunk
|
7
|
+
|
3
8
|
## [1.0.0.rc2]
|
4
9
|
|
5
10
|
- Implement confirmation dialog for sensitive admin UI actions
|
@@ -84,7 +84,7 @@ module PgEventstore
|
|
84
84
|
end.join(', ')
|
85
85
|
sql =
|
86
86
|
"UPDATE subscriptions SET #{attrs_sql} WHERE id = $#{attrs.keys.size + 1} RETURNING *"
|
87
|
-
updated_attrs = transaction_queries.transaction do
|
87
|
+
updated_attrs = transaction_queries.transaction(:read_committed) do
|
88
88
|
pg_result = connection.with do |conn|
|
89
89
|
conn.exec_params(sql, [*attrs.values, id])
|
90
90
|
end
|
@@ -3,6 +3,14 @@
|
|
3
3
|
module PgEventstore
|
4
4
|
# @!visibility private
|
5
5
|
class TransactionQueries
|
6
|
+
ISOLATION_LEVELS = {
|
7
|
+
read_committed: 'READ COMMITTED',
|
8
|
+
repeatable_read: 'REPEATABLE READ',
|
9
|
+
serializable: 'SERIALIZABLE'
|
10
|
+
}.tap do |h|
|
11
|
+
h.default = h[:serializable]
|
12
|
+
end.freeze
|
13
|
+
|
6
14
|
attr_reader :connection
|
7
15
|
private :connection
|
8
16
|
|
@@ -11,15 +19,16 @@ module PgEventstore
|
|
11
19
|
@connection = connection
|
12
20
|
end
|
13
21
|
|
22
|
+
# @param level [Symbol] transaction isolation level
|
14
23
|
# @return [void]
|
15
|
-
def transaction
|
24
|
+
def transaction(level = :serializable)
|
16
25
|
connection.with do |conn|
|
17
26
|
# We are inside a transaction already - no need to start another one
|
18
27
|
if [PG::PQTRANS_ACTIVE, PG::PQTRANS_INTRANS].include?(conn.transaction_status)
|
19
28
|
next yield
|
20
29
|
end
|
21
30
|
|
22
|
-
pg_transaction(conn) do
|
31
|
+
pg_transaction(ISOLATION_LEVELS[level], conn) do
|
23
32
|
yield
|
24
33
|
end
|
25
34
|
end
|
@@ -27,11 +36,12 @@ module PgEventstore
|
|
27
36
|
|
28
37
|
private
|
29
38
|
|
39
|
+
# @param level [String] PostgreSQL transaction isolation level
|
30
40
|
# @param pg_connection [PG::Connection]
|
31
41
|
# @return [void]
|
32
|
-
def pg_transaction(pg_connection)
|
42
|
+
def pg_transaction(level, pg_connection)
|
33
43
|
pg_connection.transaction do
|
34
|
-
pg_connection.exec("SET TRANSACTION ISOLATION LEVEL
|
44
|
+
pg_connection.exec("SET TRANSACTION ISOLATION LEVEL #{level}")
|
35
45
|
yield
|
36
46
|
end
|
37
47
|
rescue PG::TRSerializationFailure, PG::TRDeadlockDetected
|
@@ -55,8 +55,8 @@ module PgEventstore
|
|
55
55
|
def estimate_events_number
|
56
56
|
return INITIAL_EVENTS_PER_CHUNK if @stats.average_event_processing_time.zero?
|
57
57
|
|
58
|
-
events_per_chunk = @subscription.chunk_query_interval / @stats.average_event_processing_time
|
59
|
-
[events_per_chunk, MAX_EVENTS_PER_CHUNK].min - @events_processor.events_left_in_chunk
|
58
|
+
events_per_chunk = (@subscription.chunk_query_interval / @stats.average_event_processing_time).round
|
59
|
+
[[events_per_chunk, MAX_EVENTS_PER_CHUNK].min - @events_processor.events_left_in_chunk, 0].max
|
60
60
|
end
|
61
61
|
|
62
62
|
# @return [void]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pg_eventstore
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ivan Dzyzenko
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-05-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pg
|