Class TopicNameCacheFilter

java.lang.Object
io.kroxylicious.proxy.internal.filter.impl.TopicNameCacheFilter
All Implemented Interfaces:
io.kroxylicious.proxy.filter.Filter, io.kroxylicious.proxy.filter.MetadataRequestFilter, io.kroxylicious.proxy.filter.MetadataResponseFilter

@ThreadSafe public class TopicNameCacheFilter extends Object implements io.kroxylicious.proxy.filter.MetadataRequestFilter, io.kroxylicious.proxy.filter.MetadataResponseFilter
A Filter that learns and caches all topic names, it is responsible for short circuit responding to internal topic name retrievals.

Note that this is a special Filter in that a single instance is shared across all connections for a VirtualCluster rather than an instance per connection. This means it can be invoked by multiple threads concurrently.

  • Constructor Summary

    Constructors
    Constructor
    Description
    TopicNameCacheFilter(CacheConfiguration cacheConfiguration, String clusterName)
     
    TopicNameCacheFilter(CacheConfiguration cacheConfiguration, Map<org.apache.kafka.common.Uuid,String> topicNames, String clusterName)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    CompletionStage<io.kroxylicious.proxy.filter.RequestFilterResult>
    onMetadataRequest(short apiVersion, org.apache.kafka.common.message.RequestHeaderData header, org.apache.kafka.common.message.MetadataRequestData request, io.kroxylicious.proxy.filter.FilterContext context)
     
    CompletionStage<io.kroxylicious.proxy.filter.ResponseFilterResult>
    onMetadataResponse(short apiVersion, org.apache.kafka.common.message.ResponseHeaderData header, org.apache.kafka.common.message.MetadataResponseData response, io.kroxylicious.proxy.filter.FilterContext context)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

    Methods inherited from interface io.kroxylicious.proxy.filter.MetadataRequestFilter

    shouldHandleMetadataRequest

    Methods inherited from interface io.kroxylicious.proxy.filter.MetadataResponseFilter

    shouldHandleMetadataResponse
  • Constructor Details

    • TopicNameCacheFilter

      public TopicNameCacheFilter(CacheConfiguration cacheConfiguration, String clusterName)
    • TopicNameCacheFilter

      @VisibleForTesting public TopicNameCacheFilter(CacheConfiguration cacheConfiguration, Map<org.apache.kafka.common.Uuid,String> topicNames, String clusterName)
      Parameters:
      topicNames - initial topic names to populate the cache with
  • Method Details

    • onMetadataRequest

      public CompletionStage<io.kroxylicious.proxy.filter.RequestFilterResult> onMetadataRequest(short apiVersion, org.apache.kafka.common.message.RequestHeaderData header, org.apache.kafka.common.message.MetadataRequestData request, io.kroxylicious.proxy.filter.FilterContext context)
      Specified by:
      onMetadataRequest in interface io.kroxylicious.proxy.filter.MetadataRequestFilter
    • onMetadataResponse

      public CompletionStage<io.kroxylicious.proxy.filter.ResponseFilterResult> onMetadataResponse(short apiVersion, org.apache.kafka.common.message.ResponseHeaderData header, org.apache.kafka.common.message.MetadataResponseData response, io.kroxylicious.proxy.filter.FilterContext context)
      Specified by:
      onMetadataResponse in interface io.kroxylicious.proxy.filter.MetadataResponseFilter