slyphon-zookeeper 0.9.1-java → 0.9.2-java

Sign up to get free protection for your applications and to get access to all the features.
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