slyphon-zookeeper 0.2.0-java → 0.2.1-java
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.
- data/ext/extconf.rb +1 -1
- data/ext/zookeeper_base.rb +22 -8
- data/ext/zookeeper_c.c +6 -2
- data/ext/zookeeper_lib.c +26 -2
- data/lib/zookeeper.rb +1 -0
- data/lib/zookeeper/exceptions.rb +1 -0
- data/slyphon-zookeeper.gemspec +1 -1
- metadata +4 -4
data/ext/extconf.rb
CHANGED
@@ -12,7 +12,7 @@ $CXXFLAGS = " -std=gnu++98 #{$CFLAGS}"
|
|
12
12
|
$CPPFLAGS = $ARCH_FLAG = $DLDFLAGS = ""
|
13
13
|
|
14
14
|
if ENV['DEBUG']
|
15
|
-
puts "Setting debug flags."
|
15
|
+
$stderr.puts "*** Setting debug flags. ***"
|
16
16
|
$CFLAGS << " -O0 -ggdb3 -DHAVE_DEBUG"
|
17
17
|
$EXTRA_CONF = " --enable-debug"
|
18
18
|
$CFLAGS.gsub!(/ -O[^0] /, ' ')
|
data/ext/zookeeper_base.rb
CHANGED
@@ -87,22 +87,24 @@ class ZookeeperBase < CZookeeper
|
|
87
87
|
end
|
88
88
|
|
89
89
|
if @dispatcher
|
90
|
-
|
90
|
+
unless @_closed
|
91
|
+
wake_event_loop!
|
92
|
+
end
|
91
93
|
@dispatcher.join
|
92
94
|
end
|
93
95
|
|
94
96
|
@start_stop_mutex.synchronize do
|
95
97
|
unless @_closed
|
96
98
|
close_handle
|
97
|
-
|
98
|
-
# this is set up in the C init method, but it's easier to
|
99
|
-
# do the teardown here
|
100
|
-
begin
|
101
|
-
@selectable_io.close if @selectable_io
|
102
|
-
rescue IOError
|
103
|
-
end
|
104
99
|
end
|
105
100
|
end
|
101
|
+
|
102
|
+
# this is set up in the C init method, but it's easier to
|
103
|
+
# do the teardown here
|
104
|
+
begin
|
105
|
+
@selectable_io.close if @selectable_io
|
106
|
+
rescue IOError
|
107
|
+
end
|
106
108
|
end
|
107
109
|
|
108
110
|
def set_debug_level(int)
|
@@ -126,7 +128,19 @@ class ZookeeperBase < CZookeeper
|
|
126
128
|
@start_stop_mutex.synchronize { false|@_running }
|
127
129
|
end
|
128
130
|
|
131
|
+
def state
|
132
|
+
return ZOO_CLOSED_STATE if closed?
|
133
|
+
super
|
134
|
+
end
|
135
|
+
|
129
136
|
protected
|
137
|
+
def barf_unless_running!
|
138
|
+
@start_stop_mutex.synchronize do
|
139
|
+
raise ShuttingDownException unless (@_running and not @_closed)
|
140
|
+
yield
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
130
144
|
def setup_dispatch_thread!
|
131
145
|
@dispatcher = Thread.new do
|
132
146
|
while running?
|
data/ext/zookeeper_c.c
CHANGED
@@ -472,6 +472,10 @@ static int is_running(VALUE self) {
|
|
472
472
|
return RTEST(rval);
|
473
473
|
}
|
474
474
|
|
475
|
+
static int is_closed(VALUE self) {
|
476
|
+
VALUE rval = rb_iv_get(self, "@_closed");
|
477
|
+
return RTEST(rval);
|
478
|
+
}
|
475
479
|
|
476
480
|
/* slyphon: NEED TO PROTECT THIS AGAINST SHUTDOWN */
|
477
481
|
|
@@ -484,7 +488,7 @@ static VALUE method_get_next_event(VALUE self, VALUE blocking) {
|
|
484
488
|
// we use the is_running(self) method here because it allows us to have a
|
485
489
|
// ruby-land semaphore that we can also use in the java extension
|
486
490
|
//
|
487
|
-
if (!is_running(self)) {
|
491
|
+
if (is_closed(self) || !is_running(self)) {
|
488
492
|
/* fprintf(stderr, "method_get_next_event: running is false, returning nil\n");*/
|
489
493
|
return Qnil; // this case for shutdown
|
490
494
|
}
|
@@ -517,7 +521,7 @@ static VALUE method_get_next_event(VALUE self, VALUE blocking) {
|
|
517
521
|
rb_raise(rb_eRuntimeError, "read failed: %d", errno);
|
518
522
|
}
|
519
523
|
else if (ZKRBDebugging) {
|
520
|
-
fprintf(stderr, "read %d bytes from the queue's pipe\n", bytes_read);
|
524
|
+
fprintf(stderr, "read %d bytes from the queue (%p)'s pipe\n", bytes_read, zk->queue);
|
521
525
|
}
|
522
526
|
|
523
527
|
continue;
|
data/ext/zookeeper_lib.c
CHANGED
@@ -23,6 +23,16 @@ int ZKRBDebugging;
|
|
23
23
|
|
24
24
|
pthread_mutex_t zkrb_q_mutex = PTHREAD_MUTEX_INITIALIZER;
|
25
25
|
|
26
|
+
|
27
|
+
/********************************************************************************
|
28
|
+
*
|
29
|
+
* NOTE: be *very careful* in these functions, calling *ANY* ruby interpreter
|
30
|
+
* function when you're not in an interpreter thread can hork ruby, trigger a
|
31
|
+
* [BUG], corrupt the stack, kill you dog, knock up your daughter, etc. etc.
|
32
|
+
*
|
33
|
+
*********************************************************************************
|
34
|
+
*/
|
35
|
+
|
26
36
|
/* push/pop is a misnomer, this is a queue */
|
27
37
|
void zkrb_enqueue(zkrb_queue_t *q, zkrb_event_t *elt) {
|
28
38
|
pthread_mutex_lock(&zkrb_q_mutex);
|
@@ -37,8 +47,19 @@ void zkrb_enqueue(zkrb_queue_t *q, zkrb_event_t *elt) {
|
|
37
47
|
q->tail->next = NULL;
|
38
48
|
ssize_t ret = write(q->pipe_write, "0", 1); /* Wake up Ruby listener */
|
39
49
|
pthread_mutex_unlock(&zkrb_q_mutex);
|
40
|
-
|
41
|
-
|
50
|
+
|
51
|
+
// XXX(slyphon): can't raise a ruby exception here as we may not be calling
|
52
|
+
// this from a ruby thread. Calling into the interpreter from a non-ruby
|
53
|
+
// thread is bad, mm'kay?
|
54
|
+
|
55
|
+
if (ZKRBDebugging) {
|
56
|
+
if ((ret == -1)) {
|
57
|
+
fprintf(stderr, "WARNING: write to queue (%p) pipe failed!\n", q);
|
58
|
+
}
|
59
|
+
/* else {*/
|
60
|
+
/* fprintf(stderr, "successfully enqueued event on queue (%p)\n", q);*/
|
61
|
+
/* }*/
|
62
|
+
}
|
42
63
|
}
|
43
64
|
|
44
65
|
zkrb_event_t * zkrb_peek(zkrb_queue_t *q) {
|
@@ -79,6 +100,9 @@ void zkrb_signal(zkrb_queue_t *q) {
|
|
79
100
|
|
80
101
|
zkrb_queue_t *zkrb_queue_alloc(void) {
|
81
102
|
int pfd[2];
|
103
|
+
|
104
|
+
// XXX(slyphon): close-on-exec settings?
|
105
|
+
|
82
106
|
if (pipe(pfd) == -1)
|
83
107
|
rb_raise(rb_eRuntimeError, "create of pipe failed: %d", errno);
|
84
108
|
|
data/lib/zookeeper.rb
CHANGED
data/lib/zookeeper/exceptions.rb
CHANGED
@@ -56,6 +56,7 @@ module ZookeeperExceptions
|
|
56
56
|
# these are Ruby client exceptions
|
57
57
|
class ConnectionClosed < ZookeeperException; end
|
58
58
|
class NotConnected < ZookeeperException; end
|
59
|
+
class ShuttingDownException < ZookeeperException; end
|
59
60
|
|
60
61
|
def self.by_code(code)
|
61
62
|
case code
|
data/slyphon-zookeeper.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "slyphon-zookeeper"
|
6
|
-
s.version = '0.2.
|
6
|
+
s.version = '0.2.1'
|
7
7
|
|
8
8
|
s.authors = ["Phillip Pearson", "Eric Maland", "Evan Weaver", "Brian Wickman", "Neil Conway", "Jonathan D. Simms"]
|
9
9
|
s.email = ["slyphon@gmail.com"]
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slyphon-zookeeper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: java
|
12
12
|
authors:
|
13
13
|
- Phillip Pearson
|
@@ -20,7 +20,7 @@ autorequire:
|
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
22
|
|
23
|
-
date: 2011-06-
|
23
|
+
date: 2011-06-27 00:00:00 +00:00
|
24
24
|
default_executable:
|
25
25
|
dependencies:
|
26
26
|
- !ruby/object:Gem::Dependency
|