Class: MondrianRedisSegmentCache::Cache
- Inherits:
-
Object
- Object
- MondrianRedisSegmentCache::Cache
- Includes:
- Java::MondrianSpi::SegmentCache
- Defined in:
- lib/mondrian_redis_segment_cache/cache.rb
Constant Summary collapse
- SEGMENT_HEADERS_SET_KEY =
"MONDRIAN_SEGMENT_HEADERS_SET"
Instance Attribute Summary collapse
-
#created_listener_connection ⇒ Object
readonly
Returns the value of attribute created_listener_connection.
-
#deleted_listener_connection ⇒ Object
readonly
Returns the value of attribute deleted_listener_connection.
-
#listeners ⇒ Object
readonly
Returns the value of attribute listeners.
-
#mondrian_redis ⇒ Object
readonly
Returns the value of attribute mondrian_redis.
Instance Method Summary collapse
-
#addListener(segment_cache_listener) ⇒ Object
Public Instance Methods.
-
#contains(segment_header) ⇒ Object
returns boolean takes mondrian.spi.SegmentHeader.
- #created_event_key ⇒ Object
- #deleted_event_key ⇒ Object
-
#get(segment_header) ⇒ Object
returns mondrian.spi.SegmentBody takes mondrian.spi.SegmentHeader.
-
#getSegmentHeaders ⇒ Object
returns ArrayList
. -
#initialize(mondrian_redis_connection) ⇒ Cache
constructor
Constructor.
- #publish_created_to_listeners(message) ⇒ Object
- #publish_deleted_to_listeners(message) ⇒ Object
- #put(segment_header, segment_body) ⇒ Object
- #remove(segment_header) ⇒ Object
- #removeListener(segment_cache_listener) ⇒ Object
- #reset_listeners ⇒ Object
- #supportsRichIndex ⇒ Object
- #tearDown ⇒ Object
Constructor Details
#initialize(mondrian_redis_connection) ⇒ Cache
Constructor
14 15 16 17 18 19 20 21 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 14 def initialize(mondrian_redis_connection) @mondrian_redis = mondrian_redis_connection @created_listener_connection = ::Redis.new() @deleted_listener_connection = ::Redis.new() reset_listeners register_for_redis_events end |
Instance Attribute Details
#created_listener_connection ⇒ Object (readonly)
Returns the value of attribute created_listener_connection.
7 8 9 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 7 def created_listener_connection @created_listener_connection end |
#deleted_listener_connection ⇒ Object (readonly)
Returns the value of attribute deleted_listener_connection.
7 8 9 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 7 def deleted_listener_connection @deleted_listener_connection end |
#listeners ⇒ Object (readonly)
Returns the value of attribute listeners.
7 8 9 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 7 def listeners @listeners end |
#mondrian_redis ⇒ Object (readonly)
Returns the value of attribute mondrian_redis.
7 8 9 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 7 def mondrian_redis @mondrian_redis end |
Instance Method Details
#addListener(segment_cache_listener) ⇒ Object
Public Instance Methods
26 27 28 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 26 def addListener(segment_cache_listener) listeners << segment_cache_listener end |
#contains(segment_header) ⇒ Object
returns boolean takes mondrian.spi.SegmentHeader
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 32 def contains(segment_header) segment_header.description # Hazel adapter says this affects serialization header_base64 = segment_header_to_base64(segment_header) if header_base64 return mondrian_redis.exists(header_base64) end return false end |
#created_event_key ⇒ Object
43 44 45 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 43 def created_event_key @created_event_key ||= "__keyevent@#{client_options[:db]}__:set" end |
#deleted_event_key ⇒ Object
47 48 49 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 47 def deleted_event_key @created_event_key ||= "__keyevent@#{client_options[:db]}__:del" end |
#get(segment_header) ⇒ Object
returns mondrian.spi.SegmentBody takes mondrian.spi.SegmentHeader
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 53 def get(segment_header) segment_header.description # Hazel adapter says this affects serialization header_base64 = segment_header_to_base64(segment_header) if header_base64 body_base64 = mondrian_redis.get(header_base64) return segment_body_from_base64(body_base64) end return nil end |
#getSegmentHeaders ⇒ Object
returns ArrayList
66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 66 def getSegmentHeaders() segment_headers_base64 = mondrian_redis.smembers(SEGMENT_HEADERS_SET_KEY) segment_headers = ::Java::JavaUtil::ArrayList.new segment_headers_base64.each do |segment_header_base64| segment_header = segment_header_from_base64(segment_header_base64) if segment_header segment_headers << segment_header end end return segment_headers end |
#publish_created_to_listeners(message) ⇒ Object
80 81 82 83 84 85 86 87 88 89 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 80 def publish_created_to_listeners() segment_header = segment_header_from_base64() if segment_header listeners.each do |listener| created_event = MondrianRedisCacheCreatedEvent.new(segment_header) listener.handle(created_event) end end end |
#publish_deleted_to_listeners(message) ⇒ Object
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 91 def publish_deleted_to_listeners() segment_header = segment_header_from_base64() if segment_header listeners.each do |listener| deleted_event = MondrianRedisCacheDeletedEvent.new(segment_header) listener.handle(deleted_evet) end end end |
#put(segment_header, segment_body) ⇒ Object
102 103 104 105 106 107 108 109 110 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 102 def put(segment_header, segment_body) segment_header.description # Hazel adapter says this affects serialization header_base64 = segment_header_to_base64(segment_header) body_base64 = segment_body_to_base64(segment_body) mondrian_redis.sadd(SEGMENT_HEADERS_SET_KEY, header_base64) set_success = mondrian_redis.set(header_base64, body_base64) return (set_success == "OK" || set_success == true) # weird polymorphic return ? end |
#remove(segment_header) ⇒ Object
112 113 114 115 116 117 118 119 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 112 def remove(segment_header) segment_header.description # Hazel adapter says this affects serialization header_base64 = segment_header_to_base64(segment_header) mondrian_redis.srem(SEGMENT_HEADERS_SET_KEY, header_base64) deleted_keys = mondrian_redis.del(header_base64) return deleted_keys >= 1 end |
#removeListener(segment_cache_listener) ⇒ Object
121 122 123 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 121 def removeListener(segment_cache_listener) listeners.delete(segment_cache_listener) end |
#reset_listeners ⇒ Object
125 126 127 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 125 def reset_listeners @listeners = Set.new end |
#supportsRichIndex ⇒ Object
129 130 131 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 129 def supportsRichIndex() true # this is why we are serializing the headers to base64 end |
#tearDown ⇒ Object
133 134 135 136 137 138 139 140 141 |
# File 'lib/mondrian_redis_segment_cache/cache.rb', line 133 def tearDown() # Remove all of the headers and the set that controls them segment_headers_base64 = mondrian_redis.smembers(SEGMENT_HEADERS_SET_KEY) segment_headers_base64.each do |segment_header_base64| mondrian_redis.del(segment_header_base64) end mondrian_redis.del(SEGMENT_HEADERS_SET_KEY) end |