rubysl-drb 1.0.0

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.
Files changed (131) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE +25 -0
  6. data/README.md +29 -0
  7. data/Rakefile +1 -0
  8. data/lib/drb.rb +1 -0
  9. data/lib/drb/acl.rb +146 -0
  10. data/lib/drb/drb.rb +1783 -0
  11. data/lib/drb/eq.rb +16 -0
  12. data/lib/drb/extserv.rb +64 -0
  13. data/lib/drb/extservm.rb +89 -0
  14. data/lib/drb/gw.rb +122 -0
  15. data/lib/drb/invokemethod.rb +34 -0
  16. data/lib/drb/observer.rb +22 -0
  17. data/lib/drb/ssl.rb +190 -0
  18. data/lib/drb/timeridconv.rb +91 -0
  19. data/lib/drb/unix.rb +108 -0
  20. data/lib/rubysl/drb.rb +2 -0
  21. data/lib/rubysl/drb/drb.rb +2 -0
  22. data/lib/rubysl/drb/version.rb +5 -0
  23. data/rubysl-drb.gemspec +23 -0
  24. data/spec/config_spec.rb +4 -0
  25. data/spec/current_server_spec.rb +4 -0
  26. data/spec/drbarray/_dump_spec.rb +6 -0
  27. data/spec/drbarray/_load_spec.rb +6 -0
  28. data/spec/drbconn/alive_spec.rb +6 -0
  29. data/spec/drbconn/close_spec.rb +6 -0
  30. data/spec/drbconn/open_spec.rb +6 -0
  31. data/spec/drbconn/send_message_spec.rb +6 -0
  32. data/spec/drbconn/uri_spec.rb +6 -0
  33. data/spec/drbidconv/to_id_spec.rb +6 -0
  34. data/spec/drbidconv/to_obj_spec.rb +6 -0
  35. data/spec/drbmessage/dump_spec.rb +6 -0
  36. data/spec/drbmessage/load_spec.rb +6 -0
  37. data/spec/drbmessage/recv_reply_spec.rb +6 -0
  38. data/spec/drbmessage/recv_request_spec.rb +6 -0
  39. data/spec/drbmessage/send_reply_spec.rb +6 -0
  40. data/spec/drbmessage/send_request_spec.rb +6 -0
  41. data/spec/drbobject/__drbref_spec.rb +4 -0
  42. data/spec/drbobject/__drburi_spec.rb +4 -0
  43. data/spec/drbobject/_dump_spec.rb +4 -0
  44. data/spec/drbobject/_load_spec.rb +4 -0
  45. data/spec/drbobject/eql_spec.rb +4 -0
  46. data/spec/drbobject/equal_value_spec.rb +4 -0
  47. data/spec/drbobject/hash_spec.rb +4 -0
  48. data/spec/drbobject/method_missing_spec.rb +4 -0
  49. data/spec/drbobject/new_spec.rb +0 -0
  50. data/spec/drbobject/new_with_spec.rb +4 -0
  51. data/spec/drbobject/new_with_uri_spec.rb +4 -0
  52. data/spec/drbobject/prepare_backtrace_spec.rb +4 -0
  53. data/spec/drbobject/pretty_print_cycle_spec.rb +4 -0
  54. data/spec/drbobject/pretty_print_spec.rb +4 -0
  55. data/spec/drbobject/respond_to_spec.rb +4 -0
  56. data/spec/drbobject/with_friend_spec.rb +4 -0
  57. data/spec/drbprotocol/add_protocol_spec.rb +6 -0
  58. data/spec/drbprotocol/auto_load_spec.rb +6 -0
  59. data/spec/drbprotocol/open_server_spec.rb +6 -0
  60. data/spec/drbprotocol/open_spec.rb +6 -0
  61. data/spec/drbprotocol/uri_option_spec.rb +6 -0
  62. data/spec/drbserver/alive_spec.rb +6 -0
  63. data/spec/drbserver/check_insecure_method_spec.rb +6 -0
  64. data/spec/drbserver/config_spec.rb +6 -0
  65. data/spec/drbserver/default_acl_spec.rb +6 -0
  66. data/spec/drbserver/default_argc_limit_spec.rb +6 -0
  67. data/spec/drbserver/default_id_conv_spec.rb +6 -0
  68. data/spec/drbserver/default_load_limit_spec.rb +6 -0
  69. data/spec/drbserver/default_safe_level_spec.rb +6 -0
  70. data/spec/drbserver/front_spec.rb +6 -0
  71. data/spec/drbserver/invokemethod/perform_spec.rb +6 -0
  72. data/spec/drbserver/invokemethod18mixin/block_yield_spec.rb +6 -0
  73. data/spec/drbserver/invokemethod18mixin/perform_with_block_spec.rb +6 -0
  74. data/spec/drbserver/make_config_spec.rb +6 -0
  75. data/spec/drbserver/safe_level_spec.rb +6 -0
  76. data/spec/drbserver/stop_service_spec.rb +6 -0
  77. data/spec/drbserver/thread_spec.rb +6 -0
  78. data/spec/drbserver/to_id_spec.rb +6 -0
  79. data/spec/drbserver/to_obj_spec.rb +6 -0
  80. data/spec/drbserver/uri_spec.rb +6 -0
  81. data/spec/drbserver/verbose_spec.rb +18 -0
  82. data/spec/drbtcpsocket/accept_spec.rb +6 -0
  83. data/spec/drbtcpsocket/alive_spec.rb +6 -0
  84. data/spec/drbtcpsocket/close_spec.rb +6 -0
  85. data/spec/drbtcpsocket/getservername_spec.rb +6 -0
  86. data/spec/drbtcpsocket/open_server_inaddr_any_spec.rb +6 -0
  87. data/spec/drbtcpsocket/open_server_spec.rb +6 -0
  88. data/spec/drbtcpsocket/open_spec.rb +6 -0
  89. data/spec/drbtcpsocket/parse_uri_spec.rb +6 -0
  90. data/spec/drbtcpsocket/peeraddr_spec.rb +6 -0
  91. data/spec/drbtcpsocket/recv_reply_spec.rb +6 -0
  92. data/spec/drbtcpsocket/recv_request_spec.rb +6 -0
  93. data/spec/drbtcpsocket/send_reply_spec.rb +6 -0
  94. data/spec/drbtcpsocket/send_request_spec.rb +6 -0
  95. data/spec/drbtcpsocket/set_sockopt_spec.rb +6 -0
  96. data/spec/drbtcpsocket/stream_spec.rb +6 -0
  97. data/spec/drbtcpsocket/uri_option_spec.rb +6 -0
  98. data/spec/drbtcpsocket/uri_spec.rb +6 -0
  99. data/spec/drbundumped/_dump_spec.rb +6 -0
  100. data/spec/drbunknown/_dump_spec.rb +6 -0
  101. data/spec/drbunknown/_load_spec.rb +6 -0
  102. data/spec/drbunknown/buf_spec.rb +6 -0
  103. data/spec/drbunknown/exception_spec.rb +6 -0
  104. data/spec/drbunknown/name_spec.rb +6 -0
  105. data/spec/drbunknown/reload_spec.rb +6 -0
  106. data/spec/drburioption/eql_spec.rb +6 -0
  107. data/spec/drburioption/equal_value_spec.rb +6 -0
  108. data/spec/drburioption/hash_spec.rb +6 -0
  109. data/spec/drburioption/option_spec.rb +6 -0
  110. data/spec/drburioption/to_s_spec.rb +6 -0
  111. data/spec/exception/_dump_spec.rb +6 -0
  112. data/spec/exception/_load_spec.rb +6 -0
  113. data/spec/exception/reason_spec.rb +6 -0
  114. data/spec/exception/unknown_spec.rb +6 -0
  115. data/spec/fetch_server_spec.rb +4 -0
  116. data/spec/fixtures/test_server.rb +8 -0
  117. data/spec/front_spec.rb +4 -0
  118. data/spec/here_spec.rb +4 -0
  119. data/spec/install_acl_spec.rb +4 -0
  120. data/spec/install_id_conv_spec.rb +4 -0
  121. data/spec/mutex_spec.rb +6 -0
  122. data/spec/primary_server_spec.rb +8 -0
  123. data/spec/regist_server_spec.rb +4 -0
  124. data/spec/remove_server_spec.rb +4 -0
  125. data/spec/start_service_spec.rb +36 -0
  126. data/spec/stop_service_spec.rb +24 -0
  127. data/spec/thread_spec.rb +4 -0
  128. data/spec/to_id_spec.rb +4 -0
  129. data/spec/to_obj_spec.rb +4 -0
  130. data/spec/uri_spec.rb +4 -0
  131. metadata +336 -0
@@ -0,0 +1,91 @@
1
+ require 'drb/drb'
2
+ require 'monitor'
3
+
4
+ module DRb
5
+ class TimerIdConv < DRbIdConv
6
+ class TimerHolder2
7
+ include MonitorMixin
8
+
9
+ class InvalidIndexError < RuntimeError; end
10
+
11
+ def initialize(timeout=600)
12
+ super()
13
+ @sentinel = Object.new
14
+ @gc = {}
15
+ @curr = {}
16
+ @renew = {}
17
+ @timeout = timeout
18
+ @keeper = keeper
19
+ end
20
+
21
+ def add(obj)
22
+ synchronize do
23
+ key = obj.__id__
24
+ @curr[key] = obj
25
+ return key
26
+ end
27
+ end
28
+
29
+ def fetch(key, dv=@sentinel)
30
+ synchronize do
31
+ obj = peek(key)
32
+ if obj == @sentinel
33
+ return dv unless dv == @sentinel
34
+ raise InvalidIndexError
35
+ end
36
+ @renew[key] = obj # KeepIt
37
+ return obj
38
+ end
39
+ end
40
+
41
+ def include?(key)
42
+ synchronize do
43
+ obj = peek(key)
44
+ return false if obj == @sentinel
45
+ true
46
+ end
47
+ end
48
+
49
+ def peek(key)
50
+ synchronize do
51
+ return @curr.fetch(key, @renew.fetch(key, @gc.fetch(key, @sentinel)))
52
+ end
53
+ end
54
+
55
+ private
56
+ def alternate
57
+ synchronize do
58
+ @gc = @curr # GCed
59
+ @curr = @renew
60
+ @renew = {}
61
+ end
62
+ end
63
+
64
+ def keeper
65
+ Thread.new do
66
+ loop do
67
+ size = alternate
68
+ sleep(@timeout)
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ def initialize(timeout=600)
75
+ @holder = TimerHolder2.new(timeout)
76
+ end
77
+
78
+ def to_obj(ref)
79
+ return super if ref.nil?
80
+ @holder.fetch(ref)
81
+ rescue TimerHolder2::InvalidIndexError
82
+ raise "invalid reference"
83
+ end
84
+
85
+ def to_id(obj)
86
+ return @holder.add(obj)
87
+ end
88
+ end
89
+ end
90
+
91
+ # DRb.install_id_conv(TimerIdConv.new)
data/lib/drb/unix.rb ADDED
@@ -0,0 +1,108 @@
1
+ require 'socket'
2
+ require 'drb/drb'
3
+ require 'tmpdir'
4
+
5
+ raise(LoadError, "UNIXServer is required") unless defined?(UNIXServer)
6
+
7
+ module DRb
8
+
9
+ class DRbUNIXSocket < DRbTCPSocket
10
+ def self.parse_uri(uri)
11
+ if /^drbunix:(.*?)(\?(.*))?$/ =~ uri
12
+ filename = $1
13
+ option = $3
14
+ [filename, option]
15
+ else
16
+ raise(DRbBadScheme, uri) unless uri =~ /^drbunix:/
17
+ raise(DRbBadURI, 'can\'t parse uri:' + uri)
18
+ end
19
+ end
20
+
21
+ def self.open(uri, config)
22
+ filename, option = parse_uri(uri)
23
+ filename.untaint
24
+ soc = UNIXSocket.open(filename)
25
+ self.new(uri, soc, config)
26
+ end
27
+
28
+ def self.open_server(uri, config)
29
+ filename, option = parse_uri(uri)
30
+ if filename.size == 0
31
+ soc = temp_server
32
+ filename = soc.path
33
+ uri = 'drbunix:' + soc.path
34
+ else
35
+ soc = UNIXServer.open(filename)
36
+ end
37
+ owner = config[:UNIXFileOwner]
38
+ group = config[:UNIXFileGroup]
39
+ if owner || group
40
+ require 'etc'
41
+ owner = Etc.getpwnam( owner ).uid if owner
42
+ group = Etc.getgrnam( group ).gid if group
43
+ File.chown owner, group, filename
44
+ end
45
+ mode = config[:UNIXFileMode]
46
+ File.chmod(mode, filename) if mode
47
+
48
+ self.new(uri, soc, config, true)
49
+ end
50
+
51
+ def self.uri_option(uri, config)
52
+ filename, option = parse_uri(uri)
53
+ return "drbunix:#{filename}", option
54
+ end
55
+
56
+ def initialize(uri, soc, config={}, server_mode = false)
57
+ super(uri, soc, config)
58
+ set_sockopt(@socket)
59
+ @server_mode = server_mode
60
+ @acl = nil
61
+ end
62
+
63
+ # import from tempfile.rb
64
+ Max_try = 10
65
+ private
66
+ def self.temp_server
67
+ tmpdir = Dir::tmpdir
68
+ n = 0
69
+ while true
70
+ begin
71
+ tmpname = sprintf('%s/druby%d.%d', tmpdir, $$, n)
72
+ lock = tmpname + '.lock'
73
+ unless File.exist?(tmpname) or File.exist?(lock)
74
+ Dir.mkdir(lock)
75
+ break
76
+ end
77
+ rescue
78
+ raise "cannot generate tempfile `%s'" % tmpname if n >= Max_try
79
+ #sleep(1)
80
+ end
81
+ n += 1
82
+ end
83
+ soc = UNIXServer.new(tmpname)
84
+ Dir.rmdir(lock)
85
+ soc
86
+ end
87
+
88
+ public
89
+ def close
90
+ return unless @socket
91
+ path = @socket.path if @server_mode
92
+ @socket.close
93
+ File.unlink(path) if @server_mode
94
+ @socket = nil
95
+ end
96
+
97
+ def accept
98
+ s = @socket.accept
99
+ self.class.new(nil, s, @config)
100
+ end
101
+
102
+ def set_sockopt(soc)
103
+ soc.fcntl(Fcntl::F_SETFL, Fcntl::FD_CLOEXEC) if defined? Fcntl::FD_CLOEXEC
104
+ end
105
+ end
106
+
107
+ DRbProtocol.add_protocol(DRbUNIXSocket)
108
+ end
data/lib/rubysl/drb.rb ADDED
@@ -0,0 +1,2 @@
1
+ require "rubysl/drb/drb"
2
+ require "rubysl/drb/version"
@@ -0,0 +1,2 @@
1
+ require 'drb/drb'
2
+
@@ -0,0 +1,5 @@
1
+ module RubySL
2
+ module DRb
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ require './lib/rubysl/drb/version'
3
+
4
+ Gem::Specification.new do |spec|
5
+ spec.name = "rubysl-drb"
6
+ spec.version = RubySL::DRb::VERSION
7
+ spec.authors = ["Brian Shirai"]
8
+ spec.email = ["brixen@gmail.com"]
9
+ spec.description = %q{Ruby standard library drb.}
10
+ spec.summary = %q{Ruby standard library drb.}
11
+ spec.homepage = "https://github.com/rubysl/rubysl-drb"
12
+ spec.license = "BSD"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
16
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
17
+ spec.require_paths = ["lib"]
18
+
19
+ spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_development_dependency "rake", "~> 10.0"
21
+ spec.add_development_dependency "mspec", "~> 1.5"
22
+ spec.add_development_dependency "rubysl-prettyprint", "~> 1.0"
23
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb.config" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb.current_server" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbArray#_dump" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbArray._load" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbConn#alive?" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbConn#close" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbConn.open" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbConn#send_message" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbConn#uri" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbIdConv#to_id" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbIdConv#to_obj" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbMessage#dump" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbMessage#load" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbMessage#recv_reply" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbMessage#recv_request" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbMessage#send_reply" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,6 @@
1
+
2
+ require 'drb'
3
+
4
+ describe "DRb::DRbMessage#send_request" do
5
+ it "needs to be reviewed for spec completeness"
6
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject#__drbref" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject#__drburi" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject#_dump" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject._load" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject#eql?" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject#==" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject#hash" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject#method_missing" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
File without changes
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject.new_with" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject.new_with_uri" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end
@@ -0,0 +1,4 @@
1
+
2
+ describe "DRb::DRbObject.prepare_backtrace" do
3
+ it "needs to be reviewed for spec completeness"
4
+ end