regurgitator RubyGem user+dev discussion/patches/pulls/bug/help
 help / color / mirror / code / Atom feed
* [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).