-
Notifications
You must be signed in to change notification settings - Fork 3.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Backport 8.17] Reimplement LogStash::String setting in Java (#16576) #16947
Closed
Conversation
This file contains 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
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 |
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) } |
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::String
Ruby setting class into theorg.logstash.settings.SettingString
and exposes it throughjava_import
asLogStash::Setting::SettingString
. Updates the rspec tests in two ways:java.lang.IllegalArgumentException
instead ofArgumentError
is 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