Skip to content

Commit 7e873b8

Browse files
committed
msi: fix slow start issue on Windows
Until chef/win32-service#85 is merged, use forked version of win32-service. This fix should be applied to fluent-package not to block starting fluentdwinsvc service on Windows. See fluent#618 Closes: fluent#630 NOTE: even though just putting the following line does not install forked version of win32-service, so install it explicitly as same as fluentd gem. gem "win32-service", github: "fluent-plugins-nursery/win32-service", branch: "fluent-package", platforms: [:mingw, :x64_mingw] Signed-off-by: Kentaro Hayashi <hayashi@clear-code.com>
1 parent 1bd0d76 commit 7e873b8

File tree

4 files changed

+67
-7
lines changed

4 files changed

+67
-7
lines changed

fluent-package/Gemfile

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,19 @@ if ENV["INSTALL_GEM_FROM_LOCAL_REPO"]
3131
# into managed Gemfile.lock
3232
source FLUENTD_LOCAL_GEM_REPO do
3333
gem "fluentd"
34+
# Bundle forked version of win32-service until
35+
# https://github.com/chef/win32-service/pull/85 is merged.
36+
# This workaround should be applied to fluent-package not to block starting
37+
# fluentdwinsvc service on Windows. See
38+
# https://github.com/fluent/fluent-package-builder/issues/618
39+
# NOTE: platforms: does not work in source ... do block
40+
gem "win32-service" if RUBY_PLATFORM =~ /mswin|mingw/
3441
end
3542
else
3643
# Lock to specific revision
3744
git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3845
gem "fluentd", github: "fluent/fluentd", ref: FLUENTD_REVISION
46+
gem "win32-service", github: "fluent-plugins-nursery/win32-service", branch: "fluent-package", platforms: [:mingw, :x64_mingw]
3947
end
4048

4149
# plugin gems
@@ -81,7 +89,8 @@ gem "ffi-win32-extensions", "1.0.4", platforms: windows_platforms
8189
gem "nokogiri", "1.15.5", platforms: windows_platforms
8290
gem "win32-event", "0.6.3", platforms: windows_platforms
8391
gem "win32-ipc", "0.7.0", platforms: windows_platforms
84-
gem "win32-service", "2.3.2", platforms: windows_platforms
92+
# Use officially released version when PR was merged and released.
93+
#gem "win32-service", "2.3.2", platforms: windows_platforms
8594
gem "winevt_c", "0.10.1", platforms: windows_platforms
8695
gem "win32-eventlog", "0.6.7", platforms: windows_platforms
8796
gem "fluent-plugin-parser-winevt_xml", "0.2.6", platforms: windows_platforms

fluent-package/Gemfile.lock

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1+
GIT
2+
remote: https://github.com/fluent-plugins-nursery/win32-service
3+
revision: cfcc2007b3843127329d6a7307a62a927a714327
4+
branch: fluent-package
5+
specs:
6+
win32-service (2.3.2)
7+
ffi
8+
ffi-win32-extensions
9+
110
GIT
211
remote: https://github.com/fluent/fluentd
312
revision: d3cf2e0f95a0ad88b9897197db6c5152310f114f
@@ -257,9 +266,6 @@ GEM
257266
ffi
258267
win32-ipc (0.7.0)
259268
ffi
260-
win32-service (2.3.2)
261-
ffi
262-
ffi-win32-extensions
263269
winevt_c (0.10.1)
264270
yajl-ruby (1.4.3)
265271
zip-zip (0.3)
@@ -333,7 +339,7 @@ DEPENDENCIES
333339
win32-event (= 0.6.3)
334340
win32-eventlog (= 0.6.7)
335341
win32-ipc (= 0.7.0)
336-
win32-service (= 2.3.2)
342+
win32-service!
337343
winevt_c (= 0.10.1)
338344
yajl-ruby (= 1.4.3)
339345

fluent-package/Rakefile

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ class DownloadTask
177177
attr_reader :file_jemalloc_source
178178
attr_reader :file_ruby_source, :file_ruby_installer_x64
179179
attr_reader :file_fluentd_archive
180+
attr_reader :file_win32_service_archive
180181
attr_reader :files_ruby_gems
181182
attr_reader :file_openssl_source
182183

@@ -199,6 +200,7 @@ class DownloadTask
199200
define_jemalloc_file
200201
define_ruby_files
201202
define_fluentd_archive
203+
define_win32_service_archive if windows?
202204
define_gem_files
203205
define_openssl_file
204206

@@ -210,7 +212,10 @@ class DownloadTask
210212
task :ruby => [@file_ruby_source, @file_ruby_installer_x64]
211213

212214
desc "Clone fluentd repository and create a tarball"
213-
task :fluentd => @file_fluentd_archive
215+
task :fluentd => [@file_fluentd_archive]
216+
217+
desc "Clone win32-service repository and create a tarball"
218+
task :win32_service => [@file_win32_service_archive]
214219

215220
desc "Download ruby gems"
216221
task :ruby_gems => @files_ruby_gems
@@ -318,6 +323,21 @@ class DownloadTask
318323
end
319324
end
320325

326+
def define_win32_service_archive
327+
@file_win32_service_archive = File.join(DOWNLOADS_DIR, "win32-service.tar.gz")
328+
file @file_win32_service_archive do
329+
ensure_directory(DOWNLOADS_DIR) do
330+
dirname = "win32-service"
331+
rm_rf(dirname) if File.exist?(dirname)
332+
sh("git", "clone", "https://github.com/fluent-plugins-nursery/win32-service.git")
333+
cd("win32-service") do
334+
sh("git", "checkout", "fluent-package")
335+
end
336+
sh(*tar_command, "cvfz", "#{dirname}.tar.gz", dirname)
337+
end
338+
end
339+
end
340+
321341
def define_gem_files
322342
paths = []
323343
Dir.glob("#{DOWNLOADS_DIR}/*.gem") do |path|
@@ -407,7 +427,7 @@ class BuildTask
407427
end
408428

409429
desc "Install ruby gems"
410-
task :ruby_gems => [:"download:ruby_gems", :fluentd] do
430+
task :ruby_gems => windows? ? [:"download:ruby_gems", :fluentd, :win32_service] : [:"download:ruby_gems", :fluentd] do
411431
gem_install("bundler", BUNDLER_VERSION)
412432

413433
gem_home = ENV["GEM_HOME"]
@@ -439,6 +459,19 @@ class BuildTask
439459
end
440460
end
441461

462+
desc "Install win32-service"
463+
task :win32_service => [:"download:win32_service"] do
464+
cd(DOWNLOADS_DIR) do
465+
tar_options = ["--no-same-owner", "--force-local"]
466+
archive_path = @download_task.file_win32_service_archive
467+
sh(*tar_command, "xvf", archive_path, *tar_options) unless File.exist?("win32-service")
468+
cd("win32-service") do
469+
sh("rake", "build")
470+
setup_local_gem_repo
471+
end
472+
end
473+
end
474+
442475
desc "Install all gems"
443476
task :gems => [:ruby_gems]
444477

serverspec/windows/td-agent.rb

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
set :os, :family => 'windows'
44
require "bundler"
55
require "win32/service"
6+
require "find"
7+
require "digest/md5"
68

79
config_path = File.join(File.dirname(File.dirname(File.dirname(__FILE__))),
810
"fluent-package/config.rb")
@@ -33,4 +35,14 @@
3335
it "fluentdwinsvc" do
3436
expect(Win32::Service.services.collect(&:service_name).include?('fluentdwinsvc')).to eq true
3537
end
38+
39+
it "forked version" do
40+
Find.find("c:/opt/fluent/lib/ruby/gems") do |f|
41+
if f.end_with?("/lib/win32/daemon.rb")
42+
expect(Digest::MD5.file(f).to_s).to eq "3cb1461c18ab2fd1e39d61c3169ac671".force_encoding("US-ASCII")
43+
elsif f.end_with?("/lib/win32/windows/functions.rb")
44+
expect(Digest::MD5.file(f).to_s).to eq "c40427a92dc1a7b6ba7808410535dd00".force_encoding("US-ASCII")
45+
end
46+
end
47+
end
3648
end

0 commit comments

Comments
 (0)