bones-rpc 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.ruby-gemset +1 -1
- data/.ruby-version +1 -1
- data/bones-rpc.gemspec +1 -4
- data/lib/bones/rpc.rb +1 -1
- data/lib/bones/rpc/adapter.rb +44 -4
- data/lib/bones/rpc/adapter/json.rb +66 -0
- data/lib/bones/rpc/address.rb +6 -4
- data/lib/bones/rpc/backend.rb +31 -0
- data/lib/bones/rpc/backend/base.rb +30 -0
- data/lib/bones/rpc/backend/synchronous.rb +29 -0
- data/lib/bones/rpc/cluster.rb +18 -18
- data/lib/bones/rpc/connection.rb +19 -15
- data/lib/bones/rpc/connection/socket.rb +0 -2
- data/lib/bones/rpc/connection/socket/connectable.rb +15 -11
- data/lib/bones/rpc/context.rb +2 -2
- data/lib/bones/rpc/dns_resolver.rb +85 -0
- data/lib/bones/rpc/errors.rb +3 -0
- data/lib/bones/rpc/failover.rb +3 -3
- data/lib/bones/rpc/failover/disconnect.rb +2 -2
- data/lib/bones/rpc/failover/ignore.rb +2 -2
- data/lib/bones/rpc/failover/retry.rb +2 -2
- data/lib/bones/rpc/instrumentable.rb +3 -3
- data/lib/bones/rpc/instrumentable/log.rb +2 -2
- data/lib/bones/rpc/instrumentable/noop.rb +2 -2
- data/lib/bones/rpc/loggable.rb +8 -8
- data/lib/bones/rpc/node.rb +47 -37
- data/lib/bones/rpc/node/registry.rb +4 -0
- data/lib/bones/rpc/parser.rb +16 -5
- data/lib/bones/rpc/parser/buffer.rb +6 -2
- data/lib/bones/rpc/protocol/adapter_helper.rb +2 -2
- data/lib/bones/rpc/protocol/binary_helper.rb +2 -2
- data/lib/bones/rpc/read_preference.rb +3 -3
- data/lib/bones/rpc/read_preference/nearest.rb +3 -3
- data/lib/bones/rpc/read_preference/selectable.rb +4 -4
- data/lib/bones/rpc/readable.rb +4 -4
- data/lib/bones/rpc/session.rb +25 -16
- data/lib/bones/rpc/synchronous.rb +2 -0
- data/lib/bones/rpc/synchronous/connection.rb +36 -0
- data/lib/bones/rpc/synchronous/connection/reader.rb +59 -0
- data/lib/bones/rpc/synchronous/connection/socket.rb +4 -0
- data/lib/bones/rpc/synchronous/connection/socket/ssl.rb +57 -0
- data/lib/bones/rpc/synchronous/connection/socket/tcp.rb +30 -0
- data/lib/bones/rpc/synchronous/connection/writer.rb +86 -0
- data/lib/bones/rpc/synchronous/future.rb +91 -0
- data/lib/bones/rpc/synchronous/node.rb +45 -0
- data/lib/bones/rpc/uri.rb +20 -20
- data/lib/bones/rpc/version.rb +1 -1
- metadata +16 -52
- data/lib/bones/rpc/adapter/erlang.rb +0 -28
- data/lib/bones/rpc/adapter/msgpack.rb +0 -52
- data/lib/bones/rpc/connection/reader.rb +0 -49
- data/lib/bones/rpc/connection/socket/ssl.rb +0 -35
- data/lib/bones/rpc/connection/socket/tcp.rb +0 -28
- data/lib/bones/rpc/connection/writer.rb +0 -51
- data/lib/bones/rpc/future.rb +0 -26
@@ -1,49 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Bones
|
3
|
-
module RPC
|
4
|
-
class Connection
|
5
|
-
class Reader
|
6
|
-
include Celluloid::IO
|
7
|
-
|
8
|
-
execute_block_on_receiver :initialize
|
9
|
-
|
10
|
-
def initialize(connection, socket, adapter)
|
11
|
-
@connection = connection
|
12
|
-
@socket = socket
|
13
|
-
@adapter = adapter
|
14
|
-
@buffer = ""
|
15
|
-
async.read
|
16
|
-
end
|
17
|
-
|
18
|
-
def parse(data)
|
19
|
-
@buffer << data
|
20
|
-
if @buffer.empty?
|
21
|
-
async.read
|
22
|
-
else
|
23
|
-
parser = Bones::RPC::Parser.new(@buffer, @adapter)
|
24
|
-
begin
|
25
|
-
loop { async.send parser.read }
|
26
|
-
rescue EOFError
|
27
|
-
@buffer.replace(parser.buffer.to_str)
|
28
|
-
end
|
29
|
-
async.read
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def read
|
34
|
-
loop do
|
35
|
-
async.parse @socket.readpartial(4096)
|
36
|
-
end
|
37
|
-
rescue EOFError, Errors::ConnectionFailure => e
|
38
|
-
Loggable.warn(" BONES-RPC:", "#{@connection.node.address.resolved} Reader terminating: #{e.message}", "n/a")
|
39
|
-
terminate
|
40
|
-
end
|
41
|
-
|
42
|
-
def send(message)
|
43
|
-
@connection.node.handle_message(message)
|
44
|
-
end
|
45
|
-
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
@@ -1,35 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'openssl'
|
3
|
-
|
4
|
-
module Bones
|
5
|
-
module RPC
|
6
|
-
class Connection
|
7
|
-
module Socket
|
8
|
-
|
9
|
-
# This is a wrapper around a tcp socket.
|
10
|
-
class SSL < ::Celluloid::IO::SSLSocket
|
11
|
-
include Connectable
|
12
|
-
|
13
|
-
# Initialize the new TCPSocket with SSL.
|
14
|
-
#
|
15
|
-
# @example Initialize the socket.
|
16
|
-
# SSL.new("127.0.0.1", 27017)
|
17
|
-
#
|
18
|
-
# @param [ String ] host The host.
|
19
|
-
# @param [ Integer ] port The port.
|
20
|
-
#
|
21
|
-
# @since 1.2.0
|
22
|
-
def initialize(remote_host, remote_port, local_host = nil, local_port = nil)
|
23
|
-
@host, @port = remote_host, remote_port
|
24
|
-
handle_socket_errors do
|
25
|
-
socket = TCPSocket.new(remote_host, remote_port, local_host, local_port)
|
26
|
-
super(socket)
|
27
|
-
to_io.sync_close = true
|
28
|
-
connect
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Bones
|
3
|
-
module RPC
|
4
|
-
class Connection
|
5
|
-
module Socket
|
6
|
-
|
7
|
-
# This is a wrapper around a ssl socket.
|
8
|
-
class TCP < ::Celluloid::IO::TCPSocket
|
9
|
-
include Connectable
|
10
|
-
|
11
|
-
# Initialize the new TCPSocket.
|
12
|
-
#
|
13
|
-
# @example Initialize the socket.
|
14
|
-
# TCP.new("127.0.0.1", 27017)
|
15
|
-
#
|
16
|
-
# @param [ String ] remote_host The host.
|
17
|
-
# @param [ Integer ] remote_port The port.
|
18
|
-
#
|
19
|
-
# @since 1.2.0
|
20
|
-
def initialize(remote_host, remote_port, local_host = nil, local_port = nil)
|
21
|
-
@host, @port = remote_host, remote_port
|
22
|
-
handle_socket_errors { super }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Bones
|
3
|
-
module RPC
|
4
|
-
class Connection
|
5
|
-
class Writer
|
6
|
-
include Celluloid::IO
|
7
|
-
|
8
|
-
execute_block_on_receiver :initialize
|
9
|
-
finalizer :shutdown
|
10
|
-
trap_exit :reader_died
|
11
|
-
|
12
|
-
def initialize(connection, socket, adapter)
|
13
|
-
@connection = connection
|
14
|
-
@socket = socket
|
15
|
-
@adapter = adapter
|
16
|
-
@resolved = @connection.node.address.resolved
|
17
|
-
@buffer = ""
|
18
|
-
@reader = Reader.new_link(@connection, @socket, @adapter)
|
19
|
-
end
|
20
|
-
|
21
|
-
def write(operations)
|
22
|
-
operations.each do |message, future|
|
23
|
-
message.serialize(@buffer, @adapter)
|
24
|
-
message.attach(@connection.node, future) if future
|
25
|
-
end
|
26
|
-
@socket.write(@buffer)
|
27
|
-
@buffer = ""
|
28
|
-
return true
|
29
|
-
rescue EOFError, Errors::ConnectionFailure => e
|
30
|
-
Loggable.warn(" BONES-RPC:", "#{@resolved} Writer terminating: #{e.message}", "n/a")
|
31
|
-
terminate
|
32
|
-
end
|
33
|
-
|
34
|
-
def shutdown
|
35
|
-
if @reader && @reader.alive?
|
36
|
-
@reader.unlink
|
37
|
-
@reader.async.terminate
|
38
|
-
end
|
39
|
-
@connection.cleanup_socket(@socket)
|
40
|
-
end
|
41
|
-
|
42
|
-
def reader_died(actor, reason)
|
43
|
-
Loggable.warn(" BONES-RPC:", "#{@resolved} Writer terminating: #{reason}", "n/a")
|
44
|
-
@reader = nil
|
45
|
-
terminate
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/lib/bones/rpc/future.rb
DELETED
@@ -1,26 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Bones
|
3
|
-
module RPC
|
4
|
-
class Future < ::Celluloid::Future
|
5
|
-
|
6
|
-
def initialize(*args, &block)
|
7
|
-
@start = Time.now
|
8
|
-
super
|
9
|
-
end
|
10
|
-
|
11
|
-
def signal(*args, &block)
|
12
|
-
@stop = Time.now
|
13
|
-
super
|
14
|
-
end
|
15
|
-
|
16
|
-
def runtime
|
17
|
-
if @stop
|
18
|
-
@stop - @start
|
19
|
-
else
|
20
|
-
Time.now - @start
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|