nexia_event_store 0.5.5 → 0.5.6
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/lib/event_store/snapshot.rb +41 -12
- data/lib/event_store/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e58e3e5c440193f2fd2dc15f54da89b583c44e8a
|
4
|
+
data.tar.gz: 1f8b0d7dcf3377900daba164bbe6fe22267d2302
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ca7056b0acca4000368fc3afe4f39c7e9bfca81c46123c1fb08ae6883f00c1976bbee15b677ed62ac8ed433b2a2e4bb6de3f6749b6e47279d7c30e1d10ac4435
|
7
|
+
data.tar.gz: 4eae746953a51324a03c8433a598ac417d09c679c4f89c941f1f76e3f9de041caa33e2f50b3f0d5c660f86ee578ab7e869f58528c0f70dc2cdcd76c52453b0b5
|
data/lib/event_store/snapshot.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require "logger"
|
2
|
+
|
1
3
|
module EventStore
|
2
4
|
class Snapshot
|
3
5
|
include Enumerable
|
@@ -31,22 +33,39 @@ module EventStore
|
|
31
33
|
auto_rebuild_snapshot(read_raw_snapshot).count
|
32
34
|
end
|
33
35
|
|
34
|
-
def each
|
35
|
-
|
36
|
-
|
36
|
+
def each(logger=default_logger)
|
37
|
+
logger.info { "#{self.class.name}#each for #{@aggregate.id}" }
|
38
|
+
t = Time.now
|
39
|
+
events_hash = auto_rebuild_snapshot(read_raw_snapshot(logger), logger)
|
40
|
+
logger.debug { "#{self.class.name}#auto_rebuild_snapshot took #{Time.now - t} seconds for #{@aggregate.id}" }
|
41
|
+
|
42
|
+
t = Time.now
|
43
|
+
result_hash = events_hash.inject([]) do |snapshot, (key, value)|
|
37
44
|
fully_qualified_name, _ = key.split(EventStore::SNAPSHOT_KEY_DELIMITER)
|
38
45
|
raw_event = value.split(EventStore::SNAPSHOT_DELIMITER)
|
39
46
|
version = raw_event.first.to_i
|
40
47
|
serialized_event = EventStore.unescape_bytea(raw_event[1])
|
41
48
|
occurred_at = Time.parse(raw_event.last)
|
42
49
|
snapshot + [SerializedEvent.new(fully_qualified_name, serialized_event, version, occurred_at)]
|
43
|
-
end
|
50
|
+
end
|
51
|
+
logger.debug { "#{self.class.name} serializing events took #{Time.now - t} seconds" }
|
52
|
+
result_hash.sort_by(&:version).each { |e| yield e }
|
44
53
|
end
|
45
54
|
|
46
|
-
def rebuild_snapshot!
|
55
|
+
def rebuild_snapshot!(logger=default_logger)
|
56
|
+
logger.info { "#{self.class.name}#rebuild_snapshot!" }
|
57
|
+
t = Time.now
|
47
58
|
delete_snapshot!
|
48
|
-
|
59
|
+
logger.debug { "Deleting snapshot took #{Time.now - t} seconds" }
|
60
|
+
t = Time.now
|
61
|
+
all_events = @aggregate.events.all
|
62
|
+
logger.debug { "getting all events took #{Time.now - t} seconds" }
|
63
|
+
t = Time.now
|
64
|
+
corrected_events = all_events.map{|e| e[:occurred_at] = TimeHacker.translate_occurred_at_from_local_to_gmt(e[:occurred_at]); e}
|
65
|
+
logger.debug { "correcting occurred_at on all events took #{Time.now - t} seconds" }
|
66
|
+
t = Time.now
|
49
67
|
store_snapshot(corrected_events)
|
68
|
+
logger.debug { "storing new snapshot took #{Time.now - t} seconds" }
|
50
69
|
end
|
51
70
|
|
52
71
|
def delete_snapshot!
|
@@ -76,6 +95,10 @@ module EventStore
|
|
76
95
|
|
77
96
|
private
|
78
97
|
|
98
|
+
def default_logger
|
99
|
+
Logger.new('/dev/null')
|
100
|
+
end
|
101
|
+
|
79
102
|
def snapshot_key(event)
|
80
103
|
[event[:fully_qualified_name], event[:sub_key] || EventStore::NO_SUB_KEY].join(EventStore::SNAPSHOT_KEY_DELIMITER)
|
81
104
|
end
|
@@ -103,20 +126,26 @@ module EventStore
|
|
103
126
|
current_versions
|
104
127
|
end
|
105
128
|
|
106
|
-
def read_raw_snapshot
|
107
|
-
|
129
|
+
def read_raw_snapshot(logger=default_logger)
|
130
|
+
t = Time.now
|
131
|
+
@redis.hgetall(snapshot_table).tap { |_snapshot|
|
132
|
+
logger.debug { "#{self.class.name}#read_raw_snapshot took #{Time.now - t} seconds" }
|
133
|
+
}
|
108
134
|
end
|
109
135
|
|
110
|
-
def auto_rebuild_snapshot(events_hash)
|
136
|
+
def auto_rebuild_snapshot(events_hash, logger=default_logger)
|
137
|
+
logger.info { "#{self.class.name}#auto_rebuild_snapshot(#{events_hash})" }
|
111
138
|
return events_hash unless events_hash.empty? #got it? return it
|
112
139
|
|
140
|
+
t = Time.now
|
141
|
+
logger.debug { "#{self.class.name} about to query db to see if anything is there" }
|
113
142
|
event = @aggregate.events.select(:version).limit(1).all
|
143
|
+
logger.debug { "#{self.class.name} took #{Time.now - t} seconds query db for version" }
|
114
144
|
return events_hash if event.nil? #return nil if no events in the ES
|
115
145
|
|
116
146
|
# so there are events in the ES but there is no redis snapshot
|
117
|
-
rebuild_snapshot!
|
118
|
-
events_hash = read_raw_snapshot
|
147
|
+
rebuild_snapshot!(logger)
|
148
|
+
events_hash = read_raw_snapshot(logger)
|
119
149
|
end
|
120
|
-
|
121
150
|
end
|
122
151
|
end
|
data/lib/event_store/version.rb
CHANGED