Skip to content

Commit ac69465

Browse files
authored
Merge pull request #92 from OhJuhun/implement-delegation-token-max-lifetime-option
Implement delegation token max lifetime option
2 parents c9a68b5 + 7c056fe commit ac69465

File tree

3 files changed

+24
-8
lines changed

3 files changed

+24
-8
lines changed

fluent-plugin-webhdfs.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,5 +23,5 @@ Gem::Specification.new do |gem|
2323
gem.add_development_dependency "bzip2-ffi"
2424
gem.add_development_dependency "zstandard"
2525
gem.add_runtime_dependency "fluentd", '>= 0.14.22'
26-
gem.add_runtime_dependency "webhdfs", '>= 0.10.0'
26+
gem.add_runtime_dependency "webhdfs", '>= 0.11.0'
2727
end

lib/fluent/plugin/out_webhdfs.rb

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ class Fluent::Plugin::WebHDFSOutput < Fluent::Plugin::Output
7070
config_param :renew_kerberos_delegation_token, :bool, default: false
7171
desc 'delegation token reuse timer (default 8h)'
7272
config_param :renew_kerberos_delegation_token_interval, :time, default: 8 * 60 * 60
73+
desc 'delegation token max-lifetime (default 7d)'
74+
config_param :kerberos_delegation_token_max_lifetime, :time, default: 7 * 24 * 60 * 60
7375

7476
SUPPORTED_COMPRESS = [:gzip, :bzip2, :snappy, :hadoop_snappy, :lzo_command, :zstd, :text]
7577
desc "Compression method (#{SUPPORTED_COMPRESS.join(',')})"
@@ -114,7 +116,7 @@ def configure(conf)
114116
else 86400
115117
end
116118
if buffer_config = conf.elements(name: "buffer").first
117-
timekey = buffer_config["timekey"] || timekey
119+
timekey = buffer_config["timekey"] || timekey
118120
end
119121

120122
compat_parameters_convert(conf, :buffer, default_chunk_key: "time")
@@ -189,7 +191,9 @@ def configure(conf)
189191
end
190192

191193
@renew_kerberos_delegation_token_interval_hour = nil
194+
@kerberos_delegation_token_max_lifetime_hour = nil
192195
if @renew_kerberos_delegation_token
196+
@kerberos_delegation_token_max_lifetime_hour = @kerberos_delegation_token_max_lifetime / 60 / 60
193197
unless @username
194198
raise Fluent::ConfigError, "username is missing. If you want to reuse delegation token, follow with kerberos accounts"
195199
end
@@ -215,7 +219,7 @@ def multi_workers_ready?
215219
end
216220

217221
def prepare_client(host, port, username)
218-
client = WebHDFS::Client.new(host, port, username, nil, nil, nil, {}, @renew_kerberos_delegation_token_interval_hour)
222+
client = WebHDFS::Client.new(host, port, username, nil, nil, nil, {}, @renew_kerberos_delegation_token_interval_hour, @kerberos_delegation_token_max_lifetime_hour)
219223
if @httpfs
220224
client.httpfs_mode = true
221225
end
@@ -542,4 +546,4 @@ def self.register_compressor(name, compressor)
542546
require 'fluent/plugin/webhdfs_compressor_snappy'
543547
require 'fluent/plugin/webhdfs_compressor_hadoop_snappy'
544548
require 'fluent/plugin/webhdfs_compressor_lzo_command'
545-
require 'fluent/plugin/webhdfs_compressor_zstd'
549+
require 'fluent/plugin/webhdfs_compressor_zstd'

test/plugin/test_out_webhdfs.rb

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ def test_time_key_without_buffer_section
328328
})
329329

330330
test "renew_kerberos_delegation_token default" do
331-
mock.proxy(WebHDFS::Client).new("server.local", 14000, "hdfs_user", nil, nil, nil, {}, nil).once
331+
mock.proxy(WebHDFS::Client).new("server.local", 14000, "hdfs_user", nil, nil, nil, {}, nil, nil).once
332332

333333
d = create_driver(CONFIG_KERBEROS)
334334

@@ -337,18 +337,20 @@ def test_time_key_without_buffer_section
337337
kerberos: true,
338338
renew_kerberos_delegation_token: false,
339339
renew_kerberos_delegation_token_interval_hour: nil,
340+
kerberos_delegation_token_max_lifetime_hour: nil,
340341
},
341342
{
342343
kerberos: d.instance.kerberos,
343344
renew_kerberos_delegation_token: d.instance.instance_eval("@renew_kerberos_delegation_token"),
344345
renew_kerberos_delegation_token_interval_hour: d.instance.instance_eval("@renew_kerberos_delegation_token_interval_hour"),
346+
kerberos_delegation_token_max_lifetime_hour: d.instance.instance_eval("@kerberos_delegation_token_max_lifetime_hour"),
345347
})
346348
end
347349

348350
test "default renew_kerberos_delegation_token_interval" do
349351
expected_hour = 8
350-
351-
mock.proxy(WebHDFS::Client).new("server.local", 14000, "hdfs_user", nil, nil, nil, {}, expected_hour).once
352+
expected_delegation_token_max_lifetime_hour = 7 * 24
353+
mock.proxy(WebHDFS::Client).new("server.local", 14000, "hdfs_user", nil, nil, nil, {}, expected_hour, expected_delegation_token_max_lifetime_hour).once
352354

353355
d = create_driver(CONFIG_KERBEROS +
354356
config_element("", "", { "renew_kerberos_delegation_token" => true }))
@@ -359,19 +361,24 @@ def test_time_key_without_buffer_section
359361
renew_kerberos_delegation_token: true,
360362
renew_kerberos_delegation_token_interval: expected_hour * 60 * 60,
361363
renew_kerberos_delegation_token_interval_hour: expected_hour,
364+
kerberos_delegation_token_max_lifetime: expected_delegation_token_max_lifetime_hour * 60 * 60,
365+
kerberos_delegation_token_max_lifetime_hour: expected_delegation_token_max_lifetime_hour,
362366
},
363367
{
364368
kerberos: d.instance.kerberos,
365369
renew_kerberos_delegation_token: d.instance.instance_eval("@renew_kerberos_delegation_token"),
366370
renew_kerberos_delegation_token_interval: d.instance.instance_eval("@renew_kerberos_delegation_token_interval"),
367371
renew_kerberos_delegation_token_interval_hour: d.instance.instance_eval("@renew_kerberos_delegation_token_interval_hour"),
372+
kerberos_delegation_token_max_lifetime: d.instance.instance_eval("@kerberos_delegation_token_max_lifetime"),
373+
kerberos_delegation_token_max_lifetime_hour: d.instance.instance_eval("@kerberos_delegation_token_max_lifetime_hour"),
368374
})
369375
end
370376

371377
test "renew_kerberos_delegation_token_interval" do
372378
expected_hour = 10
379+
expected_delegation_token_max_lifetime_hour = 24
373380

374-
mock.proxy(WebHDFS::Client).new("server.local", 14000, "hdfs_user", nil, nil, nil, {}, expected_hour).once
381+
mock.proxy(WebHDFS::Client).new("server.local", 14000, "hdfs_user", nil, nil, nil, {}, expected_hour,expected_delegation_token_max_lifetime_hour).once
375382

376383
d = create_driver(
377384
CONFIG_KERBEROS +
@@ -380,6 +387,7 @@ def test_time_key_without_buffer_section
380387
{
381388
"renew_kerberos_delegation_token" => true,
382389
"renew_kerberos_delegation_token_interval" => "#{expected_hour}h",
390+
"kerberos_delegation_token_max_lifetime" => "#{expected_delegation_token_max_lifetime_hour}h"
383391
}))
384392

385393
assert_equal(
@@ -388,12 +396,16 @@ def test_time_key_without_buffer_section
388396
renew_kerberos_delegation_token: true,
389397
renew_kerberos_delegation_token_interval: expected_hour * 60 * 60,
390398
renew_kerberos_delegation_token_interval_hour: expected_hour,
399+
kerberos_delegation_token_max_lifetime: expected_delegation_token_max_lifetime_hour * 60 * 60,
400+
kerberos_delegation_token_max_lifetime_hour: expected_delegation_token_max_lifetime_hour
391401
},
392402
{
393403
kerberos: d.instance.kerberos,
394404
renew_kerberos_delegation_token: d.instance.instance_eval("@renew_kerberos_delegation_token"),
395405
renew_kerberos_delegation_token_interval: d.instance.instance_eval("@renew_kerberos_delegation_token_interval"),
396406
renew_kerberos_delegation_token_interval_hour: d.instance.instance_eval("@renew_kerberos_delegation_token_interval_hour"),
407+
kerberos_delegation_token_max_lifetime: d.instance.instance_eval("@kerberos_delegation_token_max_lifetime"),
408+
kerberos_delegation_token_max_lifetime_hour: d.instance.instance_eval("@kerberos_delegation_token_max_lifetime_hour"),
397409
})
398410
end
399411

0 commit comments

Comments
 (0)