zk-server 0.9.1 → 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.
@@ -0,0 +1,128 @@
1
+ require 'java'
2
+
3
+ module ZK
4
+ module Server
5
+ # gah, this needs to be a singleton, but whaddyagonnado
6
+ class JavaEmbedded < Base
7
+ System = java.lang.System
8
+
9
+ JFile = java.io.File
10
+
11
+ attr_reader :zookeeper_thread
12
+
13
+ # yeah, holla atcha boy, JZ
14
+ module JZ
15
+ # ok, this is seriously seriously ugly, but we want to dynamically
16
+ # config log4j in this process which would require brain surgery if
17
+ # i didn't do it dynamically, therefore we need to have all of this stuff
18
+ # bind late, and we want some readable shortcuts to these fully-qualified
19
+ # path names *after* we've done our requires in 'require_dependencies'
20
+ #
21
+ # so, yeah, sorry about this
22
+
23
+ def self.dynamically_create_consts
24
+ hash = {
25
+ :Quorum => org.apache.zookeeper.server.quorum,
26
+ :Server => org.apache.zookeeper.server,
27
+ :FileTxnSnapLog => org.apache.zookeeper.server.persistence.FileTxnSnapLog
28
+ }
29
+
30
+ hash.each do |k,v|
31
+ const_set(k, v) unless const_defined?(k)
32
+ end
33
+ end
34
+ end
35
+
36
+ def shutdown
37
+ @mutex.synchronize do
38
+ return unless @run_called and @cnxn_factory and @zk_server and running?
39
+
40
+ @cnxn_factory.shutdown
41
+ @zk_server.shutdown
42
+ end
43
+
44
+ @zookeeper_thread and @zookeeper_thread.join(5)
45
+ end
46
+
47
+ def running?
48
+ @mutex.synchronize do
49
+ @zk_server && @zk_server.running?
50
+ end
51
+ end
52
+
53
+ def run
54
+ @mutex.synchronize do
55
+ return false if @run_called
56
+ @run_called = true
57
+
58
+ create_files!
59
+ require_dependencies
60
+ spawn_zookeeper_thread!
61
+ wait_until_ping
62
+ true
63
+ end
64
+ end
65
+
66
+ def spawned?
67
+ !!@zookeeper_thread
68
+ end
69
+
70
+ def pid
71
+ $$ # CHEEKY!!
72
+ end
73
+
74
+ def logging_related_system_properties
75
+ [ ['log4j.configuration', "file://#{ZK::Server.default_log4j_props_path}"],
76
+ ['zookeeper.log.dir', config.log_dir],
77
+ ['zookeeper.root.logger', 'INFO,CONSOLE'], ]
78
+ end
79
+
80
+ # XXX: this assumes that we're only going to ever run one of these per
81
+ # process (or at least have only one log)
82
+ def require_dependencies
83
+ logging_related_system_properties.each do |k,v|
84
+ System.set_property(k,v)
85
+ end
86
+
87
+ require 'log4j'
88
+ require 'zookeeper_jar'
89
+
90
+ JZ.dynamically_create_consts
91
+ end
92
+
93
+
94
+ def spawn_zookeeper_thread!
95
+ @zookeeper_thread ||= Thread.new do
96
+ Thread.abort_on_exception = true
97
+ cnxn_factory.startup(zk_server)
98
+ cnxn_factory.join
99
+ cnxn_factory.shutdown
100
+
101
+ @mutex.synchronize do
102
+ @exit_cond.broadcast
103
+ end
104
+ end
105
+ end
106
+
107
+ def cnxn_factory
108
+ @cnxn_factory ||= JZ::Server::NIOServerCnxn::Factory.new(zk_config.client_port_address, zk_config.max_client_cnxns)
109
+ end
110
+
111
+ def j_data_log_dir
112
+ @j_data_log_dir ||= JFile.new(zk_config.data_log_dir)
113
+ end
114
+
115
+ def j_data_dir
116
+ @j_data_dir ||= JFile.new(zk_config.data_dir)
117
+ end
118
+
119
+ def zk_server
120
+ @zk_server ||= JZ::Server::ZooKeeperServer.new(j_data_log_dir, j_data_dir, zk_config.tick_time)
121
+ end
122
+
123
+ def zk_config
124
+ @zk_config ||= JZ::Server::ServerConfig.new.tap { |c| c.parse(zoo_cfg_path) }
125
+ end
126
+ end
127
+ end
128
+ end
@@ -1,5 +1,5 @@
1
1
  module ZK
2
2
  module Server
3
- VERSION = "0.9.1" unless defined?(::ZK::Server::VERSION)
3
+ VERSION = "1.0.0" unless defined?(::ZK::Server::VERSION)
4
4
  end
5
5
  end
data/lib/zk-server.rb CHANGED
@@ -35,6 +35,10 @@ module ZK
35
35
  defined?(::JRUBY_VERSION)
36
36
  end
37
37
 
38
+ def self.jruby_18?
39
+ jruby? and ruby_187?
40
+ end
41
+
38
42
  def self.jruby_19?
39
43
  jruby? and ruby_19?
40
44
  end
@@ -48,7 +52,9 @@ module ZK
48
52
  #
49
53
  # @yield [Config] server config instance if block given
50
54
  def self.new(opts={})
51
- SubProcess.new(opts).tap do |server|
55
+ klass = jruby? ? JavaEmbedded : SubProcess
56
+
57
+ klass.new(opts).tap do |server|
52
58
  yield server.config if block_given?
53
59
  end
54
60
  end
@@ -125,7 +131,7 @@ require 'zk-server/config'
125
131
  require 'zk-server/base'
126
132
  require 'zk-server/sub_process'
127
133
 
128
- # if defined?(::JRUBY_VERSION)
129
- # require 'zk-server/java_embedded'
130
- # end
134
+ if defined?(::JRUBY_VERSION)
135
+ require 'zk-server/java_embedded'
136
+ end
131
137
 
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ if defined?(::JRUBY_VERSION)
4
+
5
+ describe ZK::Server::JavaEmbedded do
6
+ let(:tmpdir) { '/tmp/zookeeper' }
7
+
8
+ subject do
9
+ described_class.new(:client_port => 21812, :base_dir => tmpdir)
10
+ end
11
+
12
+ after do
13
+ subject.shutdown
14
+ subject.clobber!
15
+ FileUtils.rm_rf(tmpdir)
16
+ end
17
+
18
+
19
+ it %[should run the zk server, ping, and then shutdown properly] do
20
+ subject.run
21
+ subject.should be_pingable
22
+ subject.should be_running
23
+ subject.should be_spawned
24
+
25
+ subject.shutdown
26
+
27
+ subject.should_not be_pingable
28
+ subject.should_not be_running
29
+ end
30
+ end
31
+ end
32
+
@@ -14,7 +14,7 @@ describe ZK::Server::SubProcess do
14
14
  end
15
15
 
16
16
  it %[should spawn a ZK server, ping, and then shutdown properly] do
17
- # pending "cannot run this under JRuby" if defined?(::JRUBY_VERSION)
17
+ pending "cannot run this under JRuby" if defined?(::JRUBY_VERSION)
18
18
 
19
19
  subject.run
20
20
  subject.should be_pingable
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zk-server
3
3
  version: !ruby/object:Gem::Version
4
- hash: 57
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
- - 0
8
- - 9
9
7
  - 1
10
- version: 0.9.1
8
+ - 0
9
+ - 0
10
+ version: 1.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jonathan D. Simms
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-05-02 00:00:00 Z
18
+ date: 2012-05-04 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: bundler
@@ -86,11 +86,13 @@ files:
86
86
  - lib/zk-server.rb
87
87
  - lib/zk-server/base.rb
88
88
  - lib/zk-server/config.rb
89
+ - lib/zk-server/java_embedded.rb
89
90
  - lib/zk-server/log4j.properties
90
91
  - lib/zk-server/logging.rb
91
92
  - lib/zk-server/sub_process.rb
92
93
  - lib/zk-server/version.rb
93
94
  - spec/spec_helper.rb
95
+ - spec/zk-server/java_embedded_spec.rb
94
96
  - spec/zk-server/process_spec.rb
95
97
  - zk-server.gemspec
96
98
  homepage: http://github.com/slyphon/zk-server
@@ -128,4 +130,5 @@ specification_version: 3
128
130
  summary: runs a standalone zookeeper server
129
131
  test_files:
130
132
  - spec/spec_helper.rb
133
+ - spec/zk-server/java_embedded_spec.rb
131
134
  - spec/zk-server/process_spec.rb