Class: AvroTurf::CachedConfluentSchemaRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/avro_turf/cached_confluent_schema_registry.rb

Overview

Caches registrations and lookups to the schema registry in memory.

Instance Method Summary collapse

Constructor Details

#initialize(upstream, cache: nil) ⇒ CachedConfluentSchemaRegistry

Instantiate a new CachedConfluentSchemaRegistry instance with the given configuration. By default, uses a provided InMemoryCache to prevent repeated calls to the upstream registry.

upstream - The upstream schema registry object that fully responds to all methods in the

AvroTurf::ConfluentSchemaRegistry interface.

cache - Optional user provided Cache object that responds to all methods in the AvroTurf::InMemoryCache interface.



15
16
17
18
# File 'lib/avro_turf/cached_confluent_schema_registry.rb', line 15

def initialize(upstream, cache: nil)
  @upstream = upstream
  @cache = cache || AvroTurf::InMemoryCache.new
end

Instance Method Details

#check(subject, schema) ⇒ Object



28
29
30
# File 'lib/avro_turf/cached_confluent_schema_registry.rb', line 28

def check(subject, schema)
  @cache.lookup_data_by_schema(subject, schema) || @cache.store_data_by_schema(subject, schema, @upstream.check(subject, schema))
end

#fetch(id) ⇒ Object



32
33
34
# File 'lib/avro_turf/cached_confluent_schema_registry.rb', line 32

def fetch(id)
  @cache.lookup_by_id(id) || @cache.store_by_id(id, @upstream.fetch(id))
end

#register(subject, schema) ⇒ Object



36
37
38
# File 'lib/avro_turf/cached_confluent_schema_registry.rb', line 36

def register(subject, schema)
  @cache.lookup_by_schema(subject, schema) || @cache.store_by_schema(subject, schema, @upstream.register(subject, schema))
end

#subject_version(subject, version = "latest") ⇒ Object



40
41
42
43
44
45
# File 'lib/avro_turf/cached_confluent_schema_registry.rb', line 40

def subject_version(subject, version = "latest")
  return @upstream.subject_version(subject, version) if version == "latest"

  @cache.lookup_by_version(subject, version) ||
    @cache.store_by_version(subject, version, @upstream.subject_version(subject, version))
end