@Test public void testAuthoritativeRank() throws Exception { ClusteredStore.Provider provider = new ClusteredStore.Provider(); ServiceLocator serviceLocator = dependencySet().with(mock(ClusteringService.class)).build(); provider.start(serviceLocator); assertThat(provider.rankAuthority(ClusteredResourceType.Types.DEDICATED, Collections.<ServiceConfiguration<?>>emptyList()), is(1)); assertThat(provider.rankAuthority(ClusteredResourceType.Types.SHARED, Collections.<ServiceConfiguration<?>>emptyList()), is(1)); assertThat(provider.rankAuthority(new UnmatchedResourceType(), Collections.<ServiceConfiguration<?>>emptyList()), is(0)); }
@Override public <K, V> AuthoritativeTier<K, V> createAuthoritativeTier(Configuration<K, V> storeConfig, ServiceConfiguration<?>... serviceConfigs) { ClusteredStore<K, V> authoritativeTier = createStoreInternal(storeConfig, serviceConfigs); tierOperationStatistics.put(authoritativeTier, new OperationStatistic<?>[] { createTranslatedStatistic(authoritativeTier, "get", TierOperationOutcomes.GET_AND_FAULT_TRANSLATION, "getAndFault"), createTranslatedStatistic(authoritativeTier, "eviction", TierOperationOutcomes.EVICTION_TRANSLATION, "eviction") }); return authoritativeTier; }
try { ServerStoreProxy storeProxy = clusteringService.getServerStoreProxy(cacheIdentifier, storeConfig.getStoreConfig(), storeConfig.getConsistency(), getServerCallback(clusteredStore)); ReconnectingServerStoreProxy reconnectingServerStoreProxy = new ReconnectingServerStoreProxy(storeProxy, () -> { Runnable reconnectTask = () -> { LOGGER.info("Cache {} got disconnected from cluster, reconnecting", cacheId); clusteringService.releaseServerStoreProxy(clusteredStore.storeProxy, true); initStore(clusteredStore); LOGGER.info("Cache {} got reconnected to cluster", cacheId); } finally {
LOGGER.info("Cache {} got disconnected from cluster, reconnecting", cacheId); clusteringService.releaseServerStoreProxy(clusteredStore.storeProxy, true); initStore(clusteredStore); LOGGER.info("Cache {} got reconnected to cluster", cacheId); } finally {
@Override public ClusteredStore.Provider create(final ServiceCreationConfiguration<ClusteredStore.Provider> configuration) { return new ClusteredStore.Provider(); }
@Override public void releaseAuthoritativeTier(AuthoritativeTier<?, ?> resource) { releaseStore(resource); }
@Override public <K, V> AuthoritativeTier<K, V> createAuthoritativeTier(Configuration<K, V> storeConfig, ServiceConfiguration<?>... serviceConfigs) { ClusteredStore<K, V> authoritativeTier = createStoreInternal(storeConfig, serviceConfigs); tierOperationStatistics.put(authoritativeTier, new OperationStatistic<?>[] { createTranslatedStatistic(authoritativeTier, "get", TierOperationOutcomes.GET_AND_FAULT_TRANSLATION, "getAndFault"), createTranslatedStatistic(authoritativeTier, "eviction", TierOperationOutcomes.EVICTION_TRANSLATION, "eviction") }); return authoritativeTier; }
@Override public void initAuthoritativeTier(AuthoritativeTier<?, ?> resource) { initStore(resource); }
@Override public <K, V> ClusteredStore<K, V> createStore(final Configuration<K, V> storeConfig, final ServiceConfiguration<?>... serviceConfigs) { ClusteredStore<K, V> store = createStoreInternal(storeConfig, serviceConfigs); tierOperationStatistics.put(store, new OperationStatistic<?>[] { createTranslatedStatistic(store, "get", TierOperationOutcomes.GET_TRANSLATION, "get"), createTranslatedStatistic(store, "eviction", TierOperationOutcomes.EVICTION_TRANSLATION, "eviction") }); return store; }
ClusteredStore<K, V> store = createStore(storeConfig, codec, resolver, timeSource, storeConfig.useLoaderInAtomics(), serviceConfigs);
@Test public void testRank() throws Exception { ClusteredStore.Provider provider = new ClusteredStore.Provider(); ServiceLocator serviceLocator = dependencySet() .with(new TieredStore.Provider()) .with(new OnHeapStore.Provider()) .with(new OffHeapStore.Provider()) .with(mock(DiskResourceService.class)) .with(new OffHeapDiskStore.Provider()) .with(mock(ClusteringService.class)).build(); provider.start(serviceLocator); assertRank(provider, 1, ClusteredResourceType.Types.DEDICATED); assertRank(provider, 1, ClusteredResourceType.Types.SHARED); assertRank(provider, 0, new UnmatchedResourceType()); }
@Override public void initAuthoritativeTier(AuthoritativeTier<?, ?> resource) { initStore(resource); }
@Override public void releaseAuthoritativeTier(AuthoritativeTier<?, ?> resource) { releaseStore(resource); }
@Override public ClusteredStore.Provider create(final ServiceCreationConfiguration<ClusteredStore.Provider> configuration) { return new ClusteredStore.Provider(); }
@Override public <K, V> ClusteredStore<K, V> createStore(Configuration<K, V> storeConfig, ServiceConfiguration<?>... serviceConfigs) { ClusteredStore<K, V> store = createStoreInternal(storeConfig, serviceConfigs); tierOperationStatistics.put(store, new OperationStatistic<?>[] { createTranslatedStatistic(store, "get", TierOperationOutcomes.GET_TRANSLATION, "get"), createTranslatedStatistic(store, "eviction", TierOperationOutcomes.EVICTION_TRANSLATION, "eviction") }); return store; }
@Override public int rank(Set<ResourceType<?>> resourceTypes, Collection<ServiceConfiguration<?>> serviceConfigs) { int parentRank = super.rank(resourceTypes, serviceConfigs); if (parentRank == 0 || serviceConfigs.stream().noneMatch(CacheLoaderWriterConfiguration.class::isInstance)) { return 0; } return parentRank + 1; }
@Override public int rankAuthority(ResourceType<?> authorityResource, Collection<ServiceConfiguration<?>> serviceConfigs) { int parentRank = super.rankAuthority(authorityResource, serviceConfigs); if (parentRank == 0 || serviceConfigs.stream().noneMatch(CacheLoaderWriterConfiguration.class::isInstance)) { return 0; } return parentRank + 1; } }