rubysl-drb 1.0.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -2
- data/lib/drb/acl.rb +128 -24
- data/lib/drb/drb.rb +349 -299
- data/lib/drb/eq.rb +1 -3
- data/lib/drb/extserv.rb +16 -7
- data/lib/drb/extservm.rb +17 -13
- data/lib/drb/gw.rb +40 -2
- data/lib/drb/invokemethod.rb +6 -6
- data/lib/drb/observer.rb +13 -10
- data/lib/drb/ssl.rb +246 -93
- data/lib/drb/timeridconv.rb +53 -43
- data/lib/drb/unix.rb +32 -25
- data/lib/rubysl/drb/version.rb +1 -1
- data/rubysl-drb.gemspec +3 -1
- data/spec/drbserver/here_spec.rb +6 -0
- data/spec/drbserver/verbose_spec.rb +4 -4
- metadata +20 -17
data/lib/drb/timeridconv.rb
CHANGED
@@ -2,87 +2,97 @@ require 'drb/drb'
|
|
2
2
|
require 'monitor'
|
3
3
|
|
4
4
|
module DRb
|
5
|
+
|
6
|
+
# Timer id conversion keeps objects alive for a certain amount of time after
|
7
|
+
# their last access. The default time period is 600 seconds and can be
|
8
|
+
# changed upon initialization.
|
9
|
+
#
|
10
|
+
# To use TimerIdConv:
|
11
|
+
#
|
12
|
+
# DRb.install_id_conv TimerIdConv.new 60 # one minute
|
13
|
+
|
5
14
|
class TimerIdConv < DRbIdConv
|
6
|
-
class TimerHolder2
|
15
|
+
class TimerHolder2 # :nodoc:
|
7
16
|
include MonitorMixin
|
8
17
|
|
9
18
|
class InvalidIndexError < RuntimeError; end
|
10
19
|
|
11
20
|
def initialize(timeout=600)
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
21
|
+
super()
|
22
|
+
@sentinel = Object.new
|
23
|
+
@gc = {}
|
24
|
+
@curr = {}
|
25
|
+
@renew = {}
|
26
|
+
@timeout = timeout
|
27
|
+
@keeper = keeper
|
19
28
|
end
|
20
29
|
|
21
30
|
def add(obj)
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
31
|
+
synchronize do
|
32
|
+
key = obj.__id__
|
33
|
+
@curr[key] = obj
|
34
|
+
return key
|
35
|
+
end
|
27
36
|
end
|
28
37
|
|
29
38
|
def fetch(key, dv=@sentinel)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
+
synchronize do
|
40
|
+
obj = peek(key)
|
41
|
+
if obj == @sentinel
|
42
|
+
return dv unless dv == @sentinel
|
43
|
+
raise InvalidIndexError
|
44
|
+
end
|
45
|
+
@renew[key] = obj # KeepIt
|
46
|
+
return obj
|
47
|
+
end
|
39
48
|
end
|
40
49
|
|
41
50
|
def include?(key)
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
51
|
+
synchronize do
|
52
|
+
obj = peek(key)
|
53
|
+
return false if obj == @sentinel
|
54
|
+
true
|
55
|
+
end
|
47
56
|
end
|
48
57
|
|
49
58
|
def peek(key)
|
50
|
-
|
51
|
-
|
52
|
-
|
59
|
+
synchronize do
|
60
|
+
return @curr.fetch(key, @renew.fetch(key, @gc.fetch(key, @sentinel)))
|
61
|
+
end
|
53
62
|
end
|
54
63
|
|
55
64
|
private
|
56
65
|
def alternate
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
66
|
+
synchronize do
|
67
|
+
@gc = @curr # GCed
|
68
|
+
@curr = @renew
|
69
|
+
@renew = {}
|
70
|
+
end
|
62
71
|
end
|
63
72
|
|
64
73
|
def keeper
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
74
|
+
Thread.new do
|
75
|
+
loop do
|
76
|
+
alternate
|
77
|
+
sleep(@timeout)
|
78
|
+
end
|
79
|
+
end
|
71
80
|
end
|
72
81
|
end
|
73
82
|
|
83
|
+
# Creates a new TimerIdConv which will hold objects for +timeout+ seconds.
|
74
84
|
def initialize(timeout=600)
|
75
85
|
@holder = TimerHolder2.new(timeout)
|
76
86
|
end
|
77
87
|
|
78
|
-
def to_obj(ref)
|
88
|
+
def to_obj(ref) # :nodoc:
|
79
89
|
return super if ref.nil?
|
80
90
|
@holder.fetch(ref)
|
81
91
|
rescue TimerHolder2::InvalidIndexError
|
82
92
|
raise "invalid reference"
|
83
93
|
end
|
84
94
|
|
85
|
-
def to_id(obj)
|
95
|
+
def to_id(obj) # :nodoc:
|
86
96
|
return @holder.add(obj)
|
87
97
|
end
|
88
98
|
end
|
data/lib/drb/unix.rb
CHANGED
@@ -6,33 +6,39 @@ raise(LoadError, "UNIXServer is required") unless defined?(UNIXServer)
|
|
6
6
|
|
7
7
|
module DRb
|
8
8
|
|
9
|
+
# Implements DRb over a UNIX socket
|
10
|
+
#
|
11
|
+
# DRb UNIX socket URIs look like <code>drbunix:<path>?<option></code>. The
|
12
|
+
# option is optional.
|
13
|
+
|
9
14
|
class DRbUNIXSocket < DRbTCPSocket
|
15
|
+
# :stopdoc:
|
10
16
|
def self.parse_uri(uri)
|
11
|
-
if /^drbunix:(.*?)(\?(.*))?$/ =~ uri
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
if /^drbunix:(.*?)(\?(.*))?$/ =~ uri
|
18
|
+
filename = $1
|
19
|
+
option = $3
|
20
|
+
[filename, option]
|
15
21
|
else
|
16
|
-
|
17
|
-
|
22
|
+
raise(DRbBadScheme, uri) unless uri =~ /^drbunix:/
|
23
|
+
raise(DRbBadURI, 'can\'t parse uri:' + uri)
|
18
24
|
end
|
19
25
|
end
|
20
26
|
|
21
27
|
def self.open(uri, config)
|
22
|
-
filename,
|
28
|
+
filename, = parse_uri(uri)
|
23
29
|
filename.untaint
|
24
30
|
soc = UNIXSocket.open(filename)
|
25
31
|
self.new(uri, soc, config)
|
26
32
|
end
|
27
33
|
|
28
34
|
def self.open_server(uri, config)
|
29
|
-
filename,
|
35
|
+
filename, = parse_uri(uri)
|
30
36
|
if filename.size == 0
|
31
|
-
|
37
|
+
soc = temp_server
|
32
38
|
filename = soc.path
|
33
|
-
|
39
|
+
uri = 'drbunix:' + soc.path
|
34
40
|
else
|
35
|
-
|
41
|
+
soc = UNIXServer.open(filename)
|
36
42
|
end
|
37
43
|
owner = config[:UNIXFileOwner]
|
38
44
|
group = config[:UNIXFileGroup]
|
@@ -59,7 +65,7 @@ module DRb
|
|
59
65
|
@server_mode = server_mode
|
60
66
|
@acl = nil
|
61
67
|
end
|
62
|
-
|
68
|
+
|
63
69
|
# import from tempfile.rb
|
64
70
|
Max_try = 10
|
65
71
|
private
|
@@ -67,18 +73,18 @@ module DRb
|
|
67
73
|
tmpdir = Dir::tmpdir
|
68
74
|
n = 0
|
69
75
|
while true
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
76
|
+
begin
|
77
|
+
tmpname = sprintf('%s/druby%d.%d', tmpdir, $$, n)
|
78
|
+
lock = tmpname + '.lock'
|
79
|
+
unless File.exist?(tmpname) or File.exist?(lock)
|
80
|
+
Dir.mkdir(lock)
|
81
|
+
break
|
82
|
+
end
|
83
|
+
rescue
|
84
|
+
raise "cannot generate tempfile `%s'" % tmpname if n >= Max_try
|
85
|
+
#sleep(1)
|
86
|
+
end
|
87
|
+
n += 1
|
82
88
|
end
|
83
89
|
soc = UNIXServer.new(tmpname)
|
84
90
|
Dir.rmdir(lock)
|
@@ -100,9 +106,10 @@ module DRb
|
|
100
106
|
end
|
101
107
|
|
102
108
|
def set_sockopt(soc)
|
103
|
-
soc.fcntl(Fcntl::
|
109
|
+
soc.fcntl(Fcntl::F_SETFD, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC
|
104
110
|
end
|
105
111
|
end
|
106
112
|
|
107
113
|
DRbProtocol.add_protocol(DRbUNIXSocket)
|
114
|
+
# :startdoc:
|
108
115
|
end
|
data/lib/rubysl/drb/version.rb
CHANGED
data/rubysl-drb.gemspec
CHANGED
@@ -16,8 +16,10 @@ Gem::Specification.new do |spec|
|
|
16
16
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
17
17
|
spec.require_paths = ["lib"]
|
18
18
|
|
19
|
+
spec.required_ruby_version = "~> 2.0"
|
20
|
+
|
19
21
|
spec.add_development_dependency "bundler", "~> 1.3"
|
20
22
|
spec.add_development_dependency "rake", "~> 10.0"
|
21
23
|
spec.add_development_dependency "mspec", "~> 1.5"
|
22
|
-
spec.add_development_dependency "rubysl-prettyprint", "~>
|
24
|
+
spec.add_development_dependency "rubysl-prettyprint", "~> 2.0"
|
23
25
|
end
|
@@ -1,18 +1,18 @@
|
|
1
1
|
|
2
2
|
require 'drb'
|
3
3
|
|
4
|
-
describe "DRb::DRbServer
|
4
|
+
describe "DRb::DRbServer.verbose" do
|
5
5
|
it "needs to be reviewed for spec completeness"
|
6
6
|
end
|
7
7
|
|
8
|
-
describe "DRb::DRbServer
|
8
|
+
describe "DRb::DRbServer.verbose=" do
|
9
9
|
it "needs to be reviewed for spec completeness"
|
10
10
|
end
|
11
11
|
|
12
|
-
describe "DRb::DRbServer
|
12
|
+
describe "DRb::DRbServer#verbose" do
|
13
13
|
it "needs to be reviewed for spec completeness"
|
14
14
|
end
|
15
15
|
|
16
|
-
describe "DRb::DRbServer
|
16
|
+
describe "DRb::DRbServer#verbose=" do
|
17
17
|
it "needs to be reviewed for spec completeness"
|
18
18
|
end
|
metadata
CHANGED
@@ -1,71 +1,71 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubysl-drb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Shirai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.3'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.3'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - ~>
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - ~>
|
45
|
+
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.5'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - ~>
|
52
|
+
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.5'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rubysl-prettyprint
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '2.0'
|
69
69
|
description: Ruby standard library drb.
|
70
70
|
email:
|
71
71
|
- brixen@gmail.com
|
@@ -73,8 +73,8 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
-
- .gitignore
|
77
|
-
- .travis.yml
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
78
78
|
- Gemfile
|
79
79
|
- LICENSE
|
80
80
|
- README.md
|
@@ -142,6 +142,7 @@ files:
|
|
142
142
|
- spec/drbserver/default_load_limit_spec.rb
|
143
143
|
- spec/drbserver/default_safe_level_spec.rb
|
144
144
|
- spec/drbserver/front_spec.rb
|
145
|
+
- spec/drbserver/here_spec.rb
|
145
146
|
- spec/drbserver/invokemethod/perform_spec.rb
|
146
147
|
- spec/drbserver/invokemethod18mixin/block_yield_spec.rb
|
147
148
|
- spec/drbserver/invokemethod18mixin/perform_with_block_spec.rb
|
@@ -212,12 +213,12 @@ require_paths:
|
|
212
213
|
- lib
|
213
214
|
required_ruby_version: !ruby/object:Gem::Requirement
|
214
215
|
requirements:
|
215
|
-
- -
|
216
|
+
- - "~>"
|
216
217
|
- !ruby/object:Gem::Version
|
217
|
-
version: '0'
|
218
|
+
version: '2.0'
|
218
219
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
219
220
|
requirements:
|
220
|
-
- -
|
221
|
+
- - ">="
|
221
222
|
- !ruby/object:Gem::Version
|
222
223
|
version: '0'
|
223
224
|
requirements: []
|
@@ -274,6 +275,7 @@ test_files:
|
|
274
275
|
- spec/drbserver/default_load_limit_spec.rb
|
275
276
|
- spec/drbserver/default_safe_level_spec.rb
|
276
277
|
- spec/drbserver/front_spec.rb
|
278
|
+
- spec/drbserver/here_spec.rb
|
277
279
|
- spec/drbserver/invokemethod/perform_spec.rb
|
278
280
|
- spec/drbserver/invokemethod18mixin/block_yield_spec.rb
|
279
281
|
- spec/drbserver/invokemethod18mixin/perform_with_block_spec.rb
|
@@ -334,3 +336,4 @@ test_files:
|
|
334
336
|
- spec/to_id_spec.rb
|
335
337
|
- spec/to_obj_spec.rb
|
336
338
|
- spec/uri_spec.rb
|
339
|
+
has_rdoc:
|