/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.ignite.testframework.configvariations; import java.util.Collection; import javax.cache.Cache; import javax.cache.configuration.CacheEntryListenerConfiguration; import javax.cache.configuration.Factory; import javax.cache.configuration.MutableCacheEntryListenerConfiguration; import javax.cache.event.CacheEntryCreatedListener; import javax.cache.event.CacheEntryEventFilter; import javax.cache.event.CacheEntryListener; import javax.cache.event.CacheEntryListenerException; import org.apache.ignite.cache.CacheAtomicityMode; import org.apache.ignite.cache.CacheInterceptorAdapter; import org.apache.ignite.cache.CacheMode; import org.apache.ignite.cache.CacheRebalanceMode; import org.apache.ignite.cache.CacheWriteSynchronizationMode; import org.apache.ignite.cache.eviction.EvictionFilter; import org.apache.ignite.cache.eviction.fifo.FifoEvictionPolicy; import org.apache.ignite.cache.store.CacheStoreSession; import org.apache.ignite.cache.store.CacheStoreSessionListener; import org.apache.ignite.cluster.ClusterNode; import org.apache.ignite.configuration.CacheConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.NearCacheConfiguration; import org.apache.ignite.configuration.TopologyValidator; import org.apache.ignite.internal.binary.BinaryMarshaller; import org.apache.ignite.internal.processors.cache.MapCacheStoreStrategy; import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller; import static org.apache.ignite.internal.util.lang.GridFunc.asArray; /** * Cache configuration variations. */ @SuppressWarnings("serial") public class ConfigVariations { /** */ private static final ConfigParameter<Object> EVICTION_PARAM = Parameters.complexParameter( Parameters.parameter("setEvictionPolicy", Parameters.factory(FifoEvictionPolicy.class)), Parameters.parameter("setEvictionFilter", Parameters.factory(NoopEvictionFilter.class)) ); /** */ private static final ConfigParameter<Object> CACHE_STORE_PARAM = Parameters.complexParameter( Parameters.parameter("setCacheStoreFactory", Parameters.factory(MapCacheStoreStrategy.MapStoreFactory.class)), Parameters.parameter("setReadThrough", true), Parameters.parameter("setWriteThrough", true), Parameters.parameter("setCacheStoreSessionListenerFactories", noopCacheStoreSessionListenerFactory()) ); /** */ private static final ConfigParameter<Object> SIMPLE_CACHE_STORE_PARAM = Parameters.complexParameter( Parameters.parameter("setCacheStoreFactory", Parameters.factory(MapCacheStoreStrategy.MapStoreFactory.class)), Parameters.parameter("setReadThrough", true), Parameters.parameter("setWriteThrough", true) ); /** */ private static final ConfigParameter<Object> REBALANCING_PARAM = Parameters.complexParameter( Parameters.parameter("setRebalanceBatchSize", 2028 * 1024), Parameters.parameter("setRebalanceBatchesPrefetchCount", 5L), Parameters.parameter("setRebalanceThreadPoolSize", 5), Parameters.parameter("setRebalanceTimeout", CacheConfiguration.DFLT_REBALANCE_TIMEOUT * 2), Parameters.parameter("setRebalanceDelay", 1000L) ); /** */ @SuppressWarnings("unchecked") private static final ConfigParameter<IgniteConfiguration>[][] BASIC_IGNITE_SET = new ConfigParameter[][] { Parameters.objectParameters("setMarshaller", Parameters.factory(BinaryMarshaller.class), optimizedMarshallerFactory()), Parameters.booleanParameters("setPeerClassLoadingEnabled"), }; /** */ @SuppressWarnings("unchecked") private static final ConfigParameter<CacheConfiguration>[][] BASIC_CACHE_SET = new ConfigParameter[][] { Parameters.objectParameters("setCacheMode", CacheMode.REPLICATED, CacheMode.PARTITIONED), Parameters.enumParameters("setAtomicityMode", CacheAtomicityMode.class), // Set default parameters. Parameters.objectParameters("setLoadPreviousValue", true), asArray(SIMPLE_CACHE_STORE_PARAM), Parameters.objectParameters("setWriteSynchronizationMode", CacheWriteSynchronizationMode.FULL_SYNC), Parameters.booleanParameters("setOnheapCacheEnabled") }; /** */ @SuppressWarnings("unchecked") private static final ConfigParameter<CacheConfiguration>[][] FULL_CACHE_SET = new ConfigParameter[][] { Parameters.enumParameters("setCacheMode", CacheMode.class), Parameters.enumParameters("setAtomicityMode", CacheAtomicityMode.class), Parameters.booleanParameters("setLoadPreviousValue"), Parameters.booleanParameters("setReadFromBackup"), Parameters.booleanParameters("setStoreKeepBinary"), Parameters.objectParameters("setRebalanceMode", CacheRebalanceMode.SYNC, CacheRebalanceMode.ASYNC), Parameters.booleanParameters("setCopyOnRead"), Parameters.objectParameters(true, "setNearConfiguration", nearCacheConfigurationFactory()), asArray(null, Parameters.complexParameter( EVICTION_PARAM, CACHE_STORE_PARAM, REBALANCING_PARAM, Parameters.parameter("setInterceptor", Parameters.factory(NoopInterceptor.class)), Parameters.parameter("setTopologyValidator", Parameters.factory(NoopTopologyValidator.class)), Parameters.parameter("addCacheEntryListenerConfiguration", Parameters.factory(EmptyCacheEntryListenerConfiguration.class)) ) ), // Set default parameters. Parameters.objectParameters("setWriteSynchronizationMode", CacheWriteSynchronizationMode.FULL_SYNC), Parameters.booleanParameters("setOnheapCacheEnabled") }; /** * Private constructor. */ private ConfigVariations() { // No-op. } /** * @return Custom near cache config. */ private static Factory nearCacheConfigurationFactory() { return new Factory() { @Override public Object create() { NearCacheConfiguration cfg = new NearCacheConfiguration<>(); cfg.setNearEvictionPolicy(new FifoEvictionPolicy()); return cfg; } }; } /** * @return Noop cache store session listener factory. */ private static Factory noopCacheStoreSessionListenerFactory() { return new Factory() { @Override public Object create() { return new Factory[] {new NoopCacheStoreSessionListenerFactory()}; } }; } /** * @return Default matrix of availiable variations. */ public static ConfigParameter<CacheConfiguration>[][] cacheBasicSet() { return BASIC_CACHE_SET; } /** * @return Full matrix of availiable variations. */ public static ConfigParameter<CacheConfiguration>[][] cacheFullSet() { return FULL_CACHE_SET; } /** * @return Default matrix of availiable variations. */ public static ConfigParameter<IgniteConfiguration>[][] igniteBasicSet() { return BASIC_IGNITE_SET; } /** * @return Marshaller. */ public static Factory<OptimizedMarshaller> optimizedMarshallerFactory() { return new Factory<OptimizedMarshaller>() { @Override public OptimizedMarshaller create() { OptimizedMarshaller marsh = new OptimizedMarshaller(true); marsh.setRequireSerializable(false); return marsh; } }; } /** * */ public static class NoopEvictionFilter implements EvictionFilter { /** */ private static final long serialVersionUID = 0; /** {@inheritDoc} */ @Override public boolean evictAllowed(Cache.Entry entry) { return true; } } /** * */ public static class NoopInterceptor extends CacheInterceptorAdapter { /** */ private static final long serialVersionUID = 0L; // No-op. } /** * */ public static class NoopCacheStoreSessionListenerFactory implements Factory<NoopCacheStoreSessionListener> { /** Serial version uid. */ private static final long serialVersionUID = 0L; /** {@inheritDoc} */ @Override public NoopCacheStoreSessionListener create() { return new NoopCacheStoreSessionListener(); } } /** * */ public static class NoopCacheStoreSessionListener implements CacheStoreSessionListener { /** {@inheritDoc} */ @Override public void onSessionStart(CacheStoreSession ses) { // No-op. } /** {@inheritDoc} */ @Override public void onSessionEnd(CacheStoreSession ses, boolean commit) { // No-op. } } /** * */ public static class NoopTopologyValidator implements TopologyValidator { /** */ private static final long serialVersionUID = 0L; /** {@inheritDoc} */ @Override public boolean validate(Collection<ClusterNode> nodes) { return true; } } /** * */ @SuppressWarnings({"serial", "unchecked"}) public static class EmptyCacheEntryListenerConfiguration extends MutableCacheEntryListenerConfiguration { /** * */ public EmptyCacheEntryListenerConfiguration() { super(new NoopCacheEntryListenerConfiguration()); } } /** * */ @SuppressWarnings("serial") public static class NoopCacheEntryListenerConfiguration implements CacheEntryListenerConfiguration { /** {@inheritDoc} */ @Override public Factory<CacheEntryListener> getCacheEntryListenerFactory() { return new Factory<CacheEntryListener>() { @Override public CacheEntryListener create() { return new NoopCacheEntryListener(); } }; } /** {@inheritDoc} */ @Override public boolean isOldValueRequired() { return false; } /** {@inheritDoc} */ @Override public Factory<CacheEntryEventFilter> getCacheEntryEventFilterFactory() { return null; } /** {@inheritDoc} */ @Override public boolean isSynchronous() { return false; } } /** * */ public static class NoopCacheEntryListener implements CacheEntryCreatedListener { /** {@inheritDoc} */ @Override public void onCreated(Iterable iterable) throws CacheEntryListenerException { // No-op. } } }