logstash-core 5.6.16-java → 6.0.0.alpha1-java

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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/gemspec_jars.rb +4 -7
  3. data/lib/logstash-core/logstash-core.jar +0 -0
  4. data/lib/logstash-core/version.rb +4 -8
  5. data/lib/logstash-core_jars.rb +12 -26
  6. data/lib/logstash/agent.rb +261 -246
  7. data/lib/logstash/api/commands/default_metadata.rb +1 -1
  8. data/lib/logstash/api/commands/hot_threads_reporter.rb +5 -11
  9. data/lib/logstash/api/commands/node.rb +3 -2
  10. data/lib/logstash/api/commands/stats.rb +3 -2
  11. data/lib/logstash/bootstrap_check/bad_java.rb +16 -0
  12. data/lib/logstash/bootstrap_check/bad_ruby.rb +12 -0
  13. data/lib/logstash/bootstrap_check/default_config.rb +17 -0
  14. data/lib/logstash/compiler.rb +38 -0
  15. data/lib/logstash/compiler/lscl.rb +566 -0
  16. data/lib/logstash/compiler/lscl/lscl_grammar.rb +3503 -0
  17. data/lib/logstash/compiler/treetop_monkeypatches.rb +92 -0
  18. data/lib/logstash/config/config_ast.rb +4 -82
  19. data/lib/logstash/config/mixin.rb +73 -41
  20. data/lib/logstash/config/pipeline_config.rb +48 -0
  21. data/lib/logstash/config/source/base.rb +16 -0
  22. data/lib/logstash/config/source/local.rb +215 -0
  23. data/lib/logstash/config/source_loader.rb +125 -0
  24. data/lib/logstash/converge_result.rb +103 -0
  25. data/lib/logstash/environment.rb +6 -19
  26. data/lib/logstash/errors.rb +2 -0
  27. data/lib/logstash/execution_context.rb +4 -7
  28. data/lib/logstash/filter_delegator.rb +6 -9
  29. data/lib/logstash/inputs/base.rb +0 -2
  30. data/lib/logstash/instrument/collector.rb +5 -7
  31. data/lib/logstash/instrument/metric_store.rb +12 -12
  32. data/lib/logstash/instrument/metric_type/mean.rb +0 -5
  33. data/lib/logstash/instrument/namespaced_metric.rb +0 -4
  34. data/lib/logstash/instrument/namespaced_null_metric.rb +0 -4
  35. data/lib/logstash/instrument/null_metric.rb +0 -10
  36. data/lib/logstash/instrument/periodic_poller/cgroup.rb +85 -168
  37. data/lib/logstash/instrument/periodic_poller/jvm.rb +5 -5
  38. data/lib/logstash/instrument/periodic_poller/pq.rb +3 -7
  39. data/lib/logstash/instrument/periodic_pollers.rb +1 -3
  40. data/lib/logstash/instrument/wrapped_write_client.rb +24 -33
  41. data/lib/logstash/logging/logger.rb +15 -47
  42. data/lib/logstash/namespace.rb +0 -1
  43. data/lib/logstash/output_delegator.rb +5 -7
  44. data/lib/logstash/outputs/base.rb +0 -2
  45. data/lib/logstash/pipeline.rb +159 -87
  46. data/lib/logstash/pipeline_action.rb +13 -0
  47. data/lib/logstash/pipeline_action/base.rb +29 -0
  48. data/lib/logstash/pipeline_action/create.rb +47 -0
  49. data/lib/logstash/pipeline_action/reload.rb +48 -0
  50. data/lib/logstash/pipeline_action/stop.rb +23 -0
  51. data/lib/logstash/plugin.rb +0 -1
  52. data/lib/logstash/plugins/hooks_registry.rb +6 -0
  53. data/lib/logstash/plugins/registry.rb +0 -1
  54. data/lib/logstash/program.rb +14 -0
  55. data/lib/logstash/queue_factory.rb +5 -1
  56. data/lib/logstash/runner.rb +58 -80
  57. data/lib/logstash/settings.rb +3 -27
  58. data/lib/logstash/state_resolver.rb +41 -0
  59. data/lib/logstash/util/java_version.rb +6 -0
  60. data/lib/logstash/util/safe_uri.rb +12 -148
  61. data/lib/logstash/util/thread_dump.rb +4 -7
  62. data/lib/logstash/util/wrapped_acked_queue.rb +36 -39
  63. data/lib/logstash/util/wrapped_synchronous_queue.rb +29 -39
  64. data/lib/logstash/version.rb +10 -8
  65. data/locales/en.yml +3 -54
  66. data/logstash-core.gemspec +8 -35
  67. data/spec/{logstash/api/modules → api/lib/api}/logging_spec.rb +10 -1
  68. data/spec/{logstash/api/modules → api/lib/api}/node_plugins_spec.rb +2 -1
  69. data/spec/{logstash/api/modules → api/lib/api}/node_spec.rb +3 -3
  70. data/spec/{logstash/api/modules → api/lib/api}/node_stats_spec.rb +3 -7
  71. data/spec/{logstash/api/modules → api/lib/api}/plugins_spec.rb +3 -4
  72. data/spec/{logstash/api/modules → api/lib/api}/root_spec.rb +2 -2
  73. data/spec/api/lib/api/support/resource_dsl_methods.rb +87 -0
  74. data/spec/{logstash/api/commands/stats_spec.rb → api/lib/commands/stats.rb} +2 -7
  75. data/spec/{logstash/api → api/lib}/errors_spec.rb +1 -1
  76. data/spec/{logstash/api → api/lib}/rack_app_spec.rb +0 -0
  77. data/spec/api/spec_helper.rb +106 -0
  78. data/spec/logstash/agent/converge_spec.rb +286 -0
  79. data/spec/logstash/agent/metrics_spec.rb +244 -0
  80. data/spec/logstash/agent_spec.rb +213 -225
  81. data/spec/logstash/compiler/compiler_spec.rb +584 -0
  82. data/spec/logstash/config/config_ast_spec.rb +8 -47
  83. data/spec/logstash/config/mixin_spec.rb +2 -42
  84. data/spec/logstash/config/pipeline_config_spec.rb +75 -0
  85. data/spec/logstash/config/source/local_spec.rb +395 -0
  86. data/spec/logstash/config/source_loader_spec.rb +122 -0
  87. data/spec/logstash/converge_result_spec.rb +179 -0
  88. data/spec/logstash/event_spec.rb +0 -66
  89. data/spec/logstash/execution_context_spec.rb +8 -12
  90. data/spec/logstash/filter_delegator_spec.rb +12 -24
  91. data/spec/logstash/inputs/base_spec.rb +7 -5
  92. data/spec/logstash/instrument/periodic_poller/cgroup_spec.rb +92 -225
  93. data/spec/logstash/instrument/periodic_poller/jvm_spec.rb +1 -1
  94. data/spec/logstash/instrument/periodic_poller/os_spec.rb +32 -29
  95. data/spec/logstash/instrument/wrapped_write_client_spec.rb +33 -33
  96. data/spec/logstash/legacy_ruby_event_spec.rb +13 -4
  97. data/spec/logstash/output_delegator_spec.rb +11 -20
  98. data/spec/logstash/outputs/base_spec.rb +7 -5
  99. data/spec/logstash/pipeline_action/create_spec.rb +83 -0
  100. data/spec/logstash/pipeline_action/reload_spec.rb +83 -0
  101. data/spec/logstash/pipeline_action/stop_spec.rb +37 -0
  102. data/spec/logstash/pipeline_pq_file_spec.rb +1 -1
  103. data/spec/logstash/pipeline_spec.rb +81 -137
  104. data/spec/logstash/plugin_spec.rb +2 -1
  105. data/spec/logstash/plugins/hooks_registry_spec.rb +6 -0
  106. data/spec/logstash/queue_factory_spec.rb +13 -1
  107. data/spec/logstash/runner_spec.rb +29 -140
  108. data/spec/logstash/settings/writable_directory_spec.rb +10 -13
  109. data/spec/logstash/settings_spec.rb +0 -91
  110. data/spec/logstash/state_resolver_spec.rb +156 -0
  111. data/spec/logstash/timestamp_spec.rb +2 -6
  112. data/spec/logstash/util/java_version_spec.rb +22 -0
  113. data/spec/logstash/util/safe_uri_spec.rb +0 -56
  114. data/spec/logstash/util/wrapped_synchronous_queue_spec.rb +22 -0
  115. data/spec/support/helpers.rb +9 -11
  116. data/spec/support/matchers.rb +96 -6
  117. data/spec/support/mocks_classes.rb +80 -0
  118. data/spec/support/shared_contexts.rb +2 -27
  119. metadata +100 -149
  120. data/lib/logstash/config/loader.rb +0 -107
  121. data/lib/logstash/config/modules_common.rb +0 -103
  122. data/lib/logstash/config/source/modules.rb +0 -55
  123. data/lib/logstash/config/string_escape.rb +0 -27
  124. data/lib/logstash/dependency_report.rb +0 -131
  125. data/lib/logstash/dependency_report_runner.rb +0 -17
  126. data/lib/logstash/elasticsearch_client.rb +0 -142
  127. data/lib/logstash/instrument/global_metrics.rb +0 -13
  128. data/lib/logstash/instrument/periodic_poller/dlq.rb +0 -24
  129. data/lib/logstash/modules/cli_parser.rb +0 -74
  130. data/lib/logstash/modules/elasticsearch_config.rb +0 -22
  131. data/lib/logstash/modules/elasticsearch_importer.rb +0 -37
  132. data/lib/logstash/modules/elasticsearch_resource.rb +0 -10
  133. data/lib/logstash/modules/file_reader.rb +0 -36
  134. data/lib/logstash/modules/kibana_base.rb +0 -24
  135. data/lib/logstash/modules/kibana_client.rb +0 -124
  136. data/lib/logstash/modules/kibana_config.rb +0 -105
  137. data/lib/logstash/modules/kibana_dashboards.rb +0 -36
  138. data/lib/logstash/modules/kibana_importer.rb +0 -17
  139. data/lib/logstash/modules/kibana_resource.rb +0 -10
  140. data/lib/logstash/modules/kibana_settings.rb +0 -40
  141. data/lib/logstash/modules/logstash_config.rb +0 -120
  142. data/lib/logstash/modules/resource_base.rb +0 -38
  143. data/lib/logstash/modules/scaffold.rb +0 -52
  144. data/lib/logstash/modules/settings_merger.rb +0 -23
  145. data/lib/logstash/modules/util.rb +0 -17
  146. data/lib/logstash/util/dead_letter_queue_manager.rb +0 -61
  147. data/lib/logstash/util/environment_variables.rb +0 -43
  148. data/spec/logstash/config/loader_spec.rb +0 -38
  149. data/spec/logstash/config/string_escape_spec.rb +0 -24
  150. data/spec/logstash/instrument/periodic_poller/dlq_spec.rb +0 -17
  151. data/spec/logstash/modules/logstash_config_spec.rb +0 -56
  152. data/spec/logstash/modules/scaffold_spec.rb +0 -234
  153. data/spec/logstash/pipeline_dlq_commit_spec.rb +0 -109
  154. data/spec/logstash/settings/splittable_string_array_spec.rb +0 -51
  155. data/spec/logstash/util/wrapped_acked_queue_spec.rb +0 -49
  156. data/versions-gem-copy.yml +0 -12
@@ -2,14 +2,11 @@
2
2
  require "logstash/util/loggable"
3
3
  require "fileutils"
4
4
  require "logstash/util/byte_value"
5
- require "logstash/util/environment_variables"
6
5
  require "logstash/util/time_value"
7
6
 
8
7
  module LogStash
9
8
  class Settings
10
9
 
11
- include LogStash::Util::EnvironmentVariables
12
-
13
10
  def initialize
14
11
  @settings = {}
15
12
  # Theses settings were loaded from the yaml file
@@ -50,6 +47,7 @@ module LogStash
50
47
  def clone
51
48
  get_subset(".*")
52
49
  end
50
+ alias_method :dup, :clone
53
51
 
54
52
  def get_default(setting_name)
55
53
  get_setting(setting_name).default
@@ -110,10 +108,7 @@ module LogStash
110
108
 
111
109
  def from_yaml(yaml_path)
112
110
  settings = read_yaml(::File.join(yaml_path, "logstash.yml"))
113
- self.merge(
114
- deep_replace(flatten_hash(settings)),
115
- true
116
- )
111
+ self.merge(flatten_hash(settings), true)
117
112
  self
118
113
  end
119
114
 
@@ -534,27 +529,8 @@ module LogStash
534
529
  end
535
530
  end
536
531
  end
537
-
538
- class SplittableStringArray < ArrayCoercible
539
- DEFAULT_TOKEN = ","
540
-
541
- def initialize(name, klass, default, strict=true, tokenizer = DEFAULT_TOKEN, &validator_proc)
542
- @element_class = klass
543
- @token = tokenizer
544
- super(name, klass, default, strict, &validator_proc)
545
- end
546
-
547
- def coerce(value)
548
- if value.is_a?(Array)
549
- value
550
- elsif value.nil?
551
- []
552
- else
553
- value.split(@token).map(&:strip)
554
- end
555
- end
556
- end
557
532
  end
558
533
 
534
+
559
535
  SETTINGS = Settings.new
560
536
  end
@@ -0,0 +1,41 @@
1
+ # encoding: utf-8
2
+ module LogStash
3
+ # In the beginning I was using this code as a method in the Agent class directly
4
+ # But with the plugins system I think we should be able to swap what kind of action would be run.
5
+ #
6
+ # Lets take the example of dynamic source, where the pipeline config and settings are located and
7
+ # managed outside of the machine.
8
+ class StateResolver
9
+ def initialize(metric)
10
+ @metric = metric
11
+ end
12
+
13
+ def resolve(pipelines, pipeline_configs)
14
+ actions = []
15
+
16
+ pipeline_configs.each do |pipeline_config|
17
+ pipeline = pipelines[pipeline_config.pipeline_id]
18
+
19
+ if pipeline.nil?
20
+ actions << LogStash::PipelineAction::Create.new(pipeline_config, @metric)
21
+ else
22
+ # TODO(ph): The pipeline should keep a reference to the original PipelineConfig
23
+ # and we could use straight comparison.
24
+ if pipeline_config.config_hash != pipeline.config_hash
25
+ actions << LogStash::PipelineAction::Reload.new(pipeline_config, @metric)
26
+ end
27
+ end
28
+ end
29
+
30
+ running_pipelines = pipeline_configs.collect(&:pipeline_id)
31
+
32
+ # If one of the running pipeline is not in the pipeline_configs, we assume that we need to
33
+ # stop it.
34
+ pipelines.keys
35
+ .select { |pipeline_id| !running_pipelines.include?(pipeline_id) }
36
+ .each { |pipeline_id| actions << LogStash::PipelineAction::Stop.new(pipeline_id) }
37
+
38
+ actions.sort # See logstash/pipeline_action.rb
39
+ end
40
+ end
41
+ end
@@ -32,6 +32,12 @@ module LogStash::Util::JavaVersion
32
32
  }
33
33
  end
34
34
 
35
+ def self.validate_java_version!
36
+ if bad_java_version?(version)
37
+ raise "Java version 1.8.0 or later is required. (You are running: #{version})"
38
+ end
39
+ end
40
+
35
41
  # Determine if the given java version string is a bad version of java
36
42
  # If it is, return true, if it isn't return false.
37
43
  # Accepts nil, returning nil.
@@ -11,23 +11,21 @@ class LogStash::Util::SafeURI
11
11
 
12
12
  extend Forwardable
13
13
 
14
+ def_delegators :@uri, :coerce, :query=, :route_from, :port=, :default_port, :select, :normalize!, :absolute?, :registry=, :path, :password, :hostname, :merge, :normalize, :host, :component_ary, :userinfo=, :query, :set_opaque, :+, :merge!, :-, :password=, :parser, :port, :set_host, :set_path, :opaque=, :scheme, :fragment=, :set_query, :set_fragment, :userinfo, :hostname=, :set_port, :path=, :registry, :opaque, :route_to, :set_password, :hierarchical?, :set_user, :set_registry, :set_userinfo, :fragment, :component, :user=, :set_scheme, :absolute, :host=, :relative?, :scheme=, :user
14
15
 
15
16
  attr_reader :uri
16
-
17
+
17
18
  public
18
- def initialize(arg)
19
+ def initialize(arg)
19
20
  @uri = case arg
20
21
  when String
21
22
  arg = "//#{arg}" if HOSTNAME_PORT_REGEX.match(arg)
22
- java.net.URI.new(arg)
23
- when java.net.URI
24
- arg
23
+ URI.parse(arg)
25
24
  when URI
26
- java.net.URI.new(arg.to_s)
25
+ arg
27
26
  else
28
- raise ArgumentError, "Expected a string, java.net.URI, or URI, got a #{arg.class} creating a URL"
27
+ raise ArgumentError, "Expected a string or URI, got a #{arg.class} creating a URL"
29
28
  end
30
- raise ArgumentError, "URI is not valid - host is not specified" if @uri.host.nil?
31
29
  end
32
30
 
33
31
  def to_s
@@ -39,11 +37,11 @@ class LogStash::Util::SafeURI
39
37
  end
40
38
 
41
39
  def sanitized
42
- return uri unless password # nothing to sanitize here!
40
+ return uri unless uri.password # nothing to sanitize here!
43
41
 
44
- user_info = user ? "#{user}:#{PASS_PLACEHOLDER}" : nil
45
-
46
- make_uri(scheme, user_info, host, port, path, query, fragment)
42
+ safe = uri.clone
43
+ safe.password = PASS_PLACEHOLDER
44
+ safe
47
45
  end
48
46
 
49
47
  def ==(other)
@@ -51,142 +49,8 @@ class LogStash::Util::SafeURI
51
49
  end
52
50
 
53
51
  def clone
54
- # No need to clone the URI, in java its immutable
55
- self.class.new(uri)
56
- end
57
-
58
- def update(field, value)
59
- new_scheme = scheme
60
- new_user = user
61
- new_password = password
62
- new_host = host
63
- new_port = port
64
- new_path = path
65
- new_query = query
66
- new_fragment = fragment
67
-
68
- case field
69
- when :scheme
70
- new_scheme = value
71
- when :user
72
- new_user = value
73
- when :password
74
- new_password = value
75
- when :host
76
- new_host = value
77
- when :port
78
- new_port = value
79
- when :path
80
- new_path = value
81
- when :query
82
- new_query = value
83
- when :fragment
84
- new_fragment = value
85
- end
86
-
87
- user_info = new_user
88
- if new_user && new_password
89
- user_info += ":" + new_password
90
- end
91
-
92
- @uri = make_uri(new_scheme, user_info, new_host, new_port, new_path, new_query, new_fragment)
93
- end
94
-
95
- def user
96
- if userinfo
97
- userinfo.split(":")[0]
98
- end
99
- end
100
-
101
- def user=(new_user)
102
- update(:user, new_user)
103
- end
104
-
105
- def password
106
- if userinfo
107
- userinfo.split(":")[1]
108
- end
109
- end
110
-
111
- def password=(new_password)
112
- update(:password, new_password)
113
- end
114
-
115
- def hostname
116
- # Alias from the ruby library
117
- host
118
- end
119
-
120
- def host=(new_host)
121
- update(:host, new_host)
122
- end
123
-
124
- def port
125
- # In java this is an int
126
- uri.port < 1 ? nil : uri.port
127
- end
128
-
129
- def port=(new_port)
130
- update(:port, new_port)
131
- end
132
-
133
- def path=(new_path)
134
- update(:path, new_path)
135
- end
136
-
137
- def query=(new_query)
138
- update(:query, new_query)
139
- end
140
-
141
- def fragment=(new_fragment)
142
- update(:fragment, new_fragment)
143
- end
144
-
145
- # Same algorithm as Ruby's URI class uses
146
- def normalize!
147
- if path && path == ''
148
- path = '/'
149
- end
150
- if scheme && scheme != scheme.downcase
151
- scheme = self.scheme.downcase
152
- end
153
- if host && host != host.downcase
154
- host = self.host.downcase
155
- end
156
- end
157
-
158
- def normalize
159
- d = self.dup
160
- d.normalize!
161
- d
162
- end
163
-
164
- def path
165
- @uri.raw_path
166
- end
167
-
168
- def query
169
- @uri.raw_query
170
- end
171
-
172
- def fragment
173
- @uri.raw_fragment
174
- end
175
-
176
- def userinfo
177
- @uri.raw_user_info
178
- end
179
-
180
- def_delegators :@uri, :absolute?, :scheme, :host
181
-
182
- private
183
-
184
- # Jruby doesn't guess the constructor correctly if there are some nil things in place
185
- # hence, this method
186
- def make_uri(scheme, user_info, host, port, path, query, fragment)
187
- # It is lot legal to have a path not starting with a /
188
- prefixed_path = path && path[0] != "/" ? "/#{path}" : path
189
- java.net.URI.new(scheme, user_info, host, port || -1, prefixed_path, query, fragment)
52
+ cloned_uri = uri.clone
53
+ self.class.new(cloned_uri)
190
54
  end
191
55
  end
192
56
 
@@ -1,6 +1,4 @@
1
1
  # encoding: utf-8
2
- java_import 'org.logstash.instrument.reports.ThreadsReport'
3
-
4
2
  module LogStash
5
3
  module Util
6
4
  class ThreadDump
@@ -12,20 +10,19 @@ module LogStash
12
10
 
13
11
  def initialize(options={})
14
12
  @options = options
15
- @dump = options.fetch(:dump, ThreadsReport.generate({}))
13
+ @dump = options.fetch(:dump, JRMonitor.threads.generate({}))
16
14
  @top_count = options.fetch(:threads, THREADS_COUNT_DEFAULT)
17
15
  @ignore = options.fetch(:ignore_idle_threads, IGNORE_IDLE_THREADS_DEFAULT)
18
16
  end
19
17
 
20
18
  def each(&block)
21
19
  i=0
22
- dump.each do |hash|
23
- thread_name = hash["thread.name"]
20
+ dump.each_pair do |thread_name, _hash|
24
21
  break if i >= top_count
25
22
  if ignore
26
- next if idle_thread?(thread_name, hash)
23
+ next if idle_thread?(thread_name, _hash)
27
24
  end
28
- block.call(hash)
25
+ block.call(thread_name, _hash)
29
26
  i += 1
30
27
  end
31
28
  end
@@ -20,6 +20,12 @@ module LogStash; module Util
20
20
  class QueueClosedError < ::StandardError; end
21
21
  class NotImplementedError < ::StandardError; end
22
22
 
23
+ def self.create_memory_based(path, capacity, max_events, max_bytes)
24
+ self.allocate.with_queue(
25
+ LogStash::AckedMemoryQueue.new(path, capacity, max_events, max_bytes)
26
+ )
27
+ end
28
+
23
29
  def self.create_file_based(path, capacity, max_events, checkpoint_max_writes, checkpoint_max_acks, checkpoint_max_interval, max_bytes)
24
30
  self.allocate.with_queue(
25
31
  LogStash::AckedQueue.new(path, capacity, max_events, checkpoint_max_writes, checkpoint_max_acks, checkpoint_max_interval, max_bytes)
@@ -51,6 +57,24 @@ module LogStash; module Util
51
57
  end
52
58
  alias_method(:<<, :push)
53
59
 
60
+ # TODO - fix doc for this noop method
61
+ # Offer an object to the queue, wait for the specified amount of time.
62
+ # If adding to the queue was successful it will return true, false otherwise.
63
+ #
64
+ # @param [Object] Object to add to the queue
65
+ # @param [Integer] Time in milliseconds to wait before giving up
66
+ # @return [Boolean] True if adding was successful if not it return false
67
+ def offer(obj, timeout_ms)
68
+ raise NotImplementedError.new("The offer method is not implemented. There is no non blocking write operation yet.")
69
+ end
70
+
71
+ # Blocking
72
+ def take
73
+ check_closed("read a batch")
74
+ # TODO - determine better arbitrary timeout millis
75
+ @queue.read_batch(1, 200).get_elements.first
76
+ end
77
+
54
78
  # Block for X millis
55
79
  def poll(millis)
56
80
  check_closed("read")
@@ -76,10 +100,6 @@ module LogStash; module Util
76
100
  end
77
101
  end
78
102
 
79
- def is_empty?
80
- @queue.is_empty?
81
- end
82
-
83
103
  def close
84
104
  @queue.close
85
105
  @closed.make_true
@@ -107,12 +127,7 @@ module LogStash; module Util
107
127
  end
108
128
 
109
129
  def empty?
110
- @mutex.lock
111
- begin
112
- @queue.is_empty?
113
- ensure
114
- @mutex.unlock
115
- end
130
+ @mutex.synchronize { @queue.is_fully_acked? }
116
131
  end
117
132
 
118
133
  def set_batch_dimensions(batch_size, wait_for)
@@ -137,11 +152,8 @@ module LogStash; module Util
137
152
  end
138
153
 
139
154
  def inflight_batches
140
- @mutex.lock
141
- begin
155
+ @mutex.synchronize do
142
156
  yield(@inflight_batches)
143
- ensure
144
- @mutex.unlock
145
157
  end
146
158
  end
147
159
 
@@ -161,24 +173,16 @@ module LogStash; module Util
161
173
  end
162
174
 
163
175
  batch = new_batch
164
- @mutex.lock
165
- begin
166
- batch.read_next
167
- ensure
168
- @mutex.unlock
169
- end
176
+ @mutex.synchronize { batch.read_next }
170
177
  start_metrics(batch)
171
178
  batch
172
179
  end
173
180
 
174
181
  def start_metrics(batch)
175
- @mutex.lock
176
- begin
182
+ @mutex.synchronize do
177
183
  # there seems to be concurrency issues with metrics, keep it in the mutex
178
184
  set_current_thread_inflight_batch(batch)
179
185
  start_clock
180
- ensure
181
- @mutex.unlock
182
186
  end
183
187
  end
184
188
 
@@ -187,30 +191,29 @@ module LogStash; module Util
187
191
  end
188
192
 
189
193
  def close_batch(batch)
190
- @mutex.lock
191
- begin
194
+ @mutex.synchronize do
192
195
  batch.close
196
+
193
197
  # there seems to be concurrency issues with metrics, keep it in the mutex
194
198
  @inflight_batches.delete(Thread.current)
195
199
  stop_clock(batch)
196
- ensure
197
- @mutex.unlock
198
200
  end
199
201
  end
200
202
 
201
203
  def start_clock
202
- @inflight_clocks[Thread.current] = java.lang.System.current_time_millis
204
+ @inflight_clocks[Thread.current] = [
205
+ @event_metric.time(:duration_in_millis),
206
+ @pipeline_metric.time(:duration_in_millis)
207
+ ]
203
208
  end
204
209
 
205
210
  def stop_clock(batch)
206
211
  unless @inflight_clocks[Thread.current].nil?
207
212
  if batch.size > 0
208
- # only stop (which also records) the metrics if the batch is non-empty.
213
+ # onl/y stop (which also records) the metrics if the batch is non-empty.
209
214
  # start_clock is now called at empty batch creation and an empty batch could
210
215
  # stay empty all the way down to the close_batch call.
211
- time_taken = java.lang.System.current_time_millis - @inflight_clocks[Thread.current]
212
- @event_metric.report_time(:duration_in_millis, time_taken)
213
- @pipeline_metric.report_time(:duration_in_millis, time_taken)
216
+ @inflight_clocks[Thread.current].each(&:stop)
214
217
  end
215
218
  @inflight_clocks.delete(Thread.current)
216
219
  end
@@ -281,12 +284,6 @@ module LogStash; module Util
281
284
  # @cancelled[event] = true
282
285
  end
283
286
 
284
- def to_a
285
- events = []
286
- each {|e| events << e}
287
- events
288
- end
289
-
290
287
  def each(&blk)
291
288
  # take care not to cause @originals or @generated to change during iteration
292
289