slyphon-zookeeper 0.9.1-java → 0.9.2-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/.gitignore CHANGED
@@ -6,4 +6,5 @@
6
6
  Makefile
7
7
  pkg
8
8
  zookeeper.gemspec
9
- Gemfile.lock
9
+ Gemfile.*
10
+ tmp/
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ v0.9.2 More efficient and simpler wrappers for GIL release
2
+
3
+ * After a code review by Andrew Wason (rectalogic), use a much simpler
4
+ technique for creating the arg structs and passing them to the
5
+ zkrb_gvl_* functions. No malloc(), no free(), no problem.
6
+
1
7
  v0.9.1 see v0.8.4 notes, same patch
2
8
 
3
9
  v0.9.0 RELEASE THE KRAK..er, GIL!!
data/README.markdown CHANGED
@@ -7,6 +7,9 @@ such as locks, have a look at [ZK](https://github.com/slyphon/zk) (also
7
7
  available is [ZK-EventMachine](https://github.com/slyphon/zk-eventmachine) for
8
8
  those who prefer async).
9
9
 
10
+ Unfortunately, since this is a fork of twitter/zookeeper, we don't have our own
11
+ Issues tracker. Issues should be filed under [ZK](https://github.com/slyphon/zk/issues).
12
+
10
13
  ## License
11
14
 
12
15
  Copyright 2008 Phillip Pearson, and 2010 Twitter, Inc. Licensed under the
data/Rakefile CHANGED
@@ -1,29 +1,62 @@
1
1
  # def gemset_name
2
2
  # ENV.fetch('GEM_HOME').split('@').last
3
3
  # end
4
- #
4
+
5
+ GEM_FILES = FileList['slyphon-zookeeper-*.gem']
6
+
5
7
  namespace :mb do
6
- task :build_gems do
7
- sh "rvm 1.8.7 do gem build slyphon-zookeeper.gemspec"
8
- ENV['JAVA_GEM'] = '1'
9
- sh "rvm 1.8.7 do gem build slyphon-zookeeper.gemspec"
8
+ namespace :gems do
9
+ task :build do
10
+ sh "rvm 1.8.7 do gem build slyphon-zookeeper.gemspec"
11
+ ENV['JAVA_GEM'] = '1'
12
+ sh "rvm 1.8.7 do gem build slyphon-zookeeper.gemspec"
13
+ end
14
+
15
+ task :push do
16
+ GEM_FILES.each do |gem|
17
+ sh "gem push #{gem}"
18
+ end
19
+ end
20
+
21
+ task :clean do
22
+ rm_rf GEM_FILES
23
+ end
24
+
25
+ task :all => [:build, :push, :clean]
10
26
  end
11
27
  end
12
28
 
13
29
  gemset_name = 'zookeeper'
14
30
 
31
+ directory 'tmp'
32
+
33
+ # this nonsense w/ tmp and the Gemfile is a bundler optimization
34
+
35
+ GEMSPEC_LINK = 'tmp/slyphon-zookeeper.gemspec'
36
+
37
+ file GEMSPEC_LINK => 'tmp' do
38
+ ln_s '../slyphon-zookeeper.gemspec', GEMSPEC_LINK
39
+ end
15
40
 
16
- %w[1.8.7 1.9.2 1.9.3 jruby rbx].each do |ns_name|
41
+ %w[1.8.7 1.9.2 jruby rbx 1.9.3].each do |ns_name|
17
42
  rvm_ruby = (ns_name == 'rbx') ? "rbx-2.0.testing" : ns_name
18
43
 
19
44
  ruby_with_gemset = "#{rvm_ruby}@#{gemset_name}"
20
45
 
21
46
  create_gemset_name = "mb:#{ns_name}:create_gemset"
22
47
  clobber_task_name = "mb:#{ns_name}:clobber"
48
+ clean_task_name = "mb:#{ns_name}:clean"
23
49
  build_task_name = "mb:#{ns_name}:build"
24
50
  bundle_task_name = "mb:#{ns_name}:bundle_install"
25
51
  rspec_task_name = "mb:#{ns_name}:run_rspec"
26
52
 
53
+ phony_gemfile_link_name = File.expand_path("tmp/Gemfile.#{ns_name}")
54
+
55
+ file phony_gemfile_link_name => GEMSPEC_LINK do
56
+ # apparently, rake doesn't deal with symlinks intelligently :P
57
+ ln_s('../Gemfile', phony_gemfile_link_name) unless File.exists?(phony_gemfile_link_name)
58
+ end
59
+
27
60
  task create_gemset_name do
28
61
  sh "rvm #{rvm_ruby} do rvm gemset create #{gemset_name}"
29
62
  end
@@ -36,7 +69,15 @@ gemset_name = 'zookeeper'
36
69
  end
37
70
  end
38
71
 
39
- task build_task_name => [create_gemset_name, clobber_task_name] do
72
+ task clean_task_name do
73
+ unless rvm_ruby == 'jruby'
74
+ cd 'ext' do
75
+ sh "rake clean"
76
+ end
77
+ end
78
+ end
79
+
80
+ task build_task_name => [create_gemset_name, clean_task_name] do
40
81
  unless rvm_ruby == 'jruby'
41
82
  cd 'ext' do
42
83
  sh "rvm #{ruby_with_gemset} do rake build"
@@ -44,13 +85,12 @@ gemset_name = 'zookeeper'
44
85
  end
45
86
  end
46
87
 
47
- task bundle_task_name => build_task_name do
48
- rm_f 'Gemfile.lock'
49
- sh "rvm #{ruby_with_gemset} do bundle install"
88
+ task bundle_task_name => [phony_gemfile_link_name, build_task_name] do
89
+ sh "rvm #{ruby_with_gemset} do bundle install --gemfile #{phony_gemfile_link_name}"
50
90
  end
51
91
 
52
92
  task rspec_task_name => bundle_task_name do
53
- sh "rvm #{ruby_with_gemset} do bundle exec rspec spec --fail-fast"
93
+ sh "rvm #{ruby_with_gemset} do env BUNDLE_GEMFILE=#{phony_gemfile_link_name} bundle exec rspec spec --fail-fast"
54
94
  end
55
95
 
56
96
  task "mb:#{ns_name}" => rspec_task_name
@@ -58,6 +98,23 @@ gemset_name = 'zookeeper'
58
98
  task "mb:test_all" => rspec_task_name
59
99
  end
60
100
 
101
+ task :default => 'mb:1.9.3'
102
+
103
+ task :clean do
104
+ rm_rf 'tmp'
105
+ end
106
+
107
+ # cargo culted from http://blog.flavorjon.es/2009/06/easily-valgrind-gdb-your-ruby-c.html
108
+ VALGRIND_BASIC_OPTS = '--num-callers=50 --error-limit=no --partial-loads-ok=yes --undef-value-errors=no'
109
+
110
+ task 'valgrind' do
111
+ cd 'ext' do
112
+ sh "rake clean build"
113
+ end
114
+
115
+ sh "valgrind #{VALGRIND_BASIC_OPTS} bundle exec rspec spec"
116
+ end
117
+
61
118
  namespace :build do
62
119
  task :clean do
63
120
  cd 'ext' do
data/ext/Rakefile CHANGED
@@ -29,6 +29,10 @@ end
29
29
 
30
30
  ZKRB_WRAPPER = %w[zkrb_wrapper.c zkrb_wrapper.h]
31
31
 
32
+
33
+ task :wrappers => ZKRB_WRAPPER
34
+
35
+
32
36
  task :clobber => :clean do
33
37
  rm_rf %w[Makefile c lib bin include]
34
38
  end
@@ -35,29 +35,21 @@ we want
35
35
  int valuelen, const struct ACL_vector *acl, int flags,
36
36
  string_completion_t completion, const void *data) {
37
37
 
38
- int rc;
39
- zkrb_zoo_acreate_args_t *ptr = malloc(sizeof(zkrb_zoo_acreate_args_t));
40
- check_mem(ptr);
41
-
42
- ptr->rc = 0;
43
- ptr->zh = zh;
44
- ptr->path = path;
45
- ptr->value = value;
46
- ptr->valuelen = valuelen;
47
- ptr->acl = acl;
48
- ptr->flags = flags;
49
- ptr->completion = completion;
50
- ptr->data = data;
51
-
52
- rb_thread_blocking_region(zkrb_gvl_zoo_acreate, (void *)ptr, RUBY_UBF_IO, 0);
53
-
54
- rc = ptr->rc;
55
- free(ptr);
56
- return rc;
57
-
58
- error:
59
- free(ptr);
60
- return -1;
38
+ zkrb_zoo_acreate_args_t args = {
39
+ .rc = ZKRB_FAIL,
40
+ .zh = zh,
41
+ .path = path,
42
+ .value = value,
43
+ .valuelen = valuelen,
44
+ .acl = acl,
45
+ .flags = flags,
46
+ .completion = completion,
47
+ .data = data
48
+ };
49
+
50
+ zkrb_thread_blocking_region(zkrb_gvl_zoo_acreate, (void *)&args);
51
+
52
+ return args.rc;
61
53
  }
62
54
 
63
55
  =end
@@ -156,43 +148,35 @@ class CallingFunction
156
148
  @fn_signature ||= "int #{name}(#{typed_args.join(', ')})"
157
149
  end
158
150
 
159
- def ptr_lines
160
- @ptr_lines = (
161
- lines = ["ptr->rc = rc;"]
162
- lines += member_names.map { |n| "ptr->#{n} = #{n};" }
163
- lines.map! { |n| " #{n}" }
164
- lines.join("\n")
165
- )
151
+ def initializer_lines
152
+ @initializer_lines ||= member_names.map { |n| " .#{n} = #{n}" }.join(",\n")
166
153
  end
167
154
 
168
155
  def top
169
156
  <<-EOS
170
157
  // wrapper that calls #{zoo_fn_name} via #{wrapper_fn.name} inside rb_thread_blocking_region
171
158
  #{fn_signature} {
172
- int rc = ZKRB_FAIL;
173
- #{struct.name} *ptr = malloc(sizeof(#{struct.name}));
174
- check_mem(ptr);
159
+ #{struct.name} args = {
160
+ .rc = ZKRB_FAIL,
161
+ #{initializer_lines}
162
+ };
175
163
  EOS
176
164
  end
177
165
 
178
166
  def rb_thread_blocking_region_call
179
- " zkrb_thread_blocking_region(#{wrapper_fn.name}, (void *)ptr);"
167
+ " zkrb_thread_blocking_region(#{wrapper_fn.name}, (void *)&args);"
180
168
  end
181
169
 
182
170
  def bottom
183
171
  <<-EOS
184
172
 
185
- rc = ptr->rc;
186
-
187
- error:
188
- free(ptr);
189
- return rc;
173
+ return args.rc;
190
174
  }
191
175
  EOS
192
176
  end
193
177
 
194
178
  def body
195
- @body ||= [top, ptr_lines, nil, rb_thread_blocking_region_call, bottom].join("\n")
179
+ @body ||= [top, rb_thread_blocking_region_call, bottom].join("\n")
196
180
  end
197
181
  end
198
182
 
@@ -209,6 +193,8 @@ class GeneratedCode < Struct.new(:structs, :wrapper_fns, :calling_fns)
209
193
  new.tap do |code|
210
194
  while true
211
195
  break unless text =~ REGEXP
196
+ text = $~.post_match
197
+
212
198
  zoo_fn_name, argstr = $1
213
199
  argstr = $2
214
200
 
@@ -228,8 +214,6 @@ class GeneratedCode < Struct.new(:structs, :wrapper_fns, :calling_fns)
228
214
  code.structs << struct
229
215
  code.wrapper_fns << wrapper_fn
230
216
  code.calling_fns << calling_fn
231
-
232
- text = $~.post_match
233
217
  end
234
218
  end
235
219
  end