Search in sources :

Example 41 with CacheStore

use of org.apache.ignite.cache.store.CacheStore in project ignite by apache.

the class GridCacheColocatedDebugTest method clearStores.

/**
 * Clears all stores.
 *
 * @param cnt Grid count.
 */
private void clearStores(int cnt) {
    for (int i = 0; i < cnt; i++) {
        IgniteEx grid = grid(i);
        String cacheName = grid.configuration().getCacheConfiguration()[1].getName();
        GridCacheContext ctx = grid.context().cache().internalCache(cacheName).context();
        CacheStore store = ctx.store().configuredStore();
        ((GridCacheTestStore) store).reset();
    }
}
Also used : GridCacheContext(org.apache.ignite.internal.processors.cache.GridCacheContext) IgniteEx(org.apache.ignite.internal.IgniteEx) CacheStore(org.apache.ignite.cache.store.CacheStore) GridCacheTestStore(org.apache.ignite.internal.processors.cache.GridCacheTestStore)

Example 42 with CacheStore

use of org.apache.ignite.cache.store.CacheStore in project ignite by apache.

the class GridCacheEvictionTouchSelfTest method getConfiguration.

/**
 * {@inheritDoc}
 */
@SuppressWarnings("unchecked")
@Override
protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
    MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.CACHE_STORE);
    IgniteConfiguration c = super.getConfiguration(igniteInstanceName);
    TransactionConfiguration txCfg = c.getTransactionConfiguration();
    txCfg.setDefaultTxConcurrency(PESSIMISTIC);
    txCfg.setDefaultTxIsolation(REPEATABLE_READ);
    CacheConfiguration cc = defaultCacheConfiguration();
    cc.setCacheMode(REPLICATED);
    cc.setWriteSynchronizationMode(FULL_SYNC);
    cc.setEvictionPolicy(plc);
    cc.setOnheapCacheEnabled(true);
    CacheStore store = new GridCacheGenericTestStore<Object, Object>() {

        @Override
        public Object load(Object key) {
            return key;
        }

        @Override
        public Map<Object, Object> loadAll(Iterable<?> keys) {
            Map<Object, Object> loaded = new HashMap<>();
            for (Object key : keys) loaded.put(key, key);
            return loaded;
        }
    };
    cc.setCacheStoreFactory(singletonFactory(store));
    cc.setReadThrough(true);
    cc.setWriteThrough(true);
    cc.setLoadPreviousValue(true);
    c.setCacheConfiguration(cc);
    return c;
}
Also used : TransactionConfiguration(org.apache.ignite.configuration.TransactionConfiguration) GridCacheGenericTestStore(org.apache.ignite.internal.processors.cache.GridCacheGenericTestStore) IgniteConfiguration(org.apache.ignite.configuration.IgniteConfiguration) HashMap(java.util.HashMap) CacheStore(org.apache.ignite.cache.store.CacheStore) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration)

Example 43 with CacheStore

use of org.apache.ignite.cache.store.CacheStore in project gridgain by gridgain.

the class ClientAbstractSelfTest method cacheConfiguration.

/**
 * @param cacheName Cache name.
 * @return Cache configuration.
 * @throws Exception In case of error.
 */
@SuppressWarnings("unchecked")
private static CacheConfiguration cacheConfiguration(@NotNull final String cacheName) throws Exception {
    CacheConfiguration cfg = defaultCacheConfiguration();
    cfg.setCacheMode(DEFAULT_CACHE_NAME.equals(cacheName) || CACHE_NAME.equals(cacheName) ? LOCAL : "replicated".equals(cacheName) ? REPLICATED : PARTITIONED);
    cfg.setName(cacheName);
    cfg.setWriteSynchronizationMode(FULL_SYNC);
    cfg.setCacheStoreFactory(new Factory<CacheStore>() {

        @Override
        public CacheStore create() {
            synchronized (cacheStores) {
                HashMapStore cacheStore = cacheStores.get(cacheName);
                if (cacheStore == null)
                    cacheStores.put(cacheName, cacheStore = new HashMapStore());
                return cacheStore;
            }
        }
    });
    cfg.setWriteThrough(true);
    cfg.setReadThrough(true);
    cfg.setLoadPreviousValue(true);
    if (cfg.getCacheMode() == PARTITIONED)
        cfg.setBackups(1);
    return cfg;
}
Also used : CacheStore(org.apache.ignite.cache.store.CacheStore) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration)

Example 44 with CacheStore

use of org.apache.ignite.cache.store.CacheStore in project gridgain by gridgain.

the class GridCacheStoreManagerAdapter method initialize.

/**
 * {@inheritDoc}
 */
@SuppressWarnings("unchecked")
@Override
public void initialize(@Nullable CacheStore cfgStore, Map sesHolders) throws IgniteCheckedException {
    GridKernalContext ctx = igniteContext();
    CacheConfiguration cfg = cacheConfiguration();
    writeThrough = cfg.isWriteThrough();
    readThrough = cfg.isReadThrough();
    this.cfgStore = cfgStore;
    store = cacheStoreWrapper(ctx, cfgStore, cfg);
    singleThreadGate = store == null ? null : new CacheStoreBalancingWrapper<>(store, cfg.getStoreConcurrentLoadAllThreshold());
    ThreadLocal<SessionData> sesHolder0 = null;
    if (cfgStore != null) {
        sesHolder0 = ((Map<CacheStore, ThreadLocal>) sesHolders).get(cfgStore);
        if (sesHolder0 == null) {
            sesHolder0 = new ThreadLocal<>();
            locSes = new ThreadLocalSession(sesHolder0);
            if (ctx.resource().injectStoreSession(cfgStore, locSes))
                sesHolders.put(cfgStore, sesHolder0);
        } else
            locSes = new ThreadLocalSession(sesHolder0);
    }
    sesHolder = sesHolder0;
    locStore = U.hasAnnotation(cfgStore, CacheLocalStore.class);
    if (cfgStore instanceof CacheJdbcPojoStore)
        alwaysKeepBinary = true;
}
Also used : GridKernalContext(org.apache.ignite.internal.GridKernalContext) CacheStore(org.apache.ignite.cache.store.CacheStore) CacheJdbcPojoStore(org.apache.ignite.cache.store.jdbc.CacheJdbcPojoStore) CacheConfiguration(org.apache.ignite.configuration.CacheConfiguration) CacheStoreBalancingWrapper(org.apache.ignite.internal.processors.cache.CacheStoreBalancingWrapper)

Example 45 with CacheStore

use of org.apache.ignite.cache.store.CacheStore in project gridgain by gridgain.

the class CassandraDirectPersistenceTest method pojoStrategyTransactionTest.

/**
 */
@Test
@SuppressWarnings("unchecked")
public void pojoStrategyTransactionTest() {
    Map<Object, Object> sessionProps = U.newHashMap(1);
    Transaction sessionTx = new TestTransaction();
    CacheStore productStore = CacheStoreHelper.createCacheStore("product", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/product.xml"), CassandraHelper.getAdminDataSrc(), new TestCacheSession("product", sessionTx, sessionProps));
    CacheStore orderStore = CacheStoreHelper.createCacheStore("order", new ClassPathResource("org/apache/ignite/tests/persistence/pojo/order.xml"), CassandraHelper.getAdminDataSrc(), new TestCacheSession("order", sessionTx, sessionProps));
    List<CacheEntryImpl<Long, Product>> productEntries = TestsHelper.generateProductEntries();
    Map<Long, List<CacheEntryImpl<Long, ProductOrder>>> ordersPerProduct = TestsHelper.generateOrdersPerProductEntries(productEntries, 2);
    Collection<Long> productIds = TestsHelper.getProductIds(productEntries);
    Collection<Long> orderIds = TestsHelper.getOrderIds(ordersPerProduct);
    LOGGER.info("Running POJO strategy transaction write tests");
    LOGGER.info("Running single write operation tests");
    CassandraHelper.dropTestKeyspaces();
    Product product = productEntries.iterator().next().getValue();
    ProductOrder order = ordersPerProduct.get(product.getId()).iterator().next().getValue();
    productStore.write(productEntries.iterator().next());
    orderStore.write(ordersPerProduct.get(product.getId()).iterator().next());
    if (productStore.load(product.getId()) != null || orderStore.load(order.getId()) != null) {
        throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra");
    }
    Map<Long, Product> products = (Map<Long, Product>) productStore.loadAll(productIds);
    Map<Long, ProductOrder> orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) {
        throw new RuntimeException("Single write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra");
    }
    // noinspection deprecation
    orderStore.sessionEnd(true);
    // noinspection deprecation
    productStore.sessionEnd(true);
    Product product1 = (Product) productStore.load(product.getId());
    ProductOrder order1 = (ProductOrder) orderStore.load(order.getId());
    if (product1 == null || order1 == null) {
        throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "no objects were persisted into Cassandra");
    }
    if (!product.equals(product1) || !order.equals(order1)) {
        throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "objects were incorrectly persisted/loaded to/from Cassandra");
    }
    products = (Map<Long, Product>) productStore.loadAll(productIds);
    orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) {
        throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "no objects were persisted into Cassandra");
    }
    if (products.size() > 1 || orders.size() > 1) {
        throw new RuntimeException("Single write operation test failed. There were committed more objects " + "into Cassandra than expected");
    }
    product1 = products.entrySet().iterator().next().getValue();
    order1 = orders.entrySet().iterator().next().getValue();
    if (!product.equals(product1) || !order.equals(order1)) {
        throw new RuntimeException("Single write operation test failed. Transaction was committed, but " + "objects were incorrectly persisted/loaded to/from Cassandra");
    }
    LOGGER.info("Single write operation tests passed");
    LOGGER.info("Running bulk write operation tests");
    CassandraHelper.dropTestKeyspaces();
    sessionProps.clear();
    productStore.writeAll(productEntries);
    for (Long productId : ordersPerProduct.keySet()) orderStore.writeAll(ordersPerProduct.get(productId));
    for (Long productId : productIds) {
        if (productStore.load(productId) != null) {
            throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra");
        }
    }
    for (Long orderId : orderIds) {
        if (orderStore.load(orderId) != null) {
            throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra");
        }
    }
    products = (Map<Long, Product>) productStore.loadAll(productIds);
    orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) {
        throw new RuntimeException("Bulk write operation test failed. Transaction wasn't committed yet, but " + "objects were already persisted into Cassandra");
    }
    // noinspection deprecation
    productStore.sessionEnd(true);
    // noinspection deprecation
    orderStore.sessionEnd(true);
    for (CacheEntryImpl<Long, Product> entry : productEntries) {
        product = (Product) productStore.load(entry.getKey());
        if (!entry.getValue().equals(product)) {
            throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "not all objects were persisted into Cassandra");
        }
    }
    for (Long productId : ordersPerProduct.keySet()) {
        for (CacheEntryImpl<Long, ProductOrder> entry : ordersPerProduct.get(productId)) {
            order = (ProductOrder) orderStore.load(entry.getKey());
            if (!entry.getValue().equals(order)) {
                throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "not all objects were persisted into Cassandra");
            }
        }
    }
    products = (Map<Long, Product>) productStore.loadAll(productIds);
    orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) {
        throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "no objects were persisted into Cassandra");
    }
    if (products.size() < productIds.size() || orders.size() < orderIds.size()) {
        throw new RuntimeException("Bulk write operation test failed. There were committed less objects " + "into Cassandra than expected");
    }
    if (products.size() > productIds.size() || orders.size() > orderIds.size()) {
        throw new RuntimeException("Bulk write operation test failed. There were committed more objects " + "into Cassandra than expected");
    }
    for (CacheEntryImpl<Long, Product> entry : productEntries) {
        product = products.get(entry.getKey());
        if (!entry.getValue().equals(product)) {
            throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "some objects were incorrectly persisted/loaded to/from Cassandra");
        }
    }
    for (Long productId : ordersPerProduct.keySet()) {
        for (CacheEntryImpl<Long, ProductOrder> entry : ordersPerProduct.get(productId)) {
            order = orders.get(entry.getKey());
            if (!entry.getValue().equals(order)) {
                throw new RuntimeException("Bulk write operation test failed. Transaction was committed, but " + "some objects were incorrectly persisted/loaded to/from Cassandra");
            }
        }
    }
    LOGGER.info("Bulk write operation tests passed");
    LOGGER.info("POJO strategy transaction write tests passed");
    LOGGER.info("Running POJO strategy transaction delete tests");
    LOGGER.info("Running single delete tests");
    sessionProps.clear();
    Product deletedProduct = productEntries.remove(0).getValue();
    ProductOrder deletedOrder = ordersPerProduct.get(deletedProduct.getId()).remove(0).getValue();
    productStore.delete(deletedProduct.getId());
    orderStore.delete(deletedOrder.getId());
    if (productStore.load(deletedProduct.getId()) == null || orderStore.load(deletedOrder.getId()) == null) {
        throw new RuntimeException("Single delete operation test failed. Transaction wasn't committed yet, but " + "objects were already deleted from Cassandra");
    }
    products = (Map<Long, Product>) productStore.loadAll(productIds);
    orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if (products.size() != productIds.size() || orders.size() != orderIds.size()) {
        throw new RuntimeException("Single delete operation test failed. Transaction wasn't committed yet, but " + "objects were already deleted from Cassandra");
    }
    // noinspection deprecation
    productStore.sessionEnd(true);
    // noinspection deprecation
    orderStore.sessionEnd(true);
    if (productStore.load(deletedProduct.getId()) != null || orderStore.load(deletedOrder.getId()) != null) {
        throw new RuntimeException("Single delete operation test failed. Transaction was committed, but " + "objects were not deleted from Cassandra");
    }
    products = (Map<Long, Product>) productStore.loadAll(productIds);
    orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if (products.get(deletedProduct.getId()) != null || orders.get(deletedOrder.getId()) != null) {
        throw new RuntimeException("Single delete operation test failed. Transaction was committed, but " + "objects were not deleted from Cassandra");
    }
    LOGGER.info("Single delete tests passed");
    LOGGER.info("Running bulk delete tests");
    sessionProps.clear();
    productStore.deleteAll(productIds);
    orderStore.deleteAll(orderIds);
    products = (Map<Long, Product>) productStore.loadAll(productIds);
    orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if (products == null || products.isEmpty() || orders == null || orders.isEmpty()) {
        throw new RuntimeException("Bulk delete operation test failed. Transaction wasn't committed yet, but " + "objects were already deleted from Cassandra");
    }
    // noinspection deprecation
    orderStore.sessionEnd(true);
    // noinspection deprecation
    productStore.sessionEnd(true);
    products = (Map<Long, Product>) productStore.loadAll(productIds);
    orders = (Map<Long, ProductOrder>) orderStore.loadAll(orderIds);
    if ((products != null && !products.isEmpty()) || (orders != null && !orders.isEmpty())) {
        throw new RuntimeException("Bulk delete operation test failed. Transaction was committed, but " + "objects were not deleted from Cassandra");
    }
    LOGGER.info("Bulk delete tests passed");
    LOGGER.info("POJO strategy transaction delete tests passed");
}
Also used : TestCacheSession(org.apache.ignite.tests.utils.TestCacheSession) TestTransaction(org.apache.ignite.tests.utils.TestTransaction) Product(org.apache.ignite.tests.pojos.Product) ClassPathResource(org.springframework.core.io.ClassPathResource) CacheEntryImpl(org.apache.ignite.internal.processors.cache.CacheEntryImpl) Transaction(org.apache.ignite.transactions.Transaction) TestTransaction(org.apache.ignite.tests.utils.TestTransaction) List(java.util.List) CacheStore(org.apache.ignite.cache.store.CacheStore) Map(java.util.Map) ProductOrder(org.apache.ignite.tests.pojos.ProductOrder) Test(org.junit.Test)

Aggregations

CacheStore (org.apache.ignite.cache.store.CacheStore)52 CacheConfiguration (org.apache.ignite.configuration.CacheConfiguration)23 IgniteConfiguration (org.apache.ignite.configuration.IgniteConfiguration)14 Test (org.junit.Test)14 ClassPathResource (org.springframework.core.io.ClassPathResource)14 Map (java.util.Map)12 CacheEntryImpl (org.apache.ignite.internal.processors.cache.CacheEntryImpl)12 NearCacheConfiguration (org.apache.ignite.configuration.NearCacheConfiguration)11 SimplePerson (org.apache.ignite.tests.pojos.SimplePerson)8 Ignite (org.apache.ignite.Ignite)6 GridCacheContext (org.apache.ignite.internal.processors.cache.GridCacheContext)6 Person (org.apache.ignite.tests.pojos.Person)6 Product (org.apache.ignite.tests.pojos.Product)6 ProductOrder (org.apache.ignite.tests.pojos.ProductOrder)6 CacheStoreManager (org.apache.ignite.internal.processors.cache.store.CacheStoreManager)5 ArrayList (java.util.ArrayList)4 GridCacheTestStore (org.apache.ignite.internal.processors.cache.GridCacheTestStore)4 CacheDataStructuresManager (org.apache.ignite.internal.processors.cache.datastructures.CacheDataStructuresManager)4 GridDhtCache (org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCache)4 GridDhtCacheAdapter (org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtCacheAdapter)4