Class: AvroTurf::DiskCache
- Inherits:
-
Object
- Object
- AvroTurf::DiskCache
- Defined in:
- lib/avro_turf/disk_cache.rb
Overview
A cache for the CachedConfluentSchemaRegistry. Extends the InMemoryCache to provide a write-thru to disk for persistent cache.
Instance Method Summary collapse
-
#initialize(disk_path, logger: Logger.new($stdout)) ⇒ DiskCache
constructor
A new instance of DiskCache.
-
#lookup_by_id(id) ⇒ Object
override the write-thru cache (json) does not store keys in numeric format so, convert id to a string for caching purposes.
-
#lookup_by_schema(subject, schema) ⇒ Object
override to use a json serializable cache key.
-
#lookup_by_version(subject, version) ⇒ Object
checks instance var (in-memory cache) for schema checks disk cache if in-memory cache doesn’t exists if file exists but no in-memory cache, read from file and sync in-memory cache finally, if file doesn’t exist return nil.
-
#lookup_data_by_schema(subject, schema) ⇒ Object
override to use a json serializable cache key.
-
#store_by_id(id, schema) ⇒ Object
override to include write-thru cache after storing result from upstream.
-
#store_by_schema(subject, schema, id) ⇒ Object
override to use a json serializable cache key and update the file cache.
-
#store_by_version(subject, version, schema) ⇒ Object
check if file exists and parse json into a hash if file exists take json and overwite/insert schema at key if file doesn’t exist create new hash write the new/updated hash to file update instance var (in memory-cache) to match.
- #store_data_by_schema(subject, schema, data) ⇒ Object
Constructor Details
#initialize(disk_path, logger: Logger.new($stdout)) ⇒ DiskCache
Returns a new instance of DiskCache.
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/avro_turf/disk_cache.rb', line 5 def initialize(disk_path, logger: Logger.new($stdout)) @logger = logger # load the write-thru cache on startup, if it exists @schemas_by_id_path = File.join(disk_path, 'schemas_by_id.json') hash = read_from_disk_cache(@schemas_by_id_path) @schemas_by_id = hash || {} @ids_by_schema_path = File.join(disk_path, 'ids_by_schema.json') hash = read_from_disk_cache(@ids_by_schema_path) @ids_by_schema = hash || {} @schemas_by_subject_version_path = File.join(disk_path, 'schemas_by_subject_version.json') @schemas_by_subject_version = {} @data_by_schema_path = File.join(disk_path, 'data_by_schema.json') hash = read_from_disk_cache(@data_by_schema_path) @data_by_schema = hash || {} end |
Instance Method Details
#lookup_by_id(id) ⇒ Object
override the write-thru cache (json) does not store keys in numeric format so, convert id to a string for caching purposes
28 29 30 |
# File 'lib/avro_turf/disk_cache.rb', line 28 def lookup_by_id(id) @schemas_by_id[id.to_s] end |
#lookup_by_schema(subject, schema) ⇒ Object
override to use a json serializable cache key
42 43 44 45 |
# File 'lib/avro_turf/disk_cache.rb', line 42 def lookup_by_schema(subject, schema) key = "#{subject}#{schema}" @ids_by_schema[key] end |
#lookup_by_version(subject, version) ⇒ Object
checks instance var (in-memory cache) for schema checks disk cache if in-memory cache doesn’t exists if file exists but no in-memory cache, read from file and sync in-memory cache finally, if file doesn’t exist return nil
75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/avro_turf/disk_cache.rb', line 75 def lookup_by_version(subject, version) key = "#{subject}#{version}" schema = @schemas_by_subject_version[key] return schema unless schema.nil? hash = read_from_disk_cache(@schemas_by_subject_version_path) if hash @schemas_by_subject_version = hash @schemas_by_subject_version[key] end end |
#lookup_data_by_schema(subject, schema) ⇒ Object
override to use a json serializable cache key
48 49 50 51 |
# File 'lib/avro_turf/disk_cache.rb', line 48 def lookup_data_by_schema(subject, schema) key = "#{subject}#{schema}" @data_by_schema[key] end |
#store_by_id(id, schema) ⇒ Object
override to include write-thru cache after storing result from upstream
33 34 35 36 37 38 39 |
# File 'lib/avro_turf/disk_cache.rb', line 33 def store_by_id(id, schema) # must return the value from storing the result (i.e. do not return result from file write) @schemas_by_id[id.to_s] = schema write_to_disk_cache(@schemas_by_id_path, @schemas_by_id) schema end |
#store_by_schema(subject, schema, id) ⇒ Object
override to use a json serializable cache key and update the file cache
54 55 56 57 58 59 60 |
# File 'lib/avro_turf/disk_cache.rb', line 54 def store_by_schema(subject, schema, id) key = "#{subject}#{schema}" @ids_by_schema[key] = id write_to_disk_cache(@ids_by_schema_path, @ids_by_schema) id end |
#store_by_version(subject, version, schema) ⇒ Object
check if file exists and parse json into a hash if file exists take json and overwite/insert schema at key if file doesn’t exist create new hash write the new/updated hash to file update instance var (in memory-cache) to match
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/avro_turf/disk_cache.rb', line 93 def store_by_version(subject, version, schema) key = "#{subject}#{version}" hash = read_from_disk_cache(@schemas_by_subject_version_path) hash = if hash hash[key] = schema hash else { key => schema } end write_to_disk_cache(@schemas_by_subject_version_path, hash) @schemas_by_subject_version = hash @schemas_by_subject_version[key] end |
#store_data_by_schema(subject, schema, data) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/avro_turf/disk_cache.rb', line 62 def store_data_by_schema(subject, schema, data) return unless data key = "#{subject}#{schema}" @data_by_schema[key] = data write_to_disk_cache(@data_by_schema_path, @data_by_schema) data end |