stn-dcell 0.16.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.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +7 -0
- data/.rspec +4 -0
- data/.travis.yml +30 -0
- data/CHANGES.md +53 -0
- data/Gemfile +18 -0
- data/LICENSE.txt +20 -0
- data/README.md +168 -0
- data/Rakefile +4 -0
- data/benchmarks/messaging.rb +73 -0
- data/benchmarks/receiver.rb +37 -0
- data/dcell.gemspec +29 -0
- data/examples/itchy.rb +26 -0
- data/examples/scratchy.rb +12 -0
- data/explorer/css/bootstrap-responsive.css +686 -0
- data/explorer/css/bootstrap-responsive.min.css +12 -0
- data/explorer/css/bootstrap.css +3990 -0
- data/explorer/css/bootstrap.min.css +689 -0
- data/explorer/css/explorer.css +28 -0
- data/explorer/ico/favicon.ico +0 -0
- data/explorer/img/glyphicons-halflings-white.png +0 -0
- data/explorer/img/glyphicons-halflings.png +0 -0
- data/explorer/img/logo.png +0 -0
- data/explorer/index.html.erb +94 -0
- data/explorer/js/bootstrap.js +1726 -0
- data/explorer/js/bootstrap.min.js +6 -0
- data/lib/dcell.rb +127 -0
- data/lib/dcell/actor_proxy.rb +30 -0
- data/lib/dcell/celluloid_ext.rb +120 -0
- data/lib/dcell/directory.rb +31 -0
- data/lib/dcell/explorer.rb +74 -0
- data/lib/dcell/future_proxy.rb +32 -0
- data/lib/dcell/global.rb +23 -0
- data/lib/dcell/info_service.rb +122 -0
- data/lib/dcell/mailbox_proxy.rb +53 -0
- data/lib/dcell/messages.rb +65 -0
- data/lib/dcell/node.rb +138 -0
- data/lib/dcell/node_manager.rb +79 -0
- data/lib/dcell/registries/cassandra_adapter.rb +126 -0
- data/lib/dcell/registries/mongodb_adapter.rb +85 -0
- data/lib/dcell/registries/redis_adapter.rb +95 -0
- data/lib/dcell/registries/zk_adapter.rb +123 -0
- data/lib/dcell/responses.rb +16 -0
- data/lib/dcell/router.rb +46 -0
- data/lib/dcell/rpc.rb +95 -0
- data/lib/dcell/rspec.rb +1 -0
- data/lib/dcell/server.rb +73 -0
- data/lib/dcell/version.rb +3 -0
- data/logo.png +0 -0
- data/spec/dcell/actor_proxy_spec.rb +72 -0
- data/spec/dcell/celluloid_ext_spec.rb +32 -0
- data/spec/dcell/directory_spec.rb +22 -0
- data/spec/dcell/explorer_spec.rb +17 -0
- data/spec/dcell/global_spec.rb +25 -0
- data/spec/dcell/node_spec.rb +23 -0
- data/spec/dcell/registries/mongodb_adapter_spec.rb +7 -0
- data/spec/dcell/registries/redis_adapter_spec.rb +6 -0
- data/spec/dcell/registries/zk_adapter_spec.rb +28 -0
- data/spec/options/01-options.rb +10 -0
- data/spec/options/02-registry.rb +13 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/support/helpers.rb +46 -0
- data/spec/support/registry_examples.rb +35 -0
- data/spec/test_node.rb +38 -0
- data/tasks/cassandra.task +84 -0
- data/tasks/rspec.task +7 -0
- data/tasks/zookeeper.task +58 -0
- metadata +239 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'dcell/registries/zk_adapter'
|
3
|
+
|
4
|
+
describe DCell::Registry::ZkAdapter, :pending => TEST_ADEPTER != 'zk' && "no zookeeper" do
|
5
|
+
subject { DCell::Registry::ZkAdapter.new TEST_DB[:zk] }
|
6
|
+
it_behaves_like "a DCell registry" do
|
7
|
+
context "when one znode changes" do
|
8
|
+
it "updates a node" do
|
9
|
+
expect(DCell::Node).to receive(:update).with("foo")
|
10
|
+
subject.set_node("foo", "tcp://fooaddress")
|
11
|
+
# WARNING: only by calling get_node we renew the watcher
|
12
|
+
subject.get_node("foo").should eq("tcp://fooaddress")
|
13
|
+
subject.set_node("foo", "tcp://newaddress")
|
14
|
+
sleep 0.8 # takes some time to zookeeper watchers to take full effect
|
15
|
+
end
|
16
|
+
end
|
17
|
+
context "when one znode is deleted" do
|
18
|
+
it "deletes a node" do
|
19
|
+
expect(DCell::Node).to receive(:remove).with("foo")
|
20
|
+
subject.set_node("foo", "tcp://fooaddress")
|
21
|
+
# WARNING: only by calling get_node we renew the watcher
|
22
|
+
subject.get_node("foo").should eq("tcp://fooaddress")
|
23
|
+
subject.remove_node "foo"
|
24
|
+
sleep 0.8 # takes some time to zookeeper watchers to take full effect
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
TEST_ADEPTER = ENV['DCELL_TEST_ADAPTER'] || 'redis'
|
2
|
+
|
3
|
+
require "dcell/registries/#{TEST_ADEPTER}_adapter"
|
4
|
+
|
5
|
+
def test_db_options
|
6
|
+
options = {}
|
7
|
+
adapter = TEST_ADEPTER
|
8
|
+
if adapter
|
9
|
+
options[:registry] = {:adapter => adapter}
|
10
|
+
options[:registry].merge! TEST_DB[adapter.to_sym]
|
11
|
+
end
|
12
|
+
options
|
13
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'coveralls'
|
4
|
+
Coveralls.wear!
|
5
|
+
|
6
|
+
require 'dcell'
|
7
|
+
Dir['./spec/options/*.rb'].map { |f| require f }
|
8
|
+
Dir['./spec/support/*.rb'].map { |f| require f }
|
9
|
+
|
10
|
+
RSpec.configure do |config|
|
11
|
+
config.before(:suite) do
|
12
|
+
options = {}
|
13
|
+
options.merge! test_db_options
|
14
|
+
begin
|
15
|
+
DCell.start options
|
16
|
+
rescue => e
|
17
|
+
puts e
|
18
|
+
raise
|
19
|
+
end
|
20
|
+
|
21
|
+
TestNode.start
|
22
|
+
TestNode.wait_until_ready
|
23
|
+
end
|
24
|
+
|
25
|
+
config.after(:suite) do
|
26
|
+
TestNode.stop
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# For Gem.ruby, and almost certainly already loaded
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
module TestNode
|
5
|
+
def self.start
|
6
|
+
@pid = Process.spawn Gem.ruby, File.expand_path("../../test_node.rb", __FILE__)
|
7
|
+
unless @pid
|
8
|
+
STDERR.print "ERROR: Couldn't start test node. Do you have Redis installed?"
|
9
|
+
exit 1
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.wait_until_ready
|
14
|
+
STDERR.print "Waiting for test node to start up..."
|
15
|
+
|
16
|
+
socket = nil
|
17
|
+
30.times do
|
18
|
+
begin
|
19
|
+
socket = TCPSocket.open(TEST_NODE[:addr], TEST_NODE[:port])
|
20
|
+
break if socket
|
21
|
+
rescue Errno::ECONNREFUSED
|
22
|
+
STDERR.print "."
|
23
|
+
sleep 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
if socket
|
28
|
+
STDERR.puts " done!"
|
29
|
+
socket.close
|
30
|
+
else
|
31
|
+
STDERR.puts " FAILED!"
|
32
|
+
raise "couldn't connect to test node!"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.stop
|
37
|
+
unless @pid
|
38
|
+
STDERR.print "ERROR: Test node was never started!"
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
Process.kill 9, @pid
|
42
|
+
rescue Errno::ESRCH
|
43
|
+
ensure
|
44
|
+
Process.wait @pid rescue nil
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
shared_context "a DCell registry" do
|
2
|
+
context "node registry" do
|
3
|
+
before :each do
|
4
|
+
subject.clear_all_nodes
|
5
|
+
end
|
6
|
+
|
7
|
+
it "stores node addresses" do
|
8
|
+
address = "tcp://localhost:7777"
|
9
|
+
|
10
|
+
subject.set_node("foobar", address)
|
11
|
+
subject.get_node("foobar").should == address
|
12
|
+
end
|
13
|
+
|
14
|
+
it "stores the IDs of all nodes" do
|
15
|
+
subject.set_node("foobar", "tcp://localhost:7777")
|
16
|
+
subject.nodes.should include "foobar"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "global registry" do
|
21
|
+
before :each do
|
22
|
+
subject.clear_globals
|
23
|
+
end
|
24
|
+
|
25
|
+
it "stores values" do
|
26
|
+
subject.set_global("foobar", [1,2,3])
|
27
|
+
subject.get_global("foobar").should == [1,2,3]
|
28
|
+
end
|
29
|
+
|
30
|
+
it "stores the keys of all globals" do
|
31
|
+
subject.set_global("foobar", true)
|
32
|
+
subject.global_keys.should include "foobar"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/spec/test_node.rb
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# The DCell specs start a completely separate Ruby VM running this code
|
2
|
+
# for complete integration testing using 0MQ over TCP
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'bundler'
|
6
|
+
Bundler.setup
|
7
|
+
|
8
|
+
require 'dcell'
|
9
|
+
Dir['./spec/options/*.rb'].map { |f| require f }
|
10
|
+
|
11
|
+
options = {:id => TEST_NODE[:id], :addr => "tcp://#{TEST_NODE[:addr]}:#{TEST_NODE[:port]}"}
|
12
|
+
options.merge! test_db_options
|
13
|
+
DCell.start options
|
14
|
+
|
15
|
+
class TestActor
|
16
|
+
include Celluloid
|
17
|
+
attr_reader :value
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@value = 42
|
21
|
+
end
|
22
|
+
|
23
|
+
def the_answer
|
24
|
+
DCell::Global[:the_answer]
|
25
|
+
end
|
26
|
+
|
27
|
+
def win(&block)
|
28
|
+
yield 10000
|
29
|
+
20000
|
30
|
+
end
|
31
|
+
|
32
|
+
def crash
|
33
|
+
raise "the spec purposely crashed me :("
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
TestActor.supervise_as :test_actor
|
38
|
+
sleep
|
@@ -0,0 +1,84 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
|
3
|
+
namespace :cassandra do
|
4
|
+
CASS_VERSION = "1.0.8"
|
5
|
+
CASS_TARBALL = "apache-cassandra-#{CASS_VERSION}-bin.tar.gz"
|
6
|
+
CASS_MD5 = "676887f6d185689c3383908f3ad8e015"
|
7
|
+
|
8
|
+
task :download => "tmp/#{CASS_TARBALL}"
|
9
|
+
directory 'tmp'
|
10
|
+
|
11
|
+
file "tmp/#{CASS_TARBALL}" => "tmp" do
|
12
|
+
require 'digest/md5'
|
13
|
+
tarball = "tmp/#{CASS_TARBALL}"
|
14
|
+
|
15
|
+
puts "*** Downloading Cassandra"
|
16
|
+
sh "curl http://archive.apache.org/dist/cassandra/#{CASS_VERSION}/#{CASS_TARBALL} -o #{tarball}"
|
17
|
+
digest = Digest::MD5.hexdigest(File.read(tarball))
|
18
|
+
unless digest == CASS_MD5
|
19
|
+
rm tarball
|
20
|
+
raise "Expected MD5 #{CASS_MD5} but got #{digest}."
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
task :install => :download do
|
25
|
+
require 'yaml'
|
26
|
+
puts "*** Unpacking Cassandra"
|
27
|
+
|
28
|
+
rm_rf "cassandra" if File.exists? "cassandra"
|
29
|
+
sh "tar -zxvf tmp/#{CASS_TARBALL}"
|
30
|
+
mv "apache-cassandra-#{CASS_VERSION}", "cassandra"
|
31
|
+
home = File.expand_path("../../cassandra", __FILE__)
|
32
|
+
|
33
|
+
# Create base configuration
|
34
|
+
data = File.join(home, "data").encode("us-ascii")
|
35
|
+
mkdir_p data
|
36
|
+
commit = File.join(home, "commit").encode("us-ascii")
|
37
|
+
mkdir_p commit
|
38
|
+
caches = File.join(home, "caches").encode("us-ascii")
|
39
|
+
mkdir_p caches
|
40
|
+
config_file = File.join(home, "conf", "cassandra.yaml")
|
41
|
+
env_file = File.join(home, "conf", "cassandra-env.sh")
|
42
|
+
|
43
|
+
conf = YAML::load_file(config_file)
|
44
|
+
conf.merge!({
|
45
|
+
"initial_token" => 0,
|
46
|
+
"partitioner" => "org.apache.cassandra.dht.RandomPartitioner",
|
47
|
+
"data_file_directories" => [data],
|
48
|
+
"commitlog_directory" => commit,
|
49
|
+
"saved_caches_directory" => caches,
|
50
|
+
"storage_port" => 27000,
|
51
|
+
"ssl_storage_port" => 27001,
|
52
|
+
"listen_address" => "127.0.0.1",
|
53
|
+
"rpc_address" => "127.0.0.1",
|
54
|
+
"rpc_port" => 29160,
|
55
|
+
# DSE doesn't work OOTB as a single node unless you switch to simplesnitch
|
56
|
+
"endpoint_snitch" => "org.apache.cassandra.locator.SimpleSnitch",
|
57
|
+
})
|
58
|
+
File.open(config_file, "w") { |file| file.puts YAML::dump(conf) }
|
59
|
+
|
60
|
+
env = File.read(env_file)
|
61
|
+
env.sub!(/JMX_PORT=['"]?\d+['"]?/, 'JMX_PORT="27199"')
|
62
|
+
File.open(env_file, "w") { |file| file.puts env }
|
63
|
+
end
|
64
|
+
|
65
|
+
task :start => :cassandra do
|
66
|
+
puts "*** Starting Cassandra"
|
67
|
+
|
68
|
+
# adding the -Dcassandra.for=dcell makes it easier to kill the right
|
69
|
+
# cassandra if you're running more than one, e.g. pkill -f dcell
|
70
|
+
# or DTRT and kill $(< cassandra/cassandra.pid)
|
71
|
+
sh "cd cassandra && bin/cassandra -p cassandra.pid -Dcassandra.for=dcell"
|
72
|
+
puts "*** waiting for Cassandra to come up before creating schema ..."
|
73
|
+
sleep 2
|
74
|
+
puts "*** creating schema ..."
|
75
|
+
sh "echo 'create keyspace dcell;' | cassandra/bin/cassandra-cli -h 127.0.0.1 -p 29160"
|
76
|
+
sh "echo 'create column family dcell;' | cassandra/bin/cassandra-cli -h 127.0.0.1 -p 29160 -k dcell"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
file 'cassandra' do
|
81
|
+
Rake::Task['cassandra:install'].invoke
|
82
|
+
end
|
83
|
+
|
84
|
+
CLEAN.include "tmp", "cassandra"
|
data/tasks/rspec.task
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
require 'rake/clean'
|
2
|
+
|
3
|
+
namespace :zookeeper do
|
4
|
+
ZK_VERSION = "3.3.3"
|
5
|
+
ZK_TARBALL = "zookeeper-#{ZK_VERSION}.tar.gz"
|
6
|
+
|
7
|
+
task :download => "tmp/#{ZK_TARBALL}"
|
8
|
+
directory 'tmp'
|
9
|
+
|
10
|
+
file "tmp/#{ZK_TARBALL}" => "tmp" do
|
11
|
+
puts "*** Downloading Zookeeper"
|
12
|
+
sh "curl http://archive.apache.org/dist/zookeeper/zookeeper-#{ZK_VERSION}/#{ZK_TARBALL} -o tmp/#{ZK_TARBALL}"
|
13
|
+
end
|
14
|
+
|
15
|
+
task :install => :download do
|
16
|
+
puts "*** Unpacking Zookeeper"
|
17
|
+
|
18
|
+
rm_rf "zookeeper" if File.exists? "zookeeper"
|
19
|
+
sh "tar -zxvf tmp/#{ZK_TARBALL}"
|
20
|
+
mv "zookeeper-#{ZK_VERSION}", "zookeeper"
|
21
|
+
home = File.expand_path("../../zookeeper", __FILE__)
|
22
|
+
|
23
|
+
# Create base configuration
|
24
|
+
data = File.join(home, "data")
|
25
|
+
mkdir_p data
|
26
|
+
config = File.join(home, "conf", "zoo.cfg")
|
27
|
+
rm_r File.join(home, "conf", "zoo_sample.cfg")
|
28
|
+
|
29
|
+
File.open(config, "w") do |file|
|
30
|
+
# Maybe some kind soul will move this ugly heredoc into a template
|
31
|
+
file << <<-ZK_CONFIG
|
32
|
+
# The number of milliseconds of each tick
|
33
|
+
tickTime=2000
|
34
|
+
# The number of ticks that the initial
|
35
|
+
# synchronization phase can take
|
36
|
+
initLimit=10
|
37
|
+
# The number of ticks that can pass between
|
38
|
+
# sending a request and getting an acknowledgement
|
39
|
+
syncLimit=5
|
40
|
+
# the directory where the snapshot is stored.
|
41
|
+
dataDir=#{data}
|
42
|
+
# the port at which the clients will connect
|
43
|
+
clientPort=2181
|
44
|
+
ZK_CONFIG
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
task :start => :zookeeper do
|
49
|
+
puts "*** Starting Zookeeper"
|
50
|
+
sh "cd zookeeper && bin/zkServer.sh start"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
file 'zookeeper' do
|
55
|
+
Rake::Task['zookeeper:install'].invoke
|
56
|
+
end
|
57
|
+
|
58
|
+
CLEAN.include "tmp", "zookeeper"
|
metadata
ADDED
@@ -0,0 +1,239 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: stn-dcell
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.16.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tony Arcieri
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-02 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: celluloid
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.16.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.16.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: celluloid-zmq
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.16.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.16.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: reel
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.4.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.4.0
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: http
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.5.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.5.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: celluloid-redis
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: redis-namespace
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.14.0
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.14.0
|
125
|
+
description: DCell is an distributed object framework based on Celluloid built on
|
126
|
+
0MQ and Zookeeper
|
127
|
+
email:
|
128
|
+
- tony.arcieri@gmail.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".coveralls.yml"
|
134
|
+
- ".gitignore"
|
135
|
+
- ".rspec"
|
136
|
+
- ".travis.yml"
|
137
|
+
- CHANGES.md
|
138
|
+
- Gemfile
|
139
|
+
- LICENSE.txt
|
140
|
+
- README.md
|
141
|
+
- Rakefile
|
142
|
+
- benchmarks/messaging.rb
|
143
|
+
- benchmarks/receiver.rb
|
144
|
+
- dcell.gemspec
|
145
|
+
- examples/itchy.rb
|
146
|
+
- examples/scratchy.rb
|
147
|
+
- explorer/css/bootstrap-responsive.css
|
148
|
+
- explorer/css/bootstrap-responsive.min.css
|
149
|
+
- explorer/css/bootstrap.css
|
150
|
+
- explorer/css/bootstrap.min.css
|
151
|
+
- explorer/css/explorer.css
|
152
|
+
- explorer/ico/favicon.ico
|
153
|
+
- explorer/img/glyphicons-halflings-white.png
|
154
|
+
- explorer/img/glyphicons-halflings.png
|
155
|
+
- explorer/img/logo.png
|
156
|
+
- explorer/index.html.erb
|
157
|
+
- explorer/js/bootstrap.js
|
158
|
+
- explorer/js/bootstrap.min.js
|
159
|
+
- lib/dcell.rb
|
160
|
+
- lib/dcell/actor_proxy.rb
|
161
|
+
- lib/dcell/celluloid_ext.rb
|
162
|
+
- lib/dcell/directory.rb
|
163
|
+
- lib/dcell/explorer.rb
|
164
|
+
- lib/dcell/future_proxy.rb
|
165
|
+
- lib/dcell/global.rb
|
166
|
+
- lib/dcell/info_service.rb
|
167
|
+
- lib/dcell/mailbox_proxy.rb
|
168
|
+
- lib/dcell/messages.rb
|
169
|
+
- lib/dcell/node.rb
|
170
|
+
- lib/dcell/node_manager.rb
|
171
|
+
- lib/dcell/registries/cassandra_adapter.rb
|
172
|
+
- lib/dcell/registries/mongodb_adapter.rb
|
173
|
+
- lib/dcell/registries/redis_adapter.rb
|
174
|
+
- lib/dcell/registries/zk_adapter.rb
|
175
|
+
- lib/dcell/responses.rb
|
176
|
+
- lib/dcell/router.rb
|
177
|
+
- lib/dcell/rpc.rb
|
178
|
+
- lib/dcell/rspec.rb
|
179
|
+
- lib/dcell/server.rb
|
180
|
+
- lib/dcell/version.rb
|
181
|
+
- logo.png
|
182
|
+
- spec/dcell/actor_proxy_spec.rb
|
183
|
+
- spec/dcell/celluloid_ext_spec.rb
|
184
|
+
- spec/dcell/directory_spec.rb
|
185
|
+
- spec/dcell/explorer_spec.rb
|
186
|
+
- spec/dcell/global_spec.rb
|
187
|
+
- spec/dcell/node_spec.rb
|
188
|
+
- spec/dcell/registries/mongodb_adapter_spec.rb
|
189
|
+
- spec/dcell/registries/redis_adapter_spec.rb
|
190
|
+
- spec/dcell/registries/zk_adapter_spec.rb
|
191
|
+
- spec/options/01-options.rb
|
192
|
+
- spec/options/02-registry.rb
|
193
|
+
- spec/spec_helper.rb
|
194
|
+
- spec/support/helpers.rb
|
195
|
+
- spec/support/registry_examples.rb
|
196
|
+
- spec/test_node.rb
|
197
|
+
- tasks/cassandra.task
|
198
|
+
- tasks/rspec.task
|
199
|
+
- tasks/zookeeper.task
|
200
|
+
homepage: http://github.com/celluloid/dcell
|
201
|
+
licenses:
|
202
|
+
- MIT
|
203
|
+
metadata: {}
|
204
|
+
post_install_message:
|
205
|
+
rdoc_options: []
|
206
|
+
require_paths:
|
207
|
+
- lib
|
208
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
209
|
+
requirements:
|
210
|
+
- - ">="
|
211
|
+
- !ruby/object:Gem::Version
|
212
|
+
version: '0'
|
213
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
214
|
+
requirements:
|
215
|
+
- - ">="
|
216
|
+
- !ruby/object:Gem::Version
|
217
|
+
version: '0'
|
218
|
+
requirements: []
|
219
|
+
rubyforge_project:
|
220
|
+
rubygems_version: 2.2.2
|
221
|
+
signing_key:
|
222
|
+
specification_version: 4
|
223
|
+
summary: An asynchronous distributed object framework based on Celluloid
|
224
|
+
test_files:
|
225
|
+
- spec/dcell/actor_proxy_spec.rb
|
226
|
+
- spec/dcell/celluloid_ext_spec.rb
|
227
|
+
- spec/dcell/directory_spec.rb
|
228
|
+
- spec/dcell/explorer_spec.rb
|
229
|
+
- spec/dcell/global_spec.rb
|
230
|
+
- spec/dcell/node_spec.rb
|
231
|
+
- spec/dcell/registries/mongodb_adapter_spec.rb
|
232
|
+
- spec/dcell/registries/redis_adapter_spec.rb
|
233
|
+
- spec/dcell/registries/zk_adapter_spec.rb
|
234
|
+
- spec/options/01-options.rb
|
235
|
+
- spec/options/02-registry.rb
|
236
|
+
- spec/spec_helper.rb
|
237
|
+
- spec/support/helpers.rb
|
238
|
+
- spec/support/registry_examples.rb
|
239
|
+
- spec/test_node.rb
|