distlock 0.0.5 → 0.0.6

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/lib/dist_lock.rb ADDED
@@ -0,0 +1 @@
1
+ require 'distlock'
data/lib/distlock.rb CHANGED
@@ -3,3 +3,8 @@ require 'distlock/zk/zk'
3
3
 
4
4
  module Distlock
5
5
  end
6
+
7
+ # convenience so we can use either name
8
+ module DistLock
9
+ include Distlock
10
+ end
@@ -1,3 +1,3 @@
1
1
  module Distlock
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -1,19 +1,13 @@
1
1
  module Distlock
2
2
  module ZK
3
3
  class AffinityPool
4
+ include Distlock::ZK::Common
5
+
4
6
  def initialize(options={})
5
- defaults = {:host => "localhost:2181", :timeout => 10, :root_path => "/affinity/global/test"}
7
+ defaults = {:host => "localhost:2181", :timeout => 10, :root_path => "/affinity/pool/test"}
6
8
  @options = defaults.merge(options)
7
9
  end
8
10
 
9
- def zk
10
- @zk ||= begin
11
- zk = Zookeeper.new(@options[:host], @options[:timeout])
12
-
13
- # todo - initialize the root_path hierarchy here
14
- zk.stat(:path => @options[:root_path])
15
- end
16
- end
17
11
  end
18
12
  end
19
13
  end
@@ -0,0 +1,48 @@
1
+ module Distlock
2
+ module ZK
3
+ module Common
4
+ def zk
5
+ @zk ||= begin
6
+ zk = Zookeeper.new(@options[:host], @options[:timeout])
7
+ end
8
+ end
9
+
10
+ # does a node exist for the given path?
11
+ def exists?(path)
12
+ puts "checking if #{path} exists"
13
+ result = zk.stat(:path => path)[:stat].exists
14
+ puts result
15
+ result
16
+ end
17
+
18
+ # create all levels of the hierarchy as necessary
19
+ # i.e. for "/foo/bar/baz", creates the following nodes -
20
+ #
21
+ # /foo
22
+ # /foo/bar
23
+ # /foo/bar/baz
24
+ #
25
+ def safe_create(path)
26
+ path_elements = path.split("/").reject{ |x| x=="" }
27
+
28
+ all = []
29
+ while(!path_elements.empty?)
30
+ all << path_elements
31
+ path_elements = path_elements[0..-2]
32
+ end
33
+
34
+ all.reverse.each do |path_elements|
35
+ path = "/" + path_elements.join("/")
36
+ zk.create(:path => path) unless exists?(path)
37
+ end
38
+ end
39
+
40
+ def create_sequenced_ephemeral(path, prefix="lock")
41
+ lock_path = [path, "#{prefix}-#{zk.client_id}-"].join("/")
42
+ puts lock_path
43
+ result = zk.create(:path => lock_path, :sequence => true, :ephemeral => true)
44
+ puts result
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,4 +1,5 @@
1
1
  require 'zookeeper'
2
+ require 'distlock/zk/common'
2
3
  require 'distlock/zk/affinity_pool'
3
4
 
4
5
  module Distlock
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: distlock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-30 00:00:00.000000000 Z
12
+ date: 2012-01-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70178525913240 !ruby/object:Gem::Requirement
16
+ requirement: &70294611917200 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0.9'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70178525913240
24
+ version_requirements: *70294611917200
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: zookeeper
27
- requirement: &70178525912080 !ruby/object:Gem::Requirement
27
+ requirement: &70294611916060 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0.4'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70178525912080
35
+ version_requirements: *70294611916060
36
36
  description: Distributed Locking
37
37
  email:
38
38
  - simon@soulware.co.uk
@@ -45,9 +45,11 @@ files:
45
45
  - README
46
46
  - Rakefile
47
47
  - distlock.gemspec
48
+ - lib/dist_lock.rb
48
49
  - lib/distlock.rb
49
50
  - lib/distlock/version.rb
50
51
  - lib/distlock/zk/affinity_pool.rb
52
+ - lib/distlock/zk/common.rb
51
53
  - lib/distlock/zk/zk.rb
52
54
  homepage: http://soulware.github.com/distlock
53
55
  licenses: []
@@ -63,7 +65,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
63
65
  version: '0'
64
66
  segments:
65
67
  - 0
66
- hash: -4249032564007254320
68
+ hash: -2701141366311173259
67
69
  required_rubygems_version: !ruby/object:Gem::Requirement
68
70
  none: false
69
71
  requirements:
@@ -72,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
74
  version: '0'
73
75
  segments:
74
76
  - 0
75
- hash: -4249032564007254320
77
+ hash: -2701141366311173259
76
78
  requirements: []
77
79
  rubyforge_project: distlock
78
80
  rubygems_version: 1.8.10