torquebox-base 1.0.0.CR2-java → 1.0.0-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.
@@ -89,7 +89,12 @@ module ActiveSupport
89
89
  def write_entry(key, entry, options = {})
90
90
  args = [ :put_async, key, encode(entry) ]
91
91
  args[0] = :put_if_absent_async if options[:unless_exist]
92
- args << options[:expires_in].to_i << SECONDS if options[:expires_in]
92
+ if options[:expires_in]
93
+ # Set the Infinispan expire a few minutes into the future to support
94
+ # :race_condition_ttl on read
95
+ expires_in = options[:expires_in].to_i + 5.minutes
96
+ args << expires_in << SECONDS
97
+ end
93
98
  cache.send( *args ) && true
94
99
  end
95
100
 
Binary file
@@ -1,6 +1,6 @@
1
1
  module TorqueboxBase
2
- VERSION = '1.0.0.CR2'
3
- MAVEN_VERSION = '1.0.0.CR2'
2
+ VERSION = '1.0.0'
3
+ MAVEN_VERSION = '1.0.0'
4
4
  end
5
5
  begin
6
6
  require 'java'
@@ -105,6 +105,42 @@ describe ActiveSupport::Cache::TorqueBoxStore do
105
105
  @cache.fetch("today", :force => true) { "Tuesday" }.should == "Tuesday"
106
106
  end
107
107
 
108
+ it "should support :race_condition_ttl" do
109
+ database = mock('database')
110
+ fetch_options = { :expires_in => 0.1.seconds, :race_condition_ttl => 30.seconds }
111
+ # First fetch looks up from database and populates
112
+ database.should_receive(:town).and_return("Pantsville")
113
+ @cache.fetch("town", fetch_options) {
114
+ database.town
115
+ }.should == "Pantsville"
116
+ # Sleep until the entry is expired
117
+ sleep(0.2)
118
+ # Create a set of CountDownLatches to test :race_condition_ttl
119
+ # without relying on sleep calls
120
+ read_latch = java.util.concurrent.CountDownLatch.new(1)
121
+ write_latch = java.util.concurrent.CountDownLatch.new(1)
122
+ # Read the cache from two threads but only one should hit our database
123
+ database.should_receive(:town).once.and_return {
124
+ # Trigger the read latch so the other thread can read the cached value
125
+ read_latch.count_down
126
+ write_latch.await(15, java.util.concurrent.TimeUnit::SECONDS)
127
+ "NoPantsville"
128
+ }
129
+ other_thread = Thread.new {
130
+ read_latch.await(15, java.util.concurrent.TimeUnit::SECONDS)
131
+ @cache.fetch("town", fetch_options) {
132
+ database.town
133
+ }.should == "Pantsville"
134
+ # Trigger the write latch to update the cached value
135
+ write_latch.count_down
136
+ }
137
+ @cache.fetch("town", fetch_options) {
138
+ database.town
139
+ }.should == "NoPantsville"
140
+ other_thread.join
141
+ @cache.read("town").should == "NoPantsville"
142
+ end
143
+
108
144
  end
109
145
 
110
146
  describe "multiples" do
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: torquebox-base
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: 6
5
- version: 1.0.0.CR2
4
+ prerelease:
5
+ version: 1.0.0
6
6
  platform: java
7
7
  authors: []
8
8
 
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-04-25 00:00:00 -04:00
13
+ date: 2011-04-29 00:00:00 -04:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -92,9 +92,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
92
  required_rubygems_version: !ruby/object:Gem::Requirement
93
93
  none: false
94
94
  requirements:
95
- - - ">"
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 1.3.1
97
+ version: "0"
98
98
  requirements: []
99
99
 
100
100
  rubyforge_project: