* [PATCH] reduce autoload footprint
@ 2016-11-02 0:51 Eric Wong
2016-11-02 1:24 ` [PATCH 2/1] fix loading regressions Eric Wong
0 siblings, 1 reply; 2+ messages in thread
From: Eric Wong @ 2016-11-02 0:51 UTC (permalink / raw)
To: regurgitator-public; +Cc: Eric Wong
Using autoload blindly can lead to subtle race conditions
in Ruby itself, as well as increasing complexity and decreasing
reproducibility of bugs.
require_relative is faster and less syscall-intensive
an regular "require" or "autoload".
---
lib/regurgitator.rb | 8 --------
lib/regurgitator/domain_host.rb | 1 +
lib/regurgitator/domain_path.rb | 1 +
lib/regurgitator/endpoint.rb | 4 ++++
lib/regurgitator/file_info.rb | 4 ++++
lib/regurgitator/list_keys.rb | 3 +++
lib/regurgitator/local.rb | 1 +
lib/regurgitator/one_domain.rb | 2 ++
lib/regurgitator/server_settings.rb | 2 ++
test/test_local.rb | 3 ++-
test/test_server_settings.rb | 1 +
11 files changed, 21 insertions(+), 9 deletions(-)
diff --git a/lib/regurgitator.rb b/lib/regurgitator.rb
index 3a2d439..a8b4393 100644
--- a/lib/regurgitator.rb
+++ b/lib/regurgitator.rb
@@ -13,14 +13,6 @@ require 'rpatricia'
# so just "require 'regurgitator'" in your code.
module Regurgitator
- autoload :ServerSettings, 'regurgitator/server_settings'
- autoload :Domain, 'regurgitator/domain'
- autoload :Device, 'regurgitator/device'
- autoload :FileInfo, 'regurgitator/file_info'
- autoload :Endpoint, 'regurgitator/endpoint'
- autoload :FileRequest, 'regurgitator/file_request'
- autoload :Local, 'regurgitator/local'
- autoload :LocalFile, 'regurgitator/local_file'
autoload :ListKeys, 'regurgitator/list_keys'
# Rack middlewares/apps
autoload :DomainPath, 'regurgitator/domain_path'
diff --git a/lib/regurgitator/domain_host.rb b/lib/regurgitator/domain_host.rb
index cf49940..32a6e52 100644
--- a/lib/regurgitator/domain_host.rb
+++ b/lib/regurgitator/domain_host.rb
@@ -1,4 +1,5 @@
# -*- encoding: binary -*-
+require_relative 'endpoint'
# Matches GET and HEAD requests in the format of ":domain.example.com/:dkey"
# where domain is read from the Host: header.
diff --git a/lib/regurgitator/domain_path.rb b/lib/regurgitator/domain_path.rb
index 6286dfa..b84a1c9 100644
--- a/lib/regurgitator/domain_path.rb
+++ b/lib/regurgitator/domain_path.rb
@@ -1,4 +1,5 @@
# -*- encoding: binary -*-
+require_relative 'endpoint'
# matches GET and HEAD requests in the format of "/:namespace/:dkey"
# where +:dkey+ may contain multiple slashes
diff --git a/lib/regurgitator/endpoint.rb b/lib/regurgitator/endpoint.rb
index 5228cbd..24662d3 100644
--- a/lib/regurgitator/endpoint.rb
+++ b/lib/regurgitator/endpoint.rb
@@ -1,5 +1,9 @@
# -*- encoding: binary -*-
require "socket"
+require_relative 'file_request'
+require_relative 'file_info'
+require_relative 'local'
+
module Regurgitator::Endpoint # :nodoc:
include Regurgitator::FileInfo
include Rack::Utils
diff --git a/lib/regurgitator/file_info.rb b/lib/regurgitator/file_info.rb
index 57fbc8b..a63c0af 100644
--- a/lib/regurgitator/file_info.rb
+++ b/lib/regurgitator/file_info.rb
@@ -1,4 +1,8 @@
# -*- encoding: binary -*-
+
+require_relative 'domain'
+require_relative 'device'
+
module Regurgitator::FileInfo # :nodoc:
include Regurgitator::Domain
include Regurgitator::Device
diff --git a/lib/regurgitator/list_keys.rb b/lib/regurgitator/list_keys.rb
index eaa5700..7bcb73a 100644
--- a/lib/regurgitator/list_keys.rb
+++ b/lib/regurgitator/list_keys.rb
@@ -1,4 +1,7 @@
# -*- encoding: binary -*-
+
+require_relative 'domain'
+
module Regurgitator::ListKeys # :nodoc:
include Regurgitator::Domain
diff --git a/lib/regurgitator/local.rb b/lib/regurgitator/local.rb
index 35bfaef..d986d8b 100644
--- a/lib/regurgitator/local.rb
+++ b/lib/regurgitator/local.rb
@@ -1,6 +1,7 @@
# -*- encoding: binary -*-
require "socket"
require "set"
+require_relative 'local_file'
module Regurgitator::Local # :nodoc:
diff --git a/lib/regurgitator/one_domain.rb b/lib/regurgitator/one_domain.rb
index aeb4246..372ff13 100644
--- a/lib/regurgitator/one_domain.rb
+++ b/lib/regurgitator/one_domain.rb
@@ -1,5 +1,7 @@
# -*- encoding: binary -*-
+require_relative 'endpoint'
+
# matches GET and HEAD requests in the format of "/:dkey" from a
# single, preconfigured domain.
#
diff --git a/lib/regurgitator/server_settings.rb b/lib/regurgitator/server_settings.rb
index 998a0a4..181c8e9 100644
--- a/lib/regurgitator/server_settings.rb
+++ b/lib/regurgitator/server_settings.rb
@@ -1,5 +1,7 @@
# -*- encoding: binary -*-
# helpers for server_settings lookups
+
+require_relative 'local'
module Regurgitator::ServerSettings # :nodoc:
SETTINGS_LOOKUP = 'SELECT value FROM server_settings WHERE field = ? LIMIT 1'
diff --git a/test/test_local.rb b/test/test_local.rb
index af3b07e..2f644a6 100644
--- a/test/test_local.rb
+++ b/test/test_local.rb
@@ -1,7 +1,8 @@
require "test/unit"
-require "regurgitator"
require "tmpdir"
require "fileutils"
+require "regurgitator"
+require "regurgitator/local"
class TestLocal < Test::Unit::TestCase
include Regurgitator::Local
diff --git a/test/test_server_settings.rb b/test/test_server_settings.rb
index ea8c283..a5f531c 100644
--- a/test/test_server_settings.rb
+++ b/test/test_server_settings.rb
@@ -1,5 +1,6 @@
require 'test/unit'
require 'regurgitator'
+require 'regurgitator/server_settings'
class TestServerSettings < Test::Unit::TestCase
include Regurgitator::ServerSettings
--
EW
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [PATCH 2/1] fix loading regressions
2016-11-02 0:51 [PATCH] reduce autoload footprint Eric Wong
@ 2016-11-02 1:24 ` Eric Wong
0 siblings, 0 replies; 2+ messages in thread
From: Eric Wong @ 2016-11-02 1:24 UTC (permalink / raw)
To: regurgitator-public
Oops, we must always load regurgitator/local since it's
part of an API people are using...
And server_settings needs to be loaded, somehow.
---
lib/regurgitator.rb | 2 ++
lib/regurgitator/device.rb | 3 +++
2 files changed, 5 insertions(+)
diff --git a/lib/regurgitator.rb b/lib/regurgitator.rb
index a8b4393..71ec2b8 100644
--- a/lib/regurgitator.rb
+++ b/lib/regurgitator.rb
@@ -33,3 +33,5 @@ module Regurgitator
Process.clock_gettime(Process::CLOCK_MONOTONIC)
end
end
+
+require_relative 'regurgitator/local'
diff --git a/lib/regurgitator/device.rb b/lib/regurgitator/device.rb
index 04014aa..87f4a3c 100644
--- a/lib/regurgitator/device.rb
+++ b/lib/regurgitator/device.rb
@@ -1,5 +1,8 @@
# -*- encoding: binary -*-
# helpers for device lookups
+
+require_relative 'server_settings'
+
module Regurgitator::Device # :nodoc:
include Regurgitator::ServerSettings
--
EW
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-11-02 1:24 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-02 0:51 [PATCH] reduce autoload footprint Eric Wong
2016-11-02 1:24 ` [PATCH 2/1] fix loading regressions Eric Wong
Code repositories for project(s) associated with this public inbox
https://yhbt.net/regurgitator.git/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).