duality 0.0.1 → 0.0.2

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.
Files changed (2) hide show
  1. data/lib/duality.rb +48 -15
  2. metadata +1 -1
data/lib/duality.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  require 'timeout'
2
2
  class Duality
3
3
 
4
- VERSION = "0.0.1"
5
- DEFAULT_TIMEOUT=1
4
+ VERSION = "0.0.2"
5
+ #DEFAULT_TIMEOUT=1
6
6
  @@fast, @@slow = nil
7
7
 
8
8
  # Used to set cache connection timeout
9
9
  # - default is 0.5 seconds
10
- attr_accessor :timeout
10
+ #attr_accessor :timeout
11
11
 
12
12
  def initialize fast, slow
13
13
  # check params are caches
@@ -15,28 +15,60 @@ class Duality
15
15
  raise NotACache unless slow.respond_to?(:set) && slow.respond_to?(:get)
16
16
  @fast = fast
17
17
  @slow = slow
18
+ Thread.abort_on_exception = true
18
19
  end
19
20
 
20
21
  # Return set timeout or use default.
21
- def timeout
22
- @timeout||DEFAULT_TIMEOUT
23
- end
22
+ #def timeout
23
+ #@timeout||DEFAULT_TIMEOUT
24
+ #end
24
25
 
25
26
  # Set to fast and slow.
26
- # - timeout after #timeout
27
27
  # - return true if both succeed
28
28
  # - return false if either fail
29
29
  def set key, value
30
- Process.fork { @fast.set(key, value) }
31
- Process.fork { @slow.set(key, value) }
32
- begin
33
- Timeout::timeout(timeout) do
34
- return ((Process.waitall.select { |p| p[1] == 0 }).count == 2)
35
- end
36
- rescue Timeout::Error
37
- raise CacheTimeout
30
+ fast = Thread.new { @fast.set(key, value) }
31
+ slow = Thread.new { @slow.set(key, value) }
32
+
33
+ timeout = 10 # iterations, or 1 seconds
34
+ current = 0
35
+ while (fast.alive? || slow.alive?) do
36
+ raise CacheTimeout if current == timeout
37
+ sleep 0.1
38
+ current = current + 1
39
+ end
40
+ end
41
+ alias :save :set
42
+
43
+ # Delete from both - async
44
+ def delete key
45
+ fast = Thread.new { @fast.delete(key) }
46
+ slow = Thread.new { @slow.delete(key) }
47
+
48
+ timeout = 10 # iterations, or 1 seconds
49
+ current = 0
50
+ while (fast.alive? || slow.alive?) do
51
+ raise CacheTimeout if current == timeout
52
+ sleep 0.1
53
+ current = current + 1
54
+ end
55
+ end
56
+ alias :remove :delete
57
+
58
+ # Flush caches - async
59
+ def flush
60
+ fast = Thread.new { @fast.flush }
61
+ slow = Thread.new { @slow.flush }
62
+
63
+ timeout = 10 # iterations, or 1 seconds
64
+ current = 0
65
+ while (fast.alive? || slow.alive?) do
66
+ raise CacheTimeout if current == timeout
67
+ sleep 0.1
68
+ current = current + 1
38
69
  end
39
70
  end
71
+ alias :clean :flush
40
72
 
41
73
  # Get from fast or slow.
42
74
  # - returns nil if none are found
@@ -55,6 +87,7 @@ class Duality
55
87
  end
56
88
  return content
57
89
  end
90
+ alias :load :get
58
91
 
59
92
  # Add support for other methods from passed caches
60
93
  # this adds support only, but no speed gains.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: duality
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: