Uploaded image for project: 'Infinispan'
  1. Infinispan
  2. ISPN-8319

Restore mechanism to manipulate Weigher implementation used by Caffeine

    XMLWordPrintable

Details

    • Enhancement
    • Resolution: Unresolved
    • Major
    • None
    • 9.1.0.Final
    • Eviction
    • None

    Description

      Infinispan 9.1 allows a user to manipulate the Weigher implementation used by Caffeine to by configuring a cache with a custom DataContainer that uses a specific EntrySizeCalculator implementation. However, the DataContainerConfiguration object is deprecated, suggesting that a future release will no longer expose a mechanism for doing this. Such a mechanism is necessary to allow users to exempt specific cache entries (while allowing others) from eviction.

      One proposal is to allow users to specify an EntrySizeCalculator via the MemoryConfigurationBuilder.
      e.g.

      public interface EntrySizeCalculatorProvider {
          <K, V> EntrySizeCalculator<K, V> getEntrySizeCalculator();
      }
      

      MemoryConfigurationBuilder.java:

      public MemoryConfigurationBuilder.entrySizeCalculatorProvider(EntrySizeCalculatorProvider provider) {
         // ...
      }
      

      Additionally, we can reinterpret EvictionType as a specific EntrySizeCalculatorProvider implementation.
      e.g. MemoryConfigurationBuilder.java:

      private static final Map<EvictionType, EntrySizeCalculatorProvider> PROVIDERS = new EnumMap<>(EvictionType.class);
      static {
          PROVIDERS.put(EvictionType.COUNT, new EntrySizeCalculatorProvider() {
              public <K, V> EntrySizeCalculator<K, V> getEntrySizeCalculator() {
                  return (key, value) -> 1L;
              }
          });
          PROVIDERS.put(EvictionType.MEMORY, new EntrySizeCalculatorProvider() {
              public <K, V> EntrySizeCalculator<K, V> getEntrySizeCalculator() {
                  return new WrappedByteArraySizeCalculator<>(new PrimitiveEntrySizeCalculator());
              }
          });
      }
      
      MemoryConfigurationBuilder evictionType(EvictionType type) {
          this.entrySizeCalculatorProvider(PROVIDERS.get(type));
          return this;
      }
      

      Attachments

        Activity

          People

            wburns@redhat.com Will Burns
            pferraro@redhat.com Paul Ferraro
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated: