blob: a58ff85dfab487f6c075ce4a8c358b8e7ec84b68 [file] [log] [blame]
/*
* 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.internal.processors.cache.local;
import java.util.UUID;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.lang.IgnitePredicate;
import org.apache.ignite.testframework.MvccFeatureChecker;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.junit.Test;
import static org.apache.ignite.cache.CacheMode.LOCAL;
/**
* Isolated nodes LOCAL cache self test.
*/
public class GridCacheLocalIsolatedNodesSelfTest extends GridCommonAbstractTest {
/**
*
*/
public GridCacheLocalIsolatedNodesSelfTest() {
super(false);
}
/** {@inheritDoc} */
@Override protected void beforeTest() throws Exception {
MvccFeatureChecker.skipIfNotSupported(MvccFeatureChecker.Feature.LOCAL_CACHE);
startGrids(3);
}
/** {@inheritDoc} */
@Override protected void afterTest() throws Exception {
stopAllGrids();
}
/**
*
* @throws Exception If test failed.
*/
@Test
public void testIsolatedNodes() throws Exception {
Ignite g1 = grid(0);
UUID nid1 = g1.cluster().localNode().id();
Ignite g2 = grid(1);
UUID nid2 = g2.cluster().localNode().id();
Ignite g3 = grid(2);
UUID nid3 = g3.cluster().localNode().id();
assert !nid1.equals(nid2);
assert !nid1.equals(nid3);
// Local cache on first node only.
CacheConfiguration<String, String> ccfg1 = new CacheConfiguration<>("A1");
ccfg1.setCacheMode(LOCAL);
ccfg1.setNodeFilter(new NodeIdFilter(nid1));
IgniteCache<String, String> c1 = g1.createCache(ccfg1);
c1.put("g1", "c1");
// Local cache on second node only.
CacheConfiguration<String, String> ccfg2 = new CacheConfiguration<>("A2");
ccfg2.setCacheMode(LOCAL);
ccfg2.setNodeFilter(new NodeIdFilter(nid2));
IgniteCache<String, String> c2 = g2.createCache(ccfg2);
c2.put("g2", "c2");
// Local cache on third node only.
CacheConfiguration<String, String> ccfg3 = new CacheConfiguration<>("A3");
ccfg3.setCacheMode(LOCAL);
ccfg3.setNodeFilter(new NodeIdFilter(nid3));
IgniteCache<String, String> c3 = g3.createCache(ccfg3);
c3.put("g3", "c3");
assertNull(c1.get("g2"));
assertNull(c1.get("g3"));
assertNull(c2.get("g1"));
assertNull(c2.get("g3"));
assertNull(c3.get("g1"));
assertNull(c3.get("g2"));
}
/** Filter by node ID. */
private static class NodeIdFilter implements IgnitePredicate<ClusterNode> {
/** */
private final UUID nid;
/**
* @param nid Node ID where cache should be started.
*/
NodeIdFilter(UUID nid) {
this.nid = nid;
}
/** {@inheritDoc} */
@Override public boolean apply(ClusterNode n) {
return n.id().equals(nid);
}
}
}