raindrops 0.15.0 → 0.16.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0af4113866b77c7647e455f5d1fe195dbc332187
4
- data.tar.gz: 44ec9c3ce3460d29a1eddb7276c90af906de335e
3
+ metadata.gz: 0632eff3853589bfe99f749a3db3d12fa991220a
4
+ data.tar.gz: 19c74eeede4492633f1e3b189b24e4a085fbe40f
5
5
  SHA512:
6
- metadata.gz: 6cb3d104e6bdd3b7d0ff11b079f9d67d0f67023e03be3f04f262323dafe89dd04c46468dafc56b5f2b25890474f7fbd031b53c805a3830b5a93f2db7948fff6c
7
- data.tar.gz: 31a20c3c91f156822f1091a759ed576d57dc4fffd53deda79eff3b382e46d90bce9f92030e870e0386d3ec768a51ee72e566150b3ec2800c87e1f8ac8d1d537b
6
+ metadata.gz: a818ad3da0618365d832b5979de131a6fbafe3737877e4a4e95891b993ae6f0c90fd8938cb60494c95cd8ffaf67dd75a017549878f46739442f2739512f3b272
7
+ data.tar.gz: 00b463e110ee126cfbda005af3b6f20c084120428aea74982795b1102dcab9487b461b35834cf3a71885c7d11fea29a3a1596d7f010e93e5210b376c5f6cad96
@@ -0,0 +1,4 @@
1
+ *.gemspec diff=ruby
2
+ *.rb diff=ruby
3
+ *.ru diff=ruby
4
+ Rakefile diff=ruby
@@ -5,3 +5,5 @@ rdoc_url: http://raindrops.bogomips.org/
5
5
  public_email: raindrops-public@bogomips.org
6
6
  private_email: raindrops@bogomips.org
7
7
  ml_url: http://bogomips.org/raindrops-public/
8
+ nntp_url:
9
+ - nntp://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
 
3
3
  GVF=GIT-VERSION-FILE
4
- DEF_VER=v0.15.0
4
+ DEF_VER=v0.16.0
5
5
 
6
6
  LF='
7
7
  '
data/README CHANGED
@@ -37,12 +37,15 @@ and "tcp_diag" kernel modules are loaded as they do not autoload correctly
37
37
 
38
38
  == Install
39
39
 
40
- We recommend GCC 4+ (or compatible) to support the
41
- {atomic builtins}[http://gcc.gnu.org/onlinedocs/gcc/Atomic-Builtins.html]
42
- (__sync_{add,sub}_and_fetch()). For non-GCC 4+ users, we also support
43
- compilation with the
44
- {libatomic_ops}[http://www.hpl.hp.com/research/linux/atomic_ops/]
45
- package starting with Raindrops 0.4.0.
40
+ We recommend GCC 4+ (or compatible) to support the __sync builtins
41
+ (__sync_{add,sub}_and_fetch()):
42
+
43
+ http://gcc.gnu.org/onlinedocs/gcc/_005f_005fsync-Builtins.html
44
+
45
+ For non-GCC 4+ users, we also support compilation with the libatomic_ops
46
+ package starting with Raindrops 0.4.0:
47
+
48
+ https://github.com/ivmai/libatomic_ops
46
49
 
47
50
  If you're using a packaged Ruby distribution, make sure you have a C
48
51
  compiler and the matching Ruby development libraries and headers.
@@ -74,7 +77,7 @@ You can get the latest source via git from the following locations:
74
77
  You may browse the code from the web and download the latest snapshot
75
78
  tarballs here:
76
79
 
77
- * http://bogomips.org/raindrops.git (cgit)
80
+ * http://bogomips.org/raindrops.git
78
81
  * http://repo.or.cz/w/raindrops.git (gitweb)
79
82
 
80
83
  Inline patches (from "git format-patch") to the mailing list are
@@ -86,13 +89,14 @@ git itself. See the Documentation/SubmittingPatches document
86
89
  distributed with git on on patch submission guidelines to follow. Just
87
90
  don't email the git mailing list or maintainer with raindrops patches.
88
91
 
89
- raindrops is licensed under the LGPL+2.1 or later:
92
+ raindrops is licensed under the LGPL-2.1+
90
93
 
91
94
  == Contact
92
95
 
93
96
  All feedback (bug reports, user/development discussion, patches, pull
94
97
  requests) go to the mailing list: mailto:raindrops-public@bogomips.org
95
98
 
96
- Mailing list archives are available here:
99
+ Mailing list archives are available over HTTP and NNTP:
97
100
 
98
101
  http://bogomips.org/raindrops-public/
102
+ nntp://news.public-inbox.org/inbox.comp.lang.ruby.raindrops
@@ -47,7 +47,7 @@
47
47
  end or have_header('atomic_ops.h') or abort <<-SRC
48
48
 
49
49
  libatomic_ops is required if GCC 4+ is not used.
50
- See http://www.hpl.hp.com/research/linux/atomic_ops/
50
+ See https://github.com/ivmai/libatomic_ops
51
51
 
52
52
  Users of Debian-based distros may run:
53
53
 
@@ -618,6 +618,13 @@ static VALUE tcp_stats(struct nogvl_args *args, VALUE addr)
618
618
  return rb_listen_stats(&args->stats);
619
619
  }
620
620
 
621
+ static int drop_placeholders(st_data_t k, st_data_t v, st_data_t ign)
622
+ {
623
+ if ((VALUE)v == Qtrue)
624
+ return ST_DELETE;
625
+ return ST_CONTINUE;
626
+ }
627
+
621
628
  /*
622
629
  * call-seq:
623
630
  * Raindrops::Linux.tcp_listener_stats([addrs[, sock]]) => hash
@@ -658,10 +665,9 @@ static VALUE tcp_listener_stats(int argc, VALUE *argv, VALUE self)
658
665
  case T_ARRAY: {
659
666
  long i;
660
667
  long len = RARRAY_LEN(addrs);
661
- VALUE cur;
662
668
 
663
669
  if (len == 1) {
664
- cur = rb_ary_entry(addrs, 0);
670
+ VALUE cur = rb_ary_entry(addrs, 0);
665
671
 
666
672
  rb_hash_aset(rv, cur, tcp_stats(&args, cur));
667
673
  return rv;
@@ -671,7 +677,7 @@ static VALUE tcp_listener_stats(int argc, VALUE *argv, VALUE self)
671
677
  VALUE cur = rb_ary_entry(addrs, i);
672
678
 
673
679
  parse_addr(&check, cur);
674
- rb_hash_aset(rv, cur, Qtrue);
680
+ rb_hash_aset(rv, cur, Qtrue /* placeholder */);
675
681
  }
676
682
  /* fall through */
677
683
  }
@@ -689,6 +695,9 @@ static VALUE tcp_listener_stats(int argc, VALUE *argv, VALUE self)
689
695
  st_foreach(args.table, NIL_P(addrs) ? st_to_hash : st_AND_hash, rv);
690
696
  st_free_table(args.table);
691
697
 
698
+ if (RHASH_SIZE(rv) > 1)
699
+ rb_hash_foreach(rv, drop_placeholders, Qfalse);
700
+
692
701
  /* let GC deal with corner cases */
693
702
  if (argc < 2) rb_io_close(sock);
694
703
  return rv;
@@ -13,10 +13,6 @@
13
13
  # - Kgio::TCPServer#kgio_accept
14
14
  # - Kgio::TCPServer#kgio_tryaccept
15
15
  module Raindrops::Aggregate::LastDataRecv
16
- # :stopdoc:
17
- TCP_Info = Raindrops::TCP_Info
18
- # :startdoc:
19
-
20
16
  # The integer value of +last_data_recv+ is sent to this object.
21
17
  # This is usually a duck type compatible with the \Aggregate class,
22
18
  # but can be *anything* that accepts the *<<* method.
@@ -78,7 +74,7 @@ def accept_nonblock
78
74
  # +last_data_recv+ to be accurate
79
75
  def count!(io)
80
76
  if io
81
- x = TCP_Info.new(io)
77
+ x = Raindrops::TCP_Info.new(io)
82
78
  @raindrops_aggregate << x.last_data_recv
83
79
  end
84
80
  io
@@ -8,7 +8,6 @@
8
8
  # Instead of snapshotting, Raindrops::Aggregate::LastDataRecv may be used
9
9
  # to aggregate statistics from +all+ accepted sockets as they arrive
10
10
  # based on the +last_data_recv+ field in Raindrops::TCP_Info
11
- require 'pathname'
12
11
 
13
12
  module Raindrops::Linux
14
13
 
@@ -46,7 +45,8 @@ def unix_listener_stats(paths = nil)
46
45
  path.force_encoding(Encoding::BINARY) if defined?(Encoding)
47
46
  if File.symlink?(path)
48
47
  link = path
49
- path = Pathname.new(link).realpath.to_s
48
+ path = File.readlink(link)
49
+ path.force_encoding(Encoding::BINARY) if defined?(Encoding)
50
50
  rv[link] = rv[path] # vivify ListenerStats
51
51
  else
52
52
  rv[path] # vivify ListenerStats
@@ -77,11 +77,9 @@ class Raindrops::Middleware
77
77
  # and both counters are updated atomically.
78
78
  #
79
79
  # This is supported on all operating systems supported by Raindrops
80
- class Stats < Raindrops::Struct.new(:calling, :writing)
81
- end
80
+ Stats = Raindrops::Struct.new(:calling, :writing)
82
81
 
83
82
  # :stopdoc:
84
- PATH_INFO = "PATH_INFO"
85
83
  require "raindrops/middleware/proxy"
86
84
  # :startdoc:
87
85
 
@@ -111,7 +109,7 @@ def initialize(app, opts = {})
111
109
 
112
110
  # standard Rack endpoint
113
111
  def call(env) # :nodoc:
114
- env[PATH_INFO] == @path and return stats_response
112
+ env['PATH_INFO'] == @path and return stats_response
115
113
  begin
116
114
  @stats.incr_calling
117
115
 
data/pkg.mk CHANGED
@@ -86,7 +86,7 @@ fix-perms:
86
86
  gem: $(pkggem)
87
87
 
88
88
  install-gem: $(pkggem)
89
- gem install $(CURDIR)/$<
89
+ gem install --local $(CURDIR)/$<
90
90
 
91
91
  $(pkggem): manifest fix-perms
92
92
  gem build $(rfpackage).gemspec
@@ -24,7 +24,6 @@
24
24
  s.add_development_dependency('io-extra', [ '~> 1.2', '>= 1.2.3'])
25
25
  s.add_development_dependency('posix_mq', '~> 2.0')
26
26
  s.add_development_dependency('rack', '~> 1.2')
27
- s.add_development_dependency('unicorn', '>= 0.98')
28
27
  s.add_development_dependency('olddoc', '~> 1.0')
29
28
 
30
29
  s.licenses = %w(LGPL-2.1+)
@@ -214,6 +214,13 @@ def test_tcp_multi
214
214
  assert_equal 0, stats[addr1].active
215
215
  assert_equal 1, stats[addr2].queued
216
216
  assert_equal 1, stats[addr2].active
217
+
218
+ # make sure we don't leave "true" placeholders in results if a
219
+ # listener becomes invalid (even momentarily).
220
+ s2.close
221
+ stats = tcp_listener_stats(addrs)
222
+ assert stats.values.all? { |x| x.instance_of?(Raindrops::ListenStats) },
223
+ "placeholders left: #{stats.inspect}"
217
224
  end
218
225
 
219
226
  # tries to overflow buffers
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: raindrops
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.15.0
4
+ version: 0.16.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - raindrops hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-22 00:00:00.000000000 Z
11
+ date: 2016-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aggregate
@@ -86,20 +86,6 @@ dependencies:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
88
  version: '1.2'
89
- - !ruby/object:Gem::Dependency
90
- name: unicorn
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - ">="
94
- - !ruby/object:Gem::Version
95
- version: '0.98'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - ">="
101
- - !ruby/object:Gem::Version
102
- version: '0.98'
103
89
  - !ruby/object:Gem::Dependency
104
90
  name: olddoc
105
91
  requirement: !ruby/object:Gem::Requirement
@@ -143,6 +129,7 @@ extra_rdoc_files:
143
129
  - ext/raindrops/linux_tcp_info.c
144
130
  files:
145
131
  - ".document"
132
+ - ".gitattributes"
146
133
  - ".gitignore"
147
134
  - ".manifest"
148
135
  - ".olddoc.yml"
@@ -219,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
219
206
  version: '0'
220
207
  requirements: []
221
208
  rubyforge_project:
222
- rubygems_version: 2.5.0
209
+ rubygems_version: 2.5.2
223
210
  signing_key:
224
211
  specification_version: 4
225
212
  summary: real-time stats for preforking Rack servers