mondrian_redis_segment_cache 0.0.4-java → 0.0.5-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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5037596f5c1489481ba34ee7cdbdfefa8a5ae1b9
4
- data.tar.gz: f5c3b7fd0c3d5f900d71274266f8c921cc2aca7d
3
+ metadata.gz: 4f9d1865c577a8c64f5d69abb17c1e20f85f26a6
4
+ data.tar.gz: fd0c08ed86a8d88a0843523fba32cb7f316e1ff2
5
5
  SHA512:
6
- metadata.gz: 63618da9eb4cf34f3863e3d77611c518e9abb16bf6d912256ed924dd9a247287b900ed9acb2f92f606abefbcaece3c30c243c1faa50dac22d0151aaefd7b4ca5
7
- data.tar.gz: 9267d27e4b9897c1f5bd657b626da7edaeb53b48120b5f5f3e9f8424c491b2aced2ada7e42c469f8fe78fc982cfc51831795e2bc73e770d6adf29a0cb849c09e
6
+ metadata.gz: b9412cfff753f5ff105ad6e89a2e0232c9253fa5a20bd182f031f88acaa30424b5b1a23d653134436cb2449a65f87d98e654d2041962fb9dcd28578c244f4c14
7
+ data.tar.gz: b1ab22bd6e88bb7b440fbe4acd5323607ab6ca5afcef2c5686560f62f1f498a21059253b4abc8b8e113a87de47debfffd33215dd05011839051e225099771596
@@ -6,20 +6,22 @@ module MondrianRedisSegmentCache
6
6
  class Cache
7
7
  include Java::MondrianSpi::SegmentCache
8
8
 
9
- attr_reader :mondrian_redis, :listeners, :created_listener_connection, :deleted_listener_connection
9
+ attr_reader :created_listener_connection, :deleted_listener_connection, :listeners, :mondrian_redis, :options
10
10
 
11
11
  SEGMENT_HEADERS_SET_KEY = "MONDRIAN_SEGMENT_HEADERS_SET"
12
12
 
13
13
  ##
14
14
  # Constructor
15
15
  #
16
- def initialize(mondrian_redis_connection)
16
+ def initialize(mondrian_redis_connection, new_options = {})
17
17
  @mondrian_redis = mondrian_redis_connection
18
18
  @created_listener_connection = ::Redis.new(client_options)
19
19
  @deleted_listener_connection = ::Redis.new(client_options)
20
+ @options = Marshal.load(Marshal.dump(new_options))
20
21
 
21
22
  reset_listeners
22
23
  register_for_redis_events
24
+ reconcile_set_and_keys
23
25
  end
24
26
 
25
27
  ##
@@ -27,6 +29,7 @@ module MondrianRedisSegmentCache
27
29
  #
28
30
  def addListener(segment_cache_listener)
29
31
  listeners << segment_cache_listener
32
+ eager_load_listener(segment_cache_listener)
30
33
  end
31
34
 
32
35
  # returns boolean
@@ -50,6 +53,13 @@ module MondrianRedisSegmentCache
50
53
  @created_event_key ||= "__keyevent@#{client_options[:db]}__:del"
51
54
  end
52
55
 
56
+ def eager_load_listener(listener)
57
+ segment_headers_base64 = mondrian_redis.smembers(SEGMENT_HEADERS_SET_KEY)
58
+ segment_headers_base64.each do |segment_header_base64|
59
+ publish_created_to_listener(segment_header_base64, listener)
60
+ end
61
+ end
62
+
53
63
  # returns mondrian.spi.SegmentBody
54
64
  # takes mondrian.spi.SegmentHeader
55
65
  def get(segment_header)
@@ -79,25 +89,38 @@ module MondrianRedisSegmentCache
79
89
  return segment_headers
80
90
  end
81
91
 
82
- def publish_created_to_listeners(message)
92
+ def publish_created_to_listener(message, listener)
83
93
  segment_header = segment_header_from_base64(message)
84
94
 
85
95
  if segment_header
86
- listeners.each do |listener|
87
- created_event = ::MondrianRedisSegmentCache::CreatedEvent.new(segment_header)
88
- listener.handle(created_event)
89
- end
96
+ created_event = ::MondrianRedisSegmentCache::CreatedEvent.new(segment_header)
97
+ listener.handle(created_event)
90
98
  end
91
99
  end
92
100
 
93
- def publish_deleted_to_listeners(message)
101
+ def publish_created_to_listeners(message)
102
+ listeners.each do |listener|
103
+ publish_created_to_listener(message, listener)
104
+ end
105
+ end
106
+
107
+ def publish_deleted_to_listener(message, listener)
94
108
  segment_header = segment_header_from_base64(message)
95
109
 
96
110
  if segment_header
97
- listeners.each do |listener|
98
- deleted_event = ::MondrianRedisSegmentCache::DeletedEvent.new(segment_header)
99
- listener.handle(deleted_event)
100
- end
111
+ deleted_event = ::MondrianRedisSegmentCache::DeletedEvent.new(segment_header)
112
+ listener.handle(deleted_event)
113
+ end
114
+ end
115
+
116
+ def publish_deleted_to_listeners(message)
117
+ listeners.each do |listener|
118
+ publish_deleted_to_listener(message, listener)
119
+ end
120
+
121
+ # Each server can tell the Set to remove the key as it may be expired
122
+ if mondrian_redis.sismember(SEGMENT_HEADERS_SET_KEY, message)
123
+ mondrian_redis.srem(SEGMENT_HEADERS_SET_KEY, message)
101
124
  end
102
125
  end
103
126
 
@@ -106,9 +129,14 @@ module MondrianRedisSegmentCache
106
129
  header_base64 = segment_header_to_base64(segment_header)
107
130
  body_base64 = segment_body_to_base64(segment_body)
108
131
  mondrian_redis.sadd(SEGMENT_HEADERS_SET_KEY, header_base64)
109
- set_success = mondrian_redis.set(header_base64, body_base64)
132
+
133
+ if options[:ttl]
134
+ set_success = mondrian_redis.set(header_base64, body_base64, :ex => options[:ttl])
135
+ else
136
+ set_success = mondrian_redis.set(header_base64, body_base64)
137
+ end
110
138
 
111
- return (set_success == "OK" || set_success == true) # weird polymorphic return ?
139
+ return ("#{set_success}".upcase == "OK" || set_success == true) # weird polymorphic return ?
112
140
  end
113
141
 
114
142
  def remove(segment_header)
@@ -133,13 +161,15 @@ module MondrianRedisSegmentCache
133
161
  end
134
162
 
135
163
  def tearDown()
136
- # Remove all of the headers and the set that controls them
137
- segment_headers_base64 = mondrian_redis.smembers(SEGMENT_HEADERS_SET_KEY)
138
- segment_headers_base64.each do |segment_header_base64|
139
- mondrian_redis.del(segment_header_base64)
140
- end
164
+ if options[:delete_all_on_tear_down]
165
+ # Remove all of the headers and the set that controls them
166
+ segment_headers_base64 = mondrian_redis.smembers(SEGMENT_HEADERS_SET_KEY)
167
+ segment_headers_base64.each do |segment_header_base64|
168
+ mondrian_redis.del(segment_header_base64)
169
+ end
141
170
 
142
- mondrian_redis.del(SEGMENT_HEADERS_SET_KEY)
171
+ mondrian_redis.del(SEGMENT_HEADERS_SET_KEY)
172
+ end
143
173
  end
144
174
 
145
175
  private
@@ -160,6 +190,17 @@ module MondrianRedisSegmentCache
160
190
  return mondrian_redis.client.options
161
191
  end
162
192
 
193
+ def reconcile_set_and_keys
194
+ segment_headers_base64 = mondrian_redis.smembers(SEGMENT_HEADERS_SET_KEY)
195
+
196
+ segment_headers_base64.each do |segment_header_base64|
197
+ # Spin through Header Set and remove any keys that are not in redis at all (they may have been deleted while offline)
198
+ unless mondrian_redis.exists(header_base64)
199
+ mondrian_redis.srem(SEGMENT_HEADERS_SET_KEY, message)
200
+ end
201
+ end
202
+ end
203
+
163
204
  def register_for_redis_events
164
205
  return if @listeners_registered
165
206
 
@@ -1,3 +1,3 @@
1
1
  module MondrianRedisSegmentCache
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mondrian_redis_segment_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: java
6
6
  authors:
7
7
  - Brandon Dewitt