marty 1.0.24 → 1.0.25
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/app/models/marty/log.rb +14 -1
- data/lib/marty/version.rb +1 -1
- data/spec/dummy/app/models/gemini/helper.rb +14 -0
- data/spec/job_helper.rb +11 -0
- data/spec/lib/logger_spec.rb +55 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5118b11e2b94fade41047bae2dec32b1a3bcd15a
|
4
|
+
data.tar.gz: c022e1c2d19cdb84ca5403fc7898ebfeececaa88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 51e55d9a99ddce93de589b4873005c337b7ad8343659d1b8771b65a2146b2da68fc5757668eb05a420b06d45f866c61f635932e57f7ca4f06e798d08d5154f98
|
7
|
+
data.tar.gz: d097e901de04b56b8b073fb3e9459c952e7108f54261869c1e6501a56b4c473ef32793f4eae4deccf485f44ff92fcab6da79961af1737e8b69cf37a292da1029
|
data/app/models/marty/log.rb
CHANGED
@@ -36,7 +36,20 @@ class Marty::Log < Marty::Base
|
|
36
36
|
stmt.bind_param(3, Time.zone.now.to_f)
|
37
37
|
stmt.bind_param(4, details.pretty_inspect)
|
38
38
|
|
39
|
-
|
39
|
+
sent = false
|
40
|
+
retries = 3
|
41
|
+
delay = 0.1
|
42
|
+
until sent
|
43
|
+
begin
|
44
|
+
stmt.execute
|
45
|
+
sent = true
|
46
|
+
rescue SQLite3::BusyException
|
47
|
+
raise if retries == 0
|
48
|
+
retries -= 1
|
49
|
+
sleep delay
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
40
53
|
rescue => e
|
41
54
|
Marty::Util.logger.error("Marty::Logger failure: #{e.message}")
|
42
55
|
ensure
|
data/lib/marty/version.rb
CHANGED
@@ -41,4 +41,18 @@ class Gemini::Helper
|
|
41
41
|
|pt|
|
42
42
|
Mcfly.is_infinity pt
|
43
43
|
end
|
44
|
+
|
45
|
+
delorean_fn :testlog, sig: 2 do
|
46
|
+
|str, data|
|
47
|
+
10.times { Marty::Logger.info(str, data) }
|
48
|
+
true
|
49
|
+
end
|
50
|
+
delorean_fn :testaction, sig: 2 do
|
51
|
+
|str, id|
|
52
|
+
File.open("/tmp/logaction.txt", "a") do |f|
|
53
|
+
f.puts str % [id]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
44
58
|
end
|
data/spec/job_helper.rb
CHANGED
@@ -102,6 +102,16 @@ FAILER:
|
|
102
102
|
a = ERR('I had an error')
|
103
103
|
EOS
|
104
104
|
|
105
|
+
NAME_K = "PromiseK"
|
106
|
+
SCRIPT_K = <<EOS
|
107
|
+
LOGGER:
|
108
|
+
msgid =? nil
|
109
|
+
|
110
|
+
result = Gemini::Helper.testlog('message', [msgid]) &&
|
111
|
+
Gemini::Helper.testaction('message %d', msgid)
|
112
|
+
|
113
|
+
EOS
|
114
|
+
|
105
115
|
def promise_bodies
|
106
116
|
{
|
107
117
|
NAME_A => SCRIPT_A,
|
@@ -114,5 +124,6 @@ def promise_bodies
|
|
114
124
|
NAME_H => SCRIPT_H,
|
115
125
|
NAME_I => SCRIPT_I,
|
116
126
|
NAME_J => SCRIPT_J,
|
127
|
+
NAME_K => SCRIPT_K,
|
117
128
|
}
|
118
129
|
end
|
data/spec/lib/logger_spec.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
+
require 'job_helper'
|
2
3
|
|
3
4
|
module Marty
|
4
5
|
describe Logger do
|
@@ -97,4 +98,58 @@ module Marty
|
|
97
98
|
end
|
98
99
|
end
|
99
100
|
end
|
101
|
+
describe "Exercise" do
|
102
|
+
before(:all) do
|
103
|
+
@clean_file = "/tmp/clean_#{Process.pid}.psql"
|
104
|
+
save_clean_db(@clean_file)
|
105
|
+
# transactional fixtures interfere with queueing jobs
|
106
|
+
self.use_transactional_fixtures = false
|
107
|
+
|
108
|
+
# Needed here because shutting transactional fixtures off
|
109
|
+
# means we lose the globally set user
|
110
|
+
Mcfly.whodunnit = UserHelpers.system_user
|
111
|
+
|
112
|
+
Marty::Script.load_script_bodies(promise_bodies, Date.today)
|
113
|
+
start_delayed_job
|
114
|
+
end
|
115
|
+
after(:all) do
|
116
|
+
restore_clean_db(@clean_file)
|
117
|
+
stop_delayed_job
|
118
|
+
File.unlink("/tmp/logaction.txt")
|
119
|
+
Marty::Log.cleanup(0)
|
120
|
+
self.use_transactional_fixtures = true
|
121
|
+
end
|
122
|
+
|
123
|
+
it "handles heavy load" do
|
124
|
+
File.open(Rails.root.join("log/test.log")) do |f|
|
125
|
+
f.seek(0, IO::SEEK_END)
|
126
|
+
engine = Marty::ScriptSet.new.get_engine(NAME_K)
|
127
|
+
(1..1000).each do |i|
|
128
|
+
engine.background_eval("LOGGER", {"msgid" => i}, ["result"])
|
129
|
+
end
|
130
|
+
|
131
|
+
60.times do
|
132
|
+
running = Marty::Promise.uncached {
|
133
|
+
Marty::Promise.unscoped.where(result: nil)
|
134
|
+
}.count
|
135
|
+
break if running == 0
|
136
|
+
sleep 1
|
137
|
+
end
|
138
|
+
|
139
|
+
# each background_eval writes one line to /tmp/logaction.txt
|
140
|
+
# these must happen no matter what happens in Marty::Logger
|
141
|
+
expect(File.readlines("/tmp/logaction.txt").count).to eq(1000)
|
142
|
+
|
143
|
+
# each background_eval does 10 calls to Marty::Logger.
|
144
|
+
# failures (after 3 retries at 0.1 sec each) are logged to rails log
|
145
|
+
# the total count should be 10000
|
146
|
+
log_count = Marty::Log.all.count
|
147
|
+
failed_count = f.readlines.select do
|
148
|
+
|l|
|
149
|
+
l == "Marty::Logger failure: database is locked\n"
|
150
|
+
end.count
|
151
|
+
expect(log_count + failed_count).to eq(10000)
|
152
|
+
end
|
153
|
+
end
|
154
|
+
end
|
100
155
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: marty
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.25
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Arman Bostani
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2017-
|
17
|
+
date: 2017-04-20 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: pg
|