marty 1.0.24 → 1.0.25
Sign up to get free protection for your applications and to get access to all the features.
- 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
|