Search in sources :

Example 1 with LockWatchValueScopingCache

use of com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache in project atlasdb by palantir.

the class LockWatchManagerImpl method create.

public static LockWatchManagerInternal create(MetricsManager metricsManager, Set<Schema> schemas, LockWatchStarter lockWatchingService, LockWatchCachingConfig config) {
    Set<LockWatchReference> referencesFromSchema = schemas.stream().map(Schema::getLockWatches).flatMap(Set::stream).collect(Collectors.toSet());
    Set<TableReference> watchedTablesFromSchema = referencesFromSchema.stream().map(schema -> schema.accept(LockWatchReferencesVisitor.INSTANCE)).collect(Collectors.toSet());
    CacheMetrics metrics = CacheMetrics.create(metricsManager);
    LockWatchEventCache eventCache = LockWatchEventCacheImpl.create(metrics);
    LockWatchValueScopingCache valueCache = LockWatchValueScopingCacheImpl.create(eventCache, metrics, config.cacheSize(), config.validationProbability(), watchedTablesFromSchema);
    return new LockWatchManagerImpl(referencesFromSchema, eventCache, valueCache, lockWatchingService);
}
Also used : SafeLoggerFactory(com.palantir.logsafe.logger.SafeLoggerFactory) ScheduledFuture(java.util.concurrent.ScheduledFuture) LockWatchRequest(com.palantir.atlasdb.timelock.api.LockWatchRequest) CommitUpdate(com.palantir.lock.watch.CommitUpdate) SafeLogger(com.palantir.logsafe.logger.SafeLogger) MetricsManager(com.palantir.atlasdb.util.MetricsManager) LockWatchEventCache(com.palantir.lock.watch.LockWatchEventCache) PTExecutors(com.palantir.common.concurrent.PTExecutors) LockWatchCache(com.palantir.lock.watch.LockWatchCache) TransactionsLockWatchUpdate(com.palantir.lock.watch.TransactionsLockWatchUpdate) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) LockWatchReference(com.palantir.lock.watch.LockWatchReferences.LockWatchReference) LockWatchValueScopingCacheImpl(com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCacheImpl) LockWatchValueScopingCache(com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache) LockWatchVersion(com.palantir.lock.watch.LockWatchVersion) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) Set(java.util.Set) Collectors(java.util.stream.Collectors) LockWatchReferences(com.palantir.lock.watch.LockWatchReferences) TimeUnit(java.util.concurrent.TimeUnit) TransactionScopedCache(com.palantir.atlasdb.keyvalue.api.cache.TransactionScopedCache) LockWatchCachingConfig(com.palantir.atlasdb.keyvalue.api.LockWatchCachingConfig) UnsafeArg(com.palantir.logsafe.UnsafeArg) CacheMetrics(com.palantir.atlasdb.keyvalue.api.cache.CacheMetrics) LockWatchReferencesVisitor(com.palantir.lock.watch.LockWatchReferencesVisitor) LockWatchCacheImpl(com.palantir.lock.watch.LockWatchCacheImpl) Optional(java.util.Optional) VisibleForTesting(com.google.common.annotations.VisibleForTesting) LockWatchStarter(com.palantir.lock.client.LockWatchStarter) Schema(com.palantir.atlasdb.table.description.Schema) CacheMetrics(com.palantir.atlasdb.keyvalue.api.cache.CacheMetrics) TableReference(com.palantir.atlasdb.keyvalue.api.TableReference) LockWatchEventCache(com.palantir.lock.watch.LockWatchEventCache) Schema(com.palantir.atlasdb.table.description.Schema) LockWatchReference(com.palantir.lock.watch.LockWatchReferences.LockWatchReference) LockWatchValueScopingCache(com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache)

Example 2 with LockWatchValueScopingCache

use of com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache in project atlasdb by palantir.

the class ResilientLockWatchProxyTest method valueCacheProxyAlsoFallsBackOnException.

@Test
public void valueCacheProxyAlsoFallsBackOnException() {
    LockWatchValueScopingCache defaultCache = mock(LockWatchValueScopingCache.class);
    LockWatchValueScopingCache fallbackCache = mock(LockWatchValueScopingCache.class);
    ResilientLockWatchProxy<LockWatchValueScopingCache> proxyFactory = ResilientLockWatchProxy.newValueCacheProxyFactory(fallbackCache, metrics);
    proxyFactory.setDelegate(defaultCache);
    LockWatchValueScopingCache proxyCache = proxyFactory.newValueCacheProxy();
    // Normal operation
    long timestamp = 1L;
    Set<Long> timestamps = ImmutableSet.of(timestamp);
    proxyCache.updateCacheWithCommitTimestampsInformation(timestamps);
    verify(defaultCache).updateCacheWithCommitTimestampsInformation(timestamps);
    verify(fallbackCache, never()).updateCacheWithCommitTimestampsInformation(any());
    // Failure
    when(defaultCache.getTransactionScopedCache(timestamp)).thenThrow(new TransactionFailedNonRetriableException(""));
    assertThatThrownBy(() -> proxyCache.getTransactionScopedCache(timestamp)).isExactlyInstanceOf(TransactionLockWatchFailedException.class);
    verify(defaultCache).getTransactionScopedCache(timestamp);
    // Fallback operation
    proxyCache.processStartTransactions(timestamps);
    verify(fallbackCache).processStartTransactions(timestamps);
    verifyNoMoreInteractions(defaultCache);
    verifyNoMoreInteractions(fallbackCache);
}
Also used : ArgumentMatchers.anyLong(org.mockito.ArgumentMatchers.anyLong) TransactionFailedNonRetriableException(com.palantir.atlasdb.transaction.api.TransactionFailedNonRetriableException) LockWatchValueScopingCache(com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache) Test(org.junit.Test)

Example 3 with LockWatchValueScopingCache

use of com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache in project atlasdb by palantir.

the class ResilientLockWatchProxyTest method valueCacheProxyThrowsIfDelegateNotSet.

@Test
public void valueCacheProxyThrowsIfDelegateNotSet() {
    LockWatchValueScopingCache fallbackCache = mock(LockWatchValueScopingCache.class);
    ResilientLockWatchProxy<LockWatchValueScopingCache> proxyFactory = ResilientLockWatchProxy.newValueCacheProxyFactory(fallbackCache, metrics);
    assertThatThrownBy(proxyFactory::newValueCacheProxy).isExactlyInstanceOf(SafeNullPointerException.class).hasMessage("Delegate cache must be set before creating proxy");
}
Also used : SafeNullPointerException(com.palantir.logsafe.exceptions.SafeNullPointerException) LockWatchValueScopingCache(com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache) Test(org.junit.Test)

Aggregations

LockWatchValueScopingCache (com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCache)3 Test (org.junit.Test)2 VisibleForTesting (com.google.common.annotations.VisibleForTesting)1 LockWatchCachingConfig (com.palantir.atlasdb.keyvalue.api.LockWatchCachingConfig)1 TableReference (com.palantir.atlasdb.keyvalue.api.TableReference)1 CacheMetrics (com.palantir.atlasdb.keyvalue.api.cache.CacheMetrics)1 LockWatchValueScopingCacheImpl (com.palantir.atlasdb.keyvalue.api.cache.LockWatchValueScopingCacheImpl)1 TransactionScopedCache (com.palantir.atlasdb.keyvalue.api.cache.TransactionScopedCache)1 Schema (com.palantir.atlasdb.table.description.Schema)1 LockWatchRequest (com.palantir.atlasdb.timelock.api.LockWatchRequest)1 TransactionFailedNonRetriableException (com.palantir.atlasdb.transaction.api.TransactionFailedNonRetriableException)1 MetricsManager (com.palantir.atlasdb.util.MetricsManager)1 PTExecutors (com.palantir.common.concurrent.PTExecutors)1 LockWatchStarter (com.palantir.lock.client.LockWatchStarter)1 CommitUpdate (com.palantir.lock.watch.CommitUpdate)1 LockWatchCache (com.palantir.lock.watch.LockWatchCache)1 LockWatchCacheImpl (com.palantir.lock.watch.LockWatchCacheImpl)1 LockWatchEventCache (com.palantir.lock.watch.LockWatchEventCache)1 LockWatchReferences (com.palantir.lock.watch.LockWatchReferences)1 LockWatchReference (com.palantir.lock.watch.LockWatchReferences.LockWatchReference)1