[Backport 8.17] Reimplement LogStash::String setting in Java (#16576)#16947
Closed
andsel wants to merge 1 commit intoelastic:8.17from
Closed
[Backport 8.17] Reimplement LogStash::String setting in Java (#16576)#16947andsel wants to merge 1 commit intoelastic:8.17from
andsel wants to merge 1 commit intoelastic:8.17from
Conversation
Reimplements `LogStash::Setting::String` Ruby setting class into the `org.logstash.settings.SettingString` and exposes it through `java_import` as `LogStash::Setting::SettingString`. Updates the rspec tests in two ways: - logging mock is now converted to real Log4J appender that spy log line that are later verified - verifies `java.lang.IllegalArgumentException` instead of `ArgumentError` is thrown because the kind of exception thrown by Java code, during verification.
7 tasks
💔 Build Failed
Failed CI Steps
History |
Member
Author
diff --git a/logstash-core/lib/logstash/settings.rb b/logstash-core/lib/logstash/settings.rb
index d34039064..3696886cd 100644
--- a/logstash-core/lib/logstash/settings.rb
+++ b/logstash-core/lib/logstash/settings.rb
@@ -523,27 +523,10 @@ module LogStash
@validator_class.validate(value)
end
end
+
+ java_import org.logstash.settings.SettingString
- class String < Setting
- def initialize(name, default = nil, strict = true, possible_strings = [])
- @possible_strings = possible_strings
- super(name, ::String, default, strict)
- end
-
- def validate(value)
- super(value)
- unless @possible_strings.empty? || @possible_strings.include?(value)
- raise ArgumentError.new("Invalid value \"#{name}: #{value}\". Options are: #{@possible_strings.inspect}")
- end
- end
- end
-
- class NullableString < String
- def validate(value)
- return if value.nil?
- super(value)
- end
- end
+ java_import org.logstash.settings.SettingNullableString
class Password < Coercible
def initialize(name, default = nil, strict = true)
@@ -800,29 +783,7 @@ module LogStash
end
end
- class Modules < Coercible
- def initialize(name, klass, default = nil)
- super(name, klass, default, false)
- end
-
- def set(value)
- coerced_value = coerce(value)
- @wrapped_setting.set(coerced_value)
- coerced_value
- end
-
- def coerce(value)
- if value.is_a?(@klass)
- return value
- end
- @klass.new(value)
- end
-
- protected
- def validate(value)
- coerce(value)
- end
- end
+ java_import org.logstash.settings.NullableSetting
# @see Setting#nullable
# @api internal
diff --git a/logstash-core/lib/logstash/environment.rb b/logstash-core/lib/logstash/environment.rb
index 80f49a88e..e3a04b27c 100644
--- a/logstash-core/lib/logstash/environment.rb
+++ b/logstash-core/lib/logstash/environment.rb
@@ -20,7 +20,6 @@ require "logstash/config/cpu_core_strategy"
require "logstash/settings"
require "logstash/util/cloud_setting_id"
require "logstash/util/cloud_setting_auth"
-require "logstash/util/modules_setting_array"
require "socket"
require "stud/temporary"
@@ -34,26 +33,18 @@ module LogStash
end
[
- Setting::Boolean.new("allow_superuser", true),
- Setting::String.new("node.name", Socket.gethostname),
- Setting::NullableString.new("path.config", nil, false),
+ Setting::Boolean.new("allow_superuser", false),
+ Setting::SettingString.new("node.name", Socket.gethostname),
+ Setting::SettingNullableString.new("path.config", nil, false),
Setting::WritableDirectory.new("path.data", ::File.join(LogStash::Environment::LOGSTASH_HOME, "data")),
- Setting::NullableString.new("config.string", nil, false),
- Setting::Modules.new("modules.cli", LogStash::Util::ModulesSettingArray, []),
- Setting::Modules.new("modules", LogStash::Util::ModulesSettingArray, []),
- Setting.new("modules_list", Array, []),
- Setting.new("modules_variable_list", Array, []),
- Setting::Modules.new("cloud.id", LogStash::Util::CloudSettingId),
- Setting::Modules.new("cloud.auth", LogStash::Util::CloudSettingAuth),
- Setting::Boolean.new("modules_setup", false),
+ Setting::SettingNullableString.new("config.string", nil, false),
Setting::Boolean.new("config.test_and_exit", false),
Setting::Boolean.new("config.reload.automatic", false),
Setting::TimeValue.new("config.reload.interval", "3s"), # in seconds
Setting::Boolean.new("config.support_escapes", false),
- Setting::String.new("config.field_reference.escape_style", "none", true, %w(none percent ampersand)),
- Setting::String.new("event_api.tags.illegal", "rename", true, %w(rename warn)),
+ Setting::SettingString.new("config.field_reference.escape_style", "none", true, %w(none percent ampersand)),
Setting::Boolean.new("metric.collect", true),
- Setting::String.new("pipeline.id", "main"),
+ Setting::SettingString.new("pipeline.id", "main"),
Setting::Boolean.new("pipeline.system", false),
Setting::PositiveInteger.new("pipeline.workers", LogStash::Config::CpuCoreStrategy.maximum),
Setting::PositiveInteger.new("pipeline.batch.size", 125),
@@ -65,32 +56,32 @@ module LogStash
Setting::CoercibleString.new("pipeline.ordered", "auto", true, ["auto", "true", "false"]),
Setting::CoercibleString.new("pipeline.ecs_compatibility", "v8", true, %w(disabled v1 v8)),
Setting.new("path.plugins", Array, []),
- Setting::NullableString.new("interactive", nil, false),
+ Setting::SettingNullableString.new("interactive", nil, false),
Setting::Boolean.new("config.debug", false),
- Setting::String.new("log.level", "info", true, ["fatal", "error", "warn", "debug", "info", "trace"]),
+ Setting::SettingString.new("log.level", "info", true, ["fatal", "error", "warn", "debug", "info", "trace"]),
Setting::Boolean.new("version", false),
Setting::Boolean.new("help", false),
Setting::Boolean.new("enable-local-plugin-development", false),
- Setting::String.new("log.format", "plain", true, ["json", "plain"]),
- Setting::Boolean.new("log.format.json.fix_duplicate_message_fields", false),
- Setting::Boolean.new("api.enabled", true).with_deprecated_alias("http.enabled", "9"),
- Setting::String.new("api.http.host", "127.0.0.1").with_deprecated_alias("http.host", "9"),
- Setting::PortRange.new("api.http.port", 9600..9700).with_deprecated_alias("http.port", "9"),
- Setting::String.new("api.environment", "production").with_deprecated_alias("http.environment", "9"),
- Setting::String.new("api.auth.type", "none", true, %w(none basic)),
- Setting::String.new("api.auth.basic.username", nil, false).nullable,
+ Setting::SettingString.new("log.format", "plain", true, ["json", "plain"]),
+ Setting::Boolean.new("log.format.json.fix_duplicate_message_fields", true),
+ Setting::Boolean.new("api.enabled", true),
+ Setting::SettingString.new("api.http.host", "127.0.0.1"),
+ Setting::PortRange.new("api.http.port", 9600..9700),
+ Setting::SettingString.new("api.environment", "production"),
+ Setting::SettingString.new("api.auth.type", "none", true, %w(none basic)),
+ Setting::SettingString.new("api.auth.basic.username", nil, false).nullable,
Setting::Password.new("api.auth.basic.password", nil, false).nullable,
- Setting::String.new("api.auth.basic.password_policy.mode", "WARN", true, %w[WARN ERROR]),
+ Setting::SettingString.new("api.auth.basic.password_policy.mode", "WARN", true, %w[WARN ERROR]),
Setting::Numeric.new("api.auth.basic.password_policy.length.minimum", 8),
- Setting::String.new("api.auth.basic.password_policy.include.upper", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
- Setting::String.new("api.auth.basic.password_policy.include.lower", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
- Setting::String.new("api.auth.basic.password_policy.include.digit", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
- Setting::String.new("api.auth.basic.password_policy.include.symbol", "OPTIONAL", true, %w[REQUIRED OPTIONAL]),
+ Setting::SettingString.new("api.auth.basic.password_policy.include.upper", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
+ Setting::SettingString.new("api.auth.basic.password_policy.include.lower", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
+ Setting::SettingString.new("api.auth.basic.password_policy.include.digit", "REQUIRED", true, %w[REQUIRED OPTIONAL]),
+ Setting::SettingString.new("api.auth.basic.password_policy.include.symbol", "OPTIONAL", true, %w[REQUIRED OPTIONAL]),
Setting::Boolean.new("api.ssl.enabled", false),
Setting::ExistingFilePath.new("api.ssl.keystore.path", nil, false).nullable,
Setting::Password.new("api.ssl.keystore.password", nil, false).nullable,
Setting::StringArray.new("api.ssl.supported_protocols", nil, true, %w[TLSv1 TLSv1.1 TLSv1.2 TLSv1.3]),
- Setting::String.new("queue.type", "memory", true, ["persisted", "memory"]),
+ Setting::SettingString.new("queue.type", "memory", true, ["persisted", "memory"]),
Setting::Boolean.new("queue.drain", false),
Setting::Bytes.new("queue.page_capacity", "64mb"),
Setting::Bytes.new("queue.max_bytes", "1024mb"),
@@ -102,16 +93,16 @@ module LogStash
Setting::Boolean.new("dead_letter_queue.enable", false),
Setting::Bytes.new("dead_letter_queue.max_bytes", "1024mb"),
Setting::Numeric.new("dead_letter_queue.flush_interval", 5000),
- Setting::String.new("dead_letter_queue.storage_policy", "drop_newer", true, ["drop_newer", "drop_older"]),
- Setting::NullableString.new("dead_letter_queue.retain.age"), # example 5d
+ Setting::SettingString.new("dead_letter_queue.storage_policy", "drop_newer", true, ["drop_newer", "drop_older"]),
+ Setting::SettingNullableString.new("dead_letter_queue.retain.age"), # example 5d
Setting::TimeValue.new("slowlog.threshold.warn", "-1"),
Setting::TimeValue.new("slowlog.threshold.info", "-1"),
Setting::TimeValue.new("slowlog.threshold.debug", "-1"),
Setting::TimeValue.new("slowlog.threshold.trace", "-1"),
- Setting::String.new("keystore.classname", "org.logstash.secret.store.backend.JavaKeyStore"),
- Setting::String.new("keystore.file", ::File.join(::File.join(LogStash::Environment::LOGSTASH_HOME, "config"), "logstash.keystore"), false), # will be populated on
- Setting::NullableString.new("monitoring.cluster_uuid"),
- Setting::String.new("pipeline.buffer.type", nil, false, ["direct", "heap"])
+ Setting::SettingString.new("keystore.classname", "org.logstash.secret.store.backend.JavaKeyStore"),
+ Setting::SettingString.new("keystore.file", ::File.join(::File.join(LogStash::Environment::LOGSTASH_HOME, "config"), "logstash.keystore"), false), # will be populated on
+ Setting::SettingNullableString.new("monitoring.cluster_uuid"),
+ Setting::SettingString.new("pipeline.buffer.type", "heap", true, ["direct", "heap"])
# post_process
].each {|setting| SETTINGS.register(setting) } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Cherry-picked from commit 03b11e9
Reimplements
LogStash::Setting::StringRuby setting class into theorg.logstash.settings.SettingStringand exposes it throughjava_importasLogStash::Setting::SettingString. Updates the rspec tests in two ways:java.lang.IllegalArgumentExceptioninstead ofArgumentErroris thrown because the kind of exception thrown by Java code, during verification.Release notes
What does this PR do?
Why is it important/What is the impact to the user?
Checklist
Author's Checklist
How to test this PR locally
Related issues
Use cases
Screenshots
Logs