td-logger 0.3.11 → 0.3.12

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.
data/ChangeLog CHANGED
@@ -1,4 +1,12 @@
1
1
 
2
+ == 2012-03-31 version 0.3.12
3
+
4
+ * TreasureDataLogger#close shows a error message if upload failed
5
+ instead of raising errors
6
+ * TreasureDataLogger#close deletes uploaded queue entry
7
+ * Changed increment storategy of flush_interval from += 10 to ** 2
8
+
9
+
2
10
  == 2012-03-12 version 0.3.11
3
11
 
4
12
  * Added TD.event.post_with_time(action, record, time) method
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.11
1
+ 0.3.12
@@ -9,7 +9,7 @@ class TreasureDataLogger < Fluent::Logger::LoggerBase
9
9
  obj = allocate
10
10
  obj.instance_eval { initialize(*args, &block) }
11
11
  dc = DelegateClass(obj.class).new(obj)
12
- ObjectSpace.define_finalizer(dc, finalizer(obj))
12
+ ObjectSpace.define_finalizer(obj, finalizer(obj))
13
13
  dc
14
14
  end
15
15
 
@@ -66,7 +66,7 @@ class TreasureDataLogger < Fluent::Logger::LoggerBase
66
66
  @chunk_limit = 8*1024*1024
67
67
  @queue_limit = 50
68
68
 
69
- @flush_interval = 10
69
+ @flush_interval = 2
70
70
  @max_flush_interval = 300
71
71
  @retry_wait = 1.0
72
72
  @retry_limit = 12
@@ -91,12 +91,24 @@ class TreasureDataLogger < Fluent::Logger::LoggerBase
91
91
  }
92
92
  @upload_thread.join if @upload_thread
93
93
 
94
- @map.each {|(db,table),buffer|
95
- data = buffer.flush!
96
- upload(db, table, data)
94
+ @queue.reject! {|db,table,data|
95
+ begin
96
+ upload(db, table, data)
97
+ true
98
+ rescue
99
+ @logger.error "Failed to upload event logs to Treasure Data, trashed: #{$!}"
100
+ false
101
+ end
97
102
  }
98
- @queue.each {|db,table,data|
99
- upload(ddb, data, table)
103
+ @map.reject! {|(db,table),buffer|
104
+ data = buffer.flush!
105
+ begin
106
+ upload(db, table, data)
107
+ true
108
+ rescue
109
+ @logger.error "Failed to upload event logs to Treasure Data, trashed: #{$!}"
110
+ false
111
+ end
100
112
  }
101
113
  end
102
114
  end
@@ -118,18 +130,13 @@ class TreasureDataLogger < Fluent::Logger::LoggerBase
118
130
  now = Time.now.to_i
119
131
 
120
132
  if @next_time <= now || (@flush_now && @error_count == 0)
121
- @mutex.unlock
122
- begin
123
- flushed = try_flush
124
- ensure
125
- @mutex.lock
126
- end
133
+ flushed = try_flush
127
134
  @flush_now = false
128
135
  end
129
136
 
130
137
  if @error_count == 0
131
138
  if flushed && @flush_interval < @max_flush_interval
132
- @flush_interval = [@flush_interval + 60, @max_flush_interval].min
139
+ @flush_interval = [@flush_interval ** 2, @max_flush_interval].min
133
140
  end
134
141
  next_wait = @flush_interval
135
142
  else
@@ -173,7 +180,6 @@ class TreasureDataLogger < Fluent::Logger::LoggerBase
173
180
 
174
181
  def append(data)
175
182
  @gz << data
176
- map = MessagePack.unpack(data)
177
183
  end
178
184
 
179
185
  def size
@@ -249,6 +255,7 @@ class TreasureDataLogger < Fluent::Logger::LoggerBase
249
255
  buffer.append(data)
250
256
 
251
257
  if buffer.size > @chunk_limit
258
+ # flush this buffer
252
259
  data = buffer.flush!
253
260
  @queue << [db, table, data]
254
261
  @map.delete(key)
@@ -264,43 +271,55 @@ class TreasureDataLogger < Fluent::Logger::LoggerBase
264
271
  true
265
272
  end
266
273
 
274
+ # assume @mutex is locked
267
275
  def try_flush
268
- @mutex.synchronize do
269
- if @queue.empty?
270
- @map.reject! {|(db,table),buffer|
271
- data = buffer.flush!
272
- @queue << [db, table, data]
273
- }
274
- end
276
+ # force flush small buffers if queue is empty
277
+ if @queue.empty?
278
+ @map.reject! {|(db,table),buffer|
279
+ data = buffer.flush!
280
+ @queue << [db, table, data]
281
+ }
282
+ end
283
+
284
+ if @queue.empty?
285
+ return false
275
286
  end
276
287
 
277
288
  flushed = false
278
289
 
279
- until @queue.empty?
280
- db, table, data = @queue.first
290
+ @mutex.unlock
291
+ begin
292
+ until @queue.empty?
293
+ db, table, data = @queue.first
281
294
 
282
- begin
283
- upload(db, table, data)
284
- @queue.shift
285
- @error_count = 0
286
- flushed = true
287
- rescue
288
- if @error_count < @retry_limit
289
- @logger.error "Failed to upload event logs to Treasure Data, retrying: #{$!}"
290
- @error_count += 1
291
- else
292
- @logger.error "Failed to upload event logs to Treasure Data, trashed: #{$!}"
293
- $!.backtrace.each {|bt|
294
- @logger.info bt
295
- }
295
+ begin
296
+ upload(db, table, data)
297
+ @queue.shift
296
298
  @error_count = 0
297
- @queue.clear
299
+ flushed = true
300
+
301
+ rescue
302
+ if @error_count < @retry_limit
303
+ @logger.error "Failed to upload event logs to Treasure Data, retrying: #{$!}"
304
+ @error_count += 1
305
+ else
306
+ @logger.error "Failed to upload event logs to Treasure Data, trashed: #{$!}"
307
+ $!.backtrace.each {|bt|
308
+ @logger.info bt
309
+ }
310
+ @error_count = 0
311
+ @queue.clear
312
+ end
313
+ return nil
314
+
298
315
  end
299
- return
300
316
  end
317
+
318
+ ensure
319
+ @mutex.lock
301
320
  end
302
321
 
303
- flushed
322
+ return flushed
304
323
  end
305
324
 
306
325
  def upload(db, table, data)
@@ -1,7 +1,7 @@
1
1
  module TreasureData
2
2
  module Logger
3
3
 
4
- VERSION = '0.3.11'
4
+ VERSION = '0.3.12'
5
5
 
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: td-logger
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.11
4
+ version: 0.3.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-12 00:00:00.000000000Z
12
+ date: 2012-05-31 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: msgpack
16
- requirement: &70348710334220 !ruby/object:Gem::Requirement
16
+ requirement: &70152935365260 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.4.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70348710334220
24
+ version_requirements: *70152935365260
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: td-client
27
- requirement: &70348710333700 !ruby/object:Gem::Requirement
27
+ requirement: &70152935363700 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 0.8.4
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70348710333700
35
+ version_requirements: *70152935363700
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: fluent-logger
38
- requirement: &70348710333180 !ruby/object:Gem::Requirement
38
+ requirement: &70152935337300 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.4.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70348710333180
46
+ version_requirements: *70152935337300
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &70348710332340 !ruby/object:Gem::Requirement
49
+ requirement: &70152935327220 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 0.9.2
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70348710332340
57
+ version_requirements: *70152935327220
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70348710331800 !ruby/object:Gem::Requirement
60
+ requirement: &70152935313920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 2.7.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70348710331800
68
+ version_requirements: *70152935313920
69
69
  description: Treasure Data logging library for Rails
70
70
  email:
71
71
  executables: []