use of org.apache.geode.cache.PartitionAttributesFactory in project geode by apache.
the class PartitionedRegionEvictionDUnitTest method testEntryLRUDeadlock.
/**
* Test that gets do not need to acquire a lock on the region entry when LRU is enabled. This is
* bug 42265
*/
@Test
public void testEntryLRUDeadlock() {
final Host host = Host.getHost(0);
final VM vm0 = host.getVM(0);
final VM vm1 = host.getVM(1);
final String uniqName = getUniqueName();
final int redundantCopies = 0;
final int maxBuckets = 8;
final int maxEntries = 16;
final String name = uniqName + "-PR";
final int extraEntries = 4;
// final int heapPercentage = 66;
// final int evictorInterval = 100;
final SerializableRunnable create = new CacheSerializableRunnable("Create Entry LRU with local destroy on a partitioned Region") {
public void run2() {
final AttributesFactory factory = new AttributesFactory();
factory.setOffHeap(isOffHeap());
factory.setPartitionAttributes(new PartitionAttributesFactory().setRedundantCopies(redundantCopies).setTotalNumBuckets(maxBuckets).create());
factory.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(maxEntries, EvictionAction.LOCAL_DESTROY));
final PartitionedRegion pr = (PartitionedRegion) createRootRegion(name, factory.create());
assertNotNull(pr);
}
};
vm0.invoke(create);
final SerializableRunnable create2 = new SerializableRunnable("Create Entry LRU with local destroy on a partitioned Region") {
public void run() {
try {
final AttributesFactory factory = new AttributesFactory();
factory.setOffHeap(isOffHeap());
factory.setPartitionAttributes(new PartitionAttributesFactory().setRedundantCopies(redundantCopies).setLocalMaxMemory(0).setTotalNumBuckets(maxBuckets).create());
factory.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(maxEntries));
factory.setSubscriptionAttributes(new SubscriptionAttributes(InterestPolicy.ALL));
// this listener will cause a deadlock if the get ends up
// locking the entry.
factory.addCacheListener(new CacheListenerAdapter() {
@Override
public void afterCreate(EntryEvent event) {
Region region = event.getRegion();
Object key = event.getKey();
region.get(key);
}
});
final PartitionedRegion pr = (PartitionedRegion) createRootRegion(name, factory.create());
assertNotNull(pr);
} catch (final CacheException ex) {
Assert.fail("While creating Partitioned region", ex);
}
}
};
vm1.invoke(create2);
final SerializableRunnable doPuts = new SerializableRunnable("Do Puts") {
public void run() {
final PartitionedRegion pr = (PartitionedRegion) getRootRegion(name);
assertNotNull(pr);
for (int counter = 0; counter <= maxEntries + extraEntries; counter++) {
pr.put(new Integer(counter), "value");
}
}
};
vm0.invoke(doPuts);
}
use of org.apache.geode.cache.PartitionAttributesFactory in project geode by apache.
the class PartitionedRegionHADUnitTest method createRegionAttributesForPR.
/**
* This private methods sets the passed attributes and returns RegionAttribute object, which is
* used in create region
*
* @param redundancy
* @param localMaxMem
*
* @return
*/
protected RegionAttributes createRegionAttributesForPR(int redundancy, int localMaxMem) {
AttributesFactory attr = new AttributesFactory();
PartitionAttributesFactory paf = new PartitionAttributesFactory();
PartitionAttributes prAttr = paf.setRedundantCopies(redundancy).setLocalMaxMemory(localMaxMem).setTotalNumBuckets(totalNumBuckets).create();
attr.setPartitionAttributes(prAttr);
return attr.create();
}
use of org.apache.geode.cache.PartitionAttributesFactory in project geode by apache.
the class LDSRoutingObject method createPR.
public static void createPR(String partitionedRegionName, Integer redundancy, Integer localMaxMemory, Integer totalNumBuckets, String colocatedWith) {
PartitionAttributesFactory paf = new PartitionAttributesFactory();
PartitionAttributes prAttr = paf.setRedundantCopies(redundancy.intValue()).setLocalMaxMemory(localMaxMemory.intValue()).setTotalNumBuckets(totalNumBuckets.intValue()).setColocatedWith(colocatedWith).setPartitionResolver(new LDSPartitionResolver()).create();
AttributesFactory attr = new AttributesFactory();
attr.setPartitionAttributes(prAttr);
assertNotNull(basicGetCache());
if (partitionedRegionName.equals("CustomerPR")) {
customerPR = basicGetCache().createRegion(partitionedRegionName, attr.create());
assertNotNull(customerPR);
LogWriterUtils.getLogWriter().info("Partitioned Region " + partitionedRegionName + " created Successfully :" + customerPR);
}
if (partitionedRegionName.equals("OrderPR")) {
orderPR = basicGetCache().createRegion(partitionedRegionName, attr.create());
assertNotNull(orderPR);
LogWriterUtils.getLogWriter().info("Partitioned Region " + partitionedRegionName + " created Successfully :" + orderPR);
}
if (partitionedRegionName.equals("ShipmentPR")) {
shipmentPR = basicGetCache().createRegion(partitionedRegionName, attr.create());
assertNotNull(shipmentPR);
LogWriterUtils.getLogWriter().info("Partitioned Region " + partitionedRegionName + " created Successfully :" + shipmentPR);
}
}
use of org.apache.geode.cache.PartitionAttributesFactory in project geode by apache.
the class RegionValue method testLocalDataSetIndexing.
@Test
public void testLocalDataSetIndexing() {
final CacheSerializableRunnable createPRs = new CacheSerializableRunnable("create prs ") {
public void run2() {
AttributesFactory<Integer, RegionValue> factory = new AttributesFactory<Integer, RegionValue>();
factory.setPartitionAttributes(new PartitionAttributesFactory<Integer, RegionValue>().setRedundantCopies(1).setTotalNumBuckets(8).create());
final PartitionedRegion pr1 = (PartitionedRegion) createRootRegion("pr1", factory.create());
factory = new AttributesFactory<Integer, RegionValue>();
factory.setPartitionAttributes(new PartitionAttributesFactory<Integer, RegionValue>().setRedundantCopies(1).setTotalNumBuckets(8).setColocatedWith(pr1.getName()).create());
final PartitionedRegion pr2 = (PartitionedRegion) createRootRegion("pr2", factory.create());
}
};
final CacheSerializableRunnable createIndexesOnPRs = new CacheSerializableRunnable("create prs ") {
public void run2() {
try {
QueryService qs = getCache().getQueryService();
qs.createIndex("valueIndex1", IndexType.FUNCTIONAL, "e1.value", "/pr1 e1");
qs.createIndex("valueIndex2", IndexType.FUNCTIONAL, "e2.value", "/pr2 e2");
} catch (Exception e) {
org.apache.geode.test.dunit.Assert.fail("Test failed due to Exception in index creation ", e);
}
}
};
final CacheSerializableRunnable execute = new CacheSerializableRunnable("execute function") {
public void run2() {
final PartitionedRegion pr1 = (PartitionedRegion) getRootRegion("pr1");
final PartitionedRegion pr2 = (PartitionedRegion) getRootRegion("pr2");
final Set<Integer> filter = new HashSet<Integer>();
for (int i = 1; i <= 80; i++) {
pr1.put(i, new RegionValue(i));
if (i <= 20) {
pr2.put(i, new RegionValue(i));
if ((i % 5) == 0) {
filter.add(i);
}
}
}
ArrayList<List> result = (ArrayList<List>) FunctionService.onRegion(pr1).withFilter(filter).execute(new FunctionAdapter() {
public void execute(FunctionContext context) {
try {
RegionFunctionContext rContext = (RegionFunctionContext) context;
Region pr1 = rContext.getDataSet();
LocalDataSet localCust = (LocalDataSet) PartitionRegionHelper.getLocalDataForContext(rContext);
Map<String, Region<?, ?>> colocatedRegions = PartitionRegionHelper.getColocatedRegions(pr1);
Map<String, Region<?, ?>> localColocatedRegions = PartitionRegionHelper.getLocalColocatedRegions(rContext);
Region pr2 = colocatedRegions.get("/pr2");
LocalDataSet localOrd = (LocalDataSet) localColocatedRegions.get("/pr2");
QueryObserverImpl observer = new QueryObserverImpl();
QueryObserverHolder.setInstance(observer);
QueryService qs = pr1.getCache().getQueryService();
DefaultQuery query = (DefaultQuery) qs.newQuery("select distinct e1.value from /pr1 e1, /pr2 e2 where e1.value=e2.value");
GemFireCacheImpl.getInstance().getLogger().fine(" Num BUCKET SET: " + localCust.getBucketSet());
GemFireCacheImpl.getInstance().getLogger().fine("VALUES FROM PR1 bucket:");
for (Integer bId : localCust.getBucketSet()) {
BucketRegion br = ((PartitionedRegion) pr1).getDataStore().getLocalBucketById(bId);
String val = "";
for (Object e : br.values()) {
val += (e + ",");
}
GemFireCacheImpl.getInstance().getLogger().fine(": " + val);
}
GemFireCacheImpl.getInstance().getLogger().fine("VALUES FROM PR2 bucket:");
for (Integer bId : localCust.getBucketSet()) {
BucketRegion br = ((PartitionedRegion) pr2).getDataStore().getLocalBucketById(bId);
String val = "";
for (Object e : br.values()) {
val += (e + ",");
}
GemFireCacheImpl.getInstance().getLogger().fine(": " + val);
}
SelectResults r = (SelectResults) localCust.executeQuery(query, null, localCust.getBucketSet());
GemFireCacheImpl.getInstance().getLogger().fine("Result :" + r.asList());
Assert.assertTrue(observer.isIndexesUsed);
pr1.getCache().getLogger().fine("Index Used: " + observer.numIndexesUsed());
Assert.assertTrue(2 == observer.numIndexesUsed());
context.getResultSender().lastResult((Serializable) r.asList());
} catch (Exception e) {
context.getResultSender().lastResult(Boolean.TRUE);
}
}
@Override
public String getId() {
return "ok";
}
@Override
public boolean optimizeForWrite() {
return false;
}
}).getResult();
int numResults = 0;
for (List oneNodeResult : result) {
GemFireCacheImpl.getInstance().getLogger().fine("Result :" + numResults + " oneNodeResult.size(): " + oneNodeResult.size() + " oneNodeResult :" + oneNodeResult);
numResults = +oneNodeResult.size();
}
Assert.assertTrue(10 == numResults);
}
};
dataStore1.invoke(createPRs);
dataStore2.invoke(createPRs);
dataStore1.invoke(createIndexesOnPRs);
dataStore1.invoke(execute);
}
use of org.apache.geode.cache.PartitionAttributesFactory in project geode by apache.
the class MultiRegionFunctionExecutionDUnitTest method createRegionsOnUnitControllerVm.
@SuppressWarnings("unchecked")
public static void createRegionsOnUnitControllerVm() {
new MultiRegionFunctionExecutionDUnitTest().createCache();
PartitionAttributesFactory pf = new PartitionAttributesFactory();
pf.setTotalNumBuckets(12);
pf.setRedundantCopies(1);
AttributesFactory factory = new AttributesFactory();
factory.setPartitionAttributes(pf.create());
PR1 = cache.createRegion("PR1", factory.create());
pf = new PartitionAttributesFactory();
pf.setTotalNumBuckets(12);
pf.setRedundantCopies(1);
pf.setLocalMaxMemory(0);
factory = new AttributesFactory();
factory.setPartitionAttributes(pf.create());
PR2 = cache.createRegion("PR2", factory.create());
factory = new AttributesFactory();
factory.setDataPolicy(DataPolicy.REPLICATE);
RR1 = cache.createRegion("RR1", factory.create());
factory = new AttributesFactory();
factory.setDataPolicy(DataPolicy.EMPTY);
RR2 = cache.createRegion("RR2", factory.create());
factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
LR1 = cache.createRegion("LR1", factory.create());
for (int i = 0; i < 24; i++) {
PR1.put(new Integer(i), new Integer(i));
PR2.put(new Integer(i), new Integer(i));
RR1.put(new Integer(i), new Integer(i));
RR2.put(new Integer(i), new Integer(i));
LR1.put(new Integer(i), new Integer(i));
}
}
Aggregations