clogger RubyGem user+dev discussion/patches/pulls/bugs/help
 help / color / mirror / code / Atom feed
Search results ordered by [date|relevance]  view[summary|nested|Atom feed]
thread overview below | download mbox.gz: |
* [PATCH 2/2] pure: use monotonic clock if possible
  2015-02-27 22:45  4% [PATCH 0/2] fixes for pure-Ruby users Eric Wong
@ 2015-02-27 22:45  7% ` Eric Wong
  0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2015-02-27 22:45 UTC (permalink / raw)
  To: clogger-public

Ruby 2.1.0 and later exposes Process.clock_gettime, resulting
in less garbage and access to the monotonic clock if it is
available.  Try to use it to achieve feature parity with the
C extension (which has always used the monotonic clock if possible).
---
 lib/clogger/pure.rb | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/lib/clogger/pure.rb b/lib/clogger/pure.rb
index 9efb00c..5e7ccfe 100644
--- a/lib/clogger/pure.rb
+++ b/lib/clogger/pure.rb
@@ -28,7 +28,7 @@ def initialize(app, opts = {})
   end
 
   def call(env)
-    start = Time.now
+    start = mono_now
     resp = @app.call(env)
     unless resp.instance_of?(Array) && resp.size == 3
       log(env, 500, {}, start)
@@ -165,7 +165,7 @@ def log(env, status, headers, start = @start)
       when OP_TIME_LOCAL; Time.now.strftime(op[1])
       when OP_TIME_UTC; Time.now.utc.strftime(op[1])
       when OP_REQUEST_TIME
-        t = Time.now - start
+        t = mono_now - start
         time_format(t.to_i, (t - t.to_i) * 1000000, op[1], op[2])
       when OP_TIME
         t = Time.now
@@ -185,4 +185,14 @@ def log(env, status, headers, start = @start)
     end
     nil
   end
+
+  # favor monotonic clock if possible, and try to use clock_gettime in
+  # more recent Rubies since it generates less garbage
+  if defined?(Process::CLOCK_MONOTONIC)
+    def mono_now; Process.clock_gettime(Process::CLOCK_MONOTONIC); end
+  elsif defined?(Process::CLOCK_REALTIME)
+    def mono_now; Process.clock_gettime(Process::CLOCK_REALTIME); end
+  else
+    def mono_now; Time.now.to_f; end
+  end
 end
-- 
EW


^ permalink raw reply related	[relevance 7%]

* [PATCH 0/2] fixes for pure-Ruby users
@ 2015-02-27 22:45  4% Eric Wong
  2015-02-27 22:45  7% ` [PATCH 2/2] pure: use monotonic clock if possible Eric Wong
  0 siblings, 1 reply; 3+ results
From: Eric Wong @ 2015-02-27 22:45 UTC (permalink / raw)
  To: clogger-public

These bugs were discovered by some folks who forgot to upgrade from
clogger 1.0.1 when when upgrading from MRI 1.9.3 to 2.1 and were
inadvertently using the pure Ruby version instead of the C extension.

New release coming, but does not affect users of the C extension.

Eric Wong (2):
      pure: fix reentrancy of request_time
      pure: use monotonic clock if possible


^ permalink raw reply	[relevance 4%]

* [ANN] clogger 2.0.2 - bugfixes for pure Ruby users
@ 2015-02-27 22:57  5% Eric Wong
  0 siblings, 0 replies; 3+ results
From: Eric Wong @ 2015-02-27 22:57 UTC (permalink / raw)
  To: clogger-public

This release fixes a bug discovered in the rarely-used pure Ruby
version in multithreaded Rack servers.

Some folks reported privately that they forgot to upgrade from
clogger 1.0.1 when when upgrading from MRI 1.9.3 to 2.1, so they
were inadvertently using the pure Ruby version instead of the
less-buggy C extension.  This also adds support for using the
monotonic clock under Ruby 2.1+ for request timing, matching
what the C extension used all along.

Users of the C extension are unaffected by bugs this release fixes
and do not need to upgrade.

* pure: fix reentrancy of request_time
* pure: use monotonic clock if possible

^ permalink raw reply	[relevance 5%]

Results 1-3 of 3 | reverse | options above
-- pct% links below jump to the message on this page, permalinks otherwise --
2015-02-27 22:45  4% [PATCH 0/2] fixes for pure-Ruby users Eric Wong
2015-02-27 22:45  7% ` [PATCH 2/2] pure: use monotonic clock if possible Eric Wong
2015-02-27 22:57  5% [ANN] clogger 2.0.2 - bugfixes for pure Ruby users Eric Wong

Code repositories for project(s) associated with this public inbox

	https://yhbt.net/clogger.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).