fluent-plugin-droonga 0.9.9 → 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.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.dir-locals.el +3 -0
  3. data/.travis.yml +6 -2
  4. data/README.md +6 -7
  5. data/Rakefile +23 -6
  6. data/fluent-plugin-droonga.gemspec +2 -2
  7. data/lib/droonga/adapter.rb +12 -3
  8. data/lib/droonga/adapter_runner.rb +28 -23
  9. data/lib/droonga/catalog/base.rb +7 -111
  10. data/lib/droonga/catalog/dataset.rb +13 -25
  11. data/lib/droonga/catalog/errors.rb +94 -0
  12. data/lib/droonga/catalog/schema.rb +277 -0
  13. data/lib/droonga/catalog/version1.rb +404 -0
  14. data/lib/droonga/catalog/version2.rb +160 -0
  15. data/lib/droonga/catalog_loader.rb +27 -4
  16. data/lib/droonga/catalog_observer.rb +44 -6
  17. data/lib/droonga/collector.rb +12 -10
  18. data/lib/droonga/{handler_plugin.rb → collector_message.rb} +47 -20
  19. data/lib/droonga/collector_runner.rb +64 -0
  20. data/lib/droonga/collectors.rb +18 -0
  21. data/lib/droonga/{catalog.rb → collectors/add.rb} +9 -7
  22. data/lib/droonga/{command_repository.rb → collectors/and.rb} +7 -14
  23. data/lib/droonga/collectors/sum.rb +26 -0
  24. data/lib/droonga/dispatcher.rb +74 -41
  25. data/lib/droonga/distributed_command_planner.rb +2 -2
  26. data/lib/droonga/engine.rb +13 -5
  27. data/lib/droonga/{message_processing_error.rb → error.rb} +33 -12
  28. data/lib/droonga/{plugin/planner/search.rb → error_messages.rb} +12 -10
  29. data/lib/droonga/farm.rb +15 -14
  30. data/lib/droonga/fluent_message_sender.rb +15 -11
  31. data/lib/droonga/forwarder.rb +22 -18
  32. data/lib/droonga/handler.rb +8 -2
  33. data/lib/droonga/handler_runner.rb +47 -26
  34. data/lib/droonga/input_message.rb +6 -6
  35. data/lib/droonga/{command.rb → loggable.rb} +7 -14
  36. data/lib/droonga/logger.rb +56 -15
  37. data/lib/droonga/message_matcher.rb +12 -7
  38. data/lib/droonga/message_pusher.rb +8 -4
  39. data/lib/droonga/message_receiver.rb +11 -9
  40. data/lib/droonga/output_message.rb +2 -0
  41. data/lib/droonga/planner.rb +21 -10
  42. data/lib/droonga/plugin.rb +15 -0
  43. data/lib/droonga/plugin/metadata/{adapter_message.rb → adapter_input_message.rb} +6 -14
  44. data/lib/droonga/plugin/metadata/adapter_output_message.rb +39 -0
  45. data/lib/droonga/plugin/metadata/collector_message.rb +39 -0
  46. data/lib/droonga/plugin/metadata/input_message.rb +15 -0
  47. data/lib/droonga/plugin_loader.rb +33 -25
  48. data/lib/droonga/plugin_registry.rb +9 -1
  49. data/lib/droonga/plugins/basic.rb +54 -0
  50. data/lib/droonga/plugins/crud.rb +36 -15
  51. data/lib/droonga/plugins/error.rb +5 -4
  52. data/lib/droonga/plugins/groonga.rb +9 -6
  53. data/lib/droonga/plugins/groonga/column_create.rb +10 -5
  54. data/lib/droonga/plugins/groonga/generic_command.rb +2 -8
  55. data/lib/droonga/plugins/groonga/generic_response.rb +2 -2
  56. data/lib/droonga/plugins/groonga/select.rb +2 -2
  57. data/lib/droonga/plugins/groonga/table_create.rb +9 -4
  58. data/lib/droonga/plugins/groonga/table_remove.rb +10 -5
  59. data/lib/droonga/plugins/search.rb +106 -5
  60. data/lib/droonga/plugins/search/distributed_search_planner.rb +398 -0
  61. data/lib/droonga/plugins/watch.rb +41 -20
  62. data/lib/droonga/processor.rb +12 -9
  63. data/lib/droonga/{plugin/collector/basic.rb → reducer.rb} +36 -50
  64. data/lib/droonga/replier.rb +7 -4
  65. data/lib/droonga/searcher.rb +40 -37
  66. data/lib/droonga/server.rb +8 -6
  67. data/lib/droonga/session.rb +17 -7
  68. data/lib/droonga/single_step.rb +53 -0
  69. data/lib/droonga/{plugin/planner/watch.rb → single_step_definition.rb} +27 -26
  70. data/lib/droonga/{partition.rb → slice.rb} +23 -12
  71. data/lib/droonga/status_code.rb +25 -0
  72. data/lib/droonga/step_runner.rb +63 -0
  73. data/lib/droonga/watch_schema.rb +7 -3
  74. data/lib/droonga/watcher.rb +4 -4
  75. data/lib/droonga/worker.rb +6 -6
  76. data/lib/fluent/plugin/out_droonga.rb +27 -2
  77. data/sample/cluster/catalog.json +33 -32
  78. data/test/command/config/default/catalog.json +72 -45
  79. data/test/command/config/version1/catalog.json +68 -0
  80. data/test/command/config/version1/fluentd.conf +11 -0
  81. data/test/command/suite/message/error/missing-dataset.expected +1 -1
  82. data/test/command/suite/message/error/unknown-dataset.expected +1 -1
  83. data/test/command/suite/message/error/unknown-type.expected +13 -0
  84. data/test/command/suite/message/error/{unknown-command.test → unknown-type.test} +1 -1
  85. data/test/command/suite/search/error/missing-source-parameter.expected +1 -1
  86. data/test/command/suite/search/error/unknown-source.expected +15 -3
  87. data/test/command/suite/watch/subscribe.expected +1 -3
  88. data/test/command/suite/watch/unsubscribe.expected +1 -3
  89. data/test/performance/watch/catalog.json +1 -0
  90. data/test/unit/catalog/test_dataset.rb +16 -358
  91. data/test/unit/catalog/test_schema.rb +285 -0
  92. data/test/unit/catalog/test_version1.rb +222 -28
  93. data/test/unit/catalog/test_version2.rb +155 -0
  94. data/test/unit/fixtures/catalog/version2.json +62 -0
  95. data/test/unit/helper/distributed_search_planner_helper.rb +2 -2
  96. data/test/unit/plugins/crud/test_add.rb +13 -13
  97. data/test/unit/plugins/groonga/test_column_create.rb +14 -11
  98. data/test/unit/plugins/groonga/test_table_create.rb +4 -9
  99. data/test/unit/plugins/groonga/test_table_remove.rb +4 -9
  100. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_basic.rb +0 -0
  101. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_group_by.rb +0 -0
  102. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_output.rb +0 -0
  103. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_sort_by.rb +0 -0
  104. data/test/unit/{plugin/collector/test_search.rb → plugins/search/test_collector.rb} +40 -39
  105. data/test/unit/plugins/{test_search.rb → search/test_handler.rb} +6 -5
  106. data/test/unit/{plugin/planner/test_search.rb → plugins/search/test_planner.rb} +3 -3
  107. data/test/unit/{plugin/collector → plugins}/test_basic.rb +68 -50
  108. data/test/unit/plugins/test_groonga.rb +2 -15
  109. data/test/unit/plugins/test_watch.rb +25 -22
  110. data/test/unit/test_message_matcher.rb +29 -6
  111. data/test/unit/test_output.rb +4 -0
  112. metadata +58 -50
  113. data/lib/droonga/collector_plugin.rb +0 -50
  114. data/lib/droonga/legacy_pluggable.rb +0 -66
  115. data/lib/droonga/legacy_plugin.rb +0 -57
  116. data/lib/droonga/legacy_plugin_repository.rb +0 -54
  117. data/lib/droonga/planner_plugin.rb +0 -54
  118. data/lib/droonga/plugin/collector/search.rb +0 -98
  119. data/lib/droonga/plugin/planner/crud.rb +0 -49
  120. data/lib/droonga/plugin/planner/distributed_search_planner.rb +0 -393
  121. data/lib/droonga/plugin/planner/groonga.rb +0 -54
  122. data/lib/droonga/plugin_registerable.rb +0 -75
  123. data/test/command/suite/message/error/unknown-command.expected +0 -13
  124. data/test/unit/test_command_repository.rb +0 -39
  125. data/test/unit/test_legacy_plugin.rb +0 -50
  126. data/test/unit/test_legacy_plugin_repository.rb +0 -89
@@ -0,0 +1,53 @@
1
+ # Copyright (C) 2014 Droonga Project
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 2.1 as published by the Free Software Foundation.
6
+ #
7
+ # This library is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public
13
+ # License along with this library; if not, write to the Free Software
14
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+
16
+ require "droonga/planner"
17
+ require "droonga/collectors"
18
+
19
+ module Droonga
20
+ class SingleStep
21
+ def initialize(definition)
22
+ @definition = definition
23
+ end
24
+
25
+ def plan(message)
26
+ if message["type"] == "search"
27
+ # XXX: workaround
28
+ planner = Plugins::Search::Planner.new
29
+ return planner.plan(message)
30
+ end
31
+
32
+ # XXX: Re-implement me.
33
+ planner = Planner.new
34
+ options = {}
35
+ options[:write] = @definition.write?
36
+ collector_class = @definition.collector_class
37
+ if collector_class
38
+ reduce_key = "result"
39
+ options[:reduce] = {
40
+ reduce_key => collector_class.operator,
41
+ }
42
+ end
43
+ inputs = @definition.inputs
44
+ if inputs.empty?
45
+ planner.send(:broadcast, message, options)
46
+ else
47
+ input = inputs.values.first
48
+ options[:key] = message["body"][input[:filter]]["key"]
49
+ planner.send(:scatter, message, options)
50
+ end
51
+ end
52
+ end
53
+ end
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2014 Droonga Project
4
2
  #
5
3
  # This library is free software; you can redistribute it and/or
6
4
  # modify it under the terms of the GNU Lesser General Public
@@ -15,39 +13,42 @@
15
13
  # License along with this library; if not, write to the Free Software
16
14
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
15
 
18
- require "droonga/planner_plugin"
19
-
20
16
  module Droonga
21
- class WatchPlanner < Droonga::PlannerPlugin
22
- repository.register("watch", self)
23
-
24
- command "watch.feed" => :feed
25
- def feed(message)
26
- broadcast(message)
17
+ class SingleStepDefinition
18
+ attr_accessor :name
19
+ attr_accessor :handler
20
+ attr_accessor :collector
21
+ attr_writer :write
22
+ attr_accessor :inputs
23
+ attr_accessor :output
24
+ def initialize(plugin_module)
25
+ @plugin_module = plugin_module
26
+ @name = nil
27
+ @handler = nil
28
+ @collector = nil
29
+ @write = false
30
+ @inputs = []
31
+ @output = {}
32
+ yield(self)
27
33
  end
28
34
 
29
- command "watch.subscribe" => :subscribe
30
- def subscribe(message)
31
- broadcast(message)
35
+ def write?
36
+ @write
32
37
  end
33
38
 
34
- command "watch.unsubscribe" => :unsubscribe
35
- def unsubscribe(message)
36
- broadcast(message)
39
+ def handler_class
40
+ resolve_class(@handler)
37
41
  end
38
42
 
39
- command "watch.sweep" => :sweep
40
- def sweep(message)
41
- broadcast(message)
43
+ def collector_class
44
+ resolve_class(@collector)
42
45
  end
43
46
 
44
47
  private
45
- def broadcast(message)
46
- super(message,
47
- :write => true,
48
- :reduce => {
49
- "success" => "and"
50
- })
48
+ def resolve_class(target)
49
+ return nil if target.nil?
50
+ return target if target.is_a?(Class)
51
+ @plugin_module.const_get(target)
51
52
  end
52
53
  end
53
54
  end
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2013 Droonga Project
1
+ # Copyright (C) 2013-2014 Droonga Project
4
2
  #
5
3
  # This library is free software; you can redistribute it and/or
6
4
  # modify it under the terms of the GNU Lesser General Public
@@ -17,6 +15,7 @@
17
15
 
18
16
  require "serverengine"
19
17
 
18
+ require "droonga/loggable"
20
19
  require "droonga/server"
21
20
  require "droonga/worker"
22
21
  require "droonga/event_loop"
@@ -24,7 +23,9 @@ require "droonga/message_pusher"
24
23
  require "droonga/processor"
25
24
 
26
25
  module Droonga
27
- class Partition
26
+ class Slice
27
+ include Loggable
28
+
28
29
  def initialize(loop, options={})
29
30
  @options = options
30
31
  @n_workers = @options[:n_workers] || 0
@@ -43,21 +44,22 @@ module Droonga
43
44
  end
44
45
 
45
46
  def shutdown
46
- $log.trace("partition: shutdown: start")
47
+ logger.trace("shutdown: start")
47
48
  shutdown_supervisor if @supervisor
48
49
  @message_pusher.shutdown
49
50
  @processor.shutdown
50
- $log.trace("partition: shutdown: done")
51
+ logger.trace("shutdown: done")
51
52
  end
52
53
 
53
54
  def process(message)
54
- $log.trace("partition: process: start")
55
+ logger.trace("process: start")
55
56
  @processor.process(message)
56
- $log.trace("partition: process: done")
57
+ logger.trace("process: done")
57
58
  end
58
59
 
59
60
  private
60
61
  def ensure_database
62
+ enforce_umask
61
63
  database_path = @options[:database]
62
64
  return if File.exist?(database_path)
63
65
  FileUtils.mkdir_p(File.dirname(database_path))
@@ -70,12 +72,16 @@ module Droonga
70
72
  end
71
73
  end
72
74
 
75
+ def enforce_umask
76
+ File.umask(022)
77
+ end
78
+
73
79
  def start_supervisor
74
80
  @supervisor = ServerEngine::Supervisor.new(Server, Worker) do
75
81
  force_options = {
76
82
  :worker_type => "process",
77
83
  :workers => @options[:n_workers],
78
- :log_level => $log.level,
84
+ :log_level => logger.level,
79
85
  :server_process_name => "Server[#{@options[:database]}] #$0",
80
86
  :worker_process_name => "Worker[#{@options[:database]}] #$0",
81
87
  :message_receiver => @message_pusher.raw_receiver,
@@ -88,11 +94,16 @@ module Droonga
88
94
  end
89
95
 
90
96
  def shutdown_supervisor
91
- $log.trace("supervisor: shutdown: start")
97
+ logger.trace("supervisor: shutdown: start")
92
98
  @supervisor.stop(true)
93
- $log.trace("supervisor: shutdown: stopped")
99
+ logger.trace("supervisor: shutdown: stopped")
94
100
  @supervisor_thread.join
95
- $log.trace("supervisor: shutdown: done")
101
+ logger.trace("supervisor: shutdown: done")
102
+ end
103
+
104
+ private
105
+ def log_tag
106
+ "slice"
96
107
  end
97
108
  end
98
109
  end
@@ -0,0 +1,25 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2014 Droonga Project
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License version 2.1 as published by the Free Software Foundation.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
+
18
+ module Droonga
19
+ module StatusCode
20
+ OK = 200
21
+ BAD_REQUEST = 400
22
+ NOT_FOUND = 404
23
+ INTERNAL_SERVER_ERROR = 500
24
+ end
25
+ end
@@ -0,0 +1,63 @@
1
+ # Copyright (C) 2014 Droonga Project
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License version 2.1 as published by the Free Software Foundation.
6
+ #
7
+ # This library is distributed in the hope that it will be useful,
8
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
9
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
+ # Lesser General Public License for more details.
11
+ #
12
+ # You should have received a copy of the GNU Lesser General Public
13
+ # License along with this library; if not, write to the Free Software
14
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
+
16
+ require "droonga/loggable"
17
+ require "droonga/plugin"
18
+ require "droonga/single_step"
19
+
20
+ module Droonga
21
+ class StepRunner
22
+ include Loggable
23
+
24
+ def initialize(plugins)
25
+ @definitions = {}
26
+ plugins.each do |name|
27
+ plugin = Plugin.registry[name]
28
+ plugin.single_step_definitions.each do |definition|
29
+ @definitions[definition.name] = definition
30
+ end
31
+ end
32
+ end
33
+
34
+ def shutdown
35
+ end
36
+
37
+ def plan(message)
38
+ type = message["type"]
39
+ logger.trace("plan: start",
40
+ :dataset => message["dataset"],
41
+ :type => type)
42
+ definition = find(type)
43
+ if definition.nil?
44
+ raise UnsupportedMessageError.new(:planner, message)
45
+ end
46
+ step = SingleStep.new(definition)
47
+ plan = step.plan(message)
48
+ logger.trace("plan: done",
49
+ :dataset => message["dataset"],
50
+ :type => type)
51
+ plan
52
+ end
53
+
54
+ def find(type)
55
+ @definitions[type]
56
+ end
57
+
58
+ private
59
+ def log_tag
60
+ "step-runner"
61
+ end
62
+ end
63
+ end
@@ -17,20 +17,24 @@
17
17
 
18
18
  require "groonga"
19
19
 
20
+ require "droonga/loggable"
21
+
20
22
  module Droonga
21
23
  class WatchSchema
24
+ include Loggable
25
+
22
26
  def initialize(context)
23
27
  @context = context
24
28
  end
25
29
 
26
30
  def ensure_created
27
31
  if @context["Keyword"]
28
- $log.trace "#{log_tag} skip table creation"
32
+ logger.trace("skip table creation")
29
33
  return
30
34
  end
31
- $log.trace "#{log_tag} ensure_tables: start"
35
+ logger.trace("ensure_tables: start")
32
36
  ensure_tables
33
- $log.trace "#{log_tag} ensure_tables: done"
37
+ logger.trace("ensure_tables: done")
34
38
  end
35
39
 
36
40
  private
@@ -34,8 +34,8 @@ module Droonga
34
34
  route = request[:route]
35
35
 
36
36
  # XXX better validation and error class must be written!!
37
- if subscriber.nil? || subscriber.empty? || condition.nil? ||
38
- query.nil? || route.nil?
37
+ if subscriber.nil? or subscriber.empty? or condition.nil? or
38
+ query.nil? or route.nil?
39
39
  raise "invalid request"
40
40
  end
41
41
  raise "too long query" if query.size > 4095
@@ -65,14 +65,14 @@ module Droonga
65
65
  subscriber = request[:subscriber]
66
66
  query = request[:query]
67
67
 
68
- if subscriber.nil? || subscriber.empty?
68
+ if subscriber.nil? or subscriber.empty?
69
69
  raise "invalid request"
70
70
  end
71
71
 
72
72
  subscriber_record = @subscriber_table[subscriber]
73
73
  return unless subscriber_record
74
74
 
75
- if query.nil? || query.empty?
75
+ if query.nil? or query.empty?
76
76
  delete_subscriber(subscriber_record)
77
77
  else
78
78
  query_record = @query_table[query]
@@ -30,26 +30,26 @@ module Droonga
30
30
  end
31
31
 
32
32
  def run
33
- $log.trace("#{log_tag}: run: start")
33
+ Droonga.logger.trace("#{log_tag}: run: start")
34
34
  @handler_runner.start
35
35
  @message_receiver.start
36
36
  @loop.run
37
37
  @handler_runner.shutdown
38
- $log.trace("#{log_tag}: run: done")
38
+ Droonga.logger.trace("#{log_tag}: run: done")
39
39
  end
40
40
 
41
41
  def stop
42
- $log.trace("#{log_tag}: stop: start")
42
+ Droonga.logger.trace("#{log_tag}: stop: start")
43
43
  @message_receiver.shutdown
44
44
  @loop.stop
45
- $log.trace("#{log_tag}: stop: done")
45
+ Droonga.logger.trace("#{log_tag}: stop: done")
46
46
  end
47
47
 
48
48
  private
49
49
  def process(message)
50
- $log.trace("#{log_tag}: process: start")
50
+ Droonga.logger.trace("#{log_tag}: process: start")
51
51
  @handler_runner.process(message)
52
- $log.trace("#{log_tag}: process: done")
52
+ Droonga.logger.trace("#{log_tag}: process: done")
53
53
  end
54
54
 
55
55
  def log_tag
@@ -17,6 +17,7 @@
17
17
 
18
18
  require "droonga/engine"
19
19
  require "droonga/plugin_loader"
20
+ require "droonga/catalog_observer"
20
21
 
21
22
  module Fluent
22
23
  class DroongaOutput < Output
@@ -27,12 +28,20 @@ module Fluent
27
28
  def start
28
29
  super
29
30
  Droonga::PluginLoader.load_all
30
- @engine = Droonga::Engine.new(:name => @name)
31
+ @catalog_observer = Droonga::CatalogObserver.new
32
+ @catalog_observer.on_reload = lambda do |catalog|
33
+ graceful_engine_restart(catalog)
34
+ $log.info("engine restarted")
35
+ end
36
+ @catalog_observer.start
37
+ catalog = @catalog_observer.catalog
38
+ @engine = create_engine(catalog)
31
39
  @engine.start
32
40
  end
33
41
 
34
42
  def shutdown
35
43
  @engine.shutdown
44
+ @catalog_observer.stop
36
45
  super
37
46
  end
38
47
 
@@ -44,6 +53,22 @@ module Fluent
44
53
  end
45
54
 
46
55
  private
56
+ def create_engine(catalog)
57
+ Droonga::Engine.new(catalog, :name => @name)
58
+ end
59
+
60
+ def graceful_engine_restart(catalog)
61
+ $log.trace("out_droonga: start: graceful_engine_restart")
62
+ old_engine = @engine
63
+ $log.trace("out_droonga: creating new engine")
64
+ new_engine = create_engine(catalog)
65
+ new_engine.start
66
+ @engine = new_engine
67
+ $log.trace("out_droonga: shutdown old engine")
68
+ old_engine.shutdown
69
+ $log.trace("out_droonga: done: graceful_engine_restart")
70
+ end
71
+
47
72
  def process_event(tag, record)
48
73
  $log.trace("out_droonga: tag: <#{tag}>")
49
74
  @engine.process(parse_record(tag, record))
@@ -51,7 +76,7 @@ module Fluent
51
76
 
52
77
  def parse_record(tag, record)
53
78
  prefix, type, *arguments = tag.split(/\./)
54
- if type.nil? || type.empty? || type == "message"
79
+ if type.nil? or type.empty? or type == "message"
55
80
  message = record
56
81
  else
57
82
  message = {