use of org.apache.geode.internal.cache.LocalRegion in project geode by apache.
the class DiskRegionDUnitTest method testRegionEntryValues.
// testSwitchOut is no longer valid
// the test was not written correctly to recover
// and if it was it would now fail with a split brain
// testSwitchIn is no longer valid
// we no longer switchIn files if GII aborts.
/**
* Tests getting the {@linkplain org.apache.geode.cache.Region.Entry#getValue values} of region
* entries that have been overflowed.
*/
@Test
public void testRegionEntryValues() throws Exception {
final String name = this.getUniqueName();
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
factory.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(100, EvictionAction.OVERFLOW_TO_DISK));
File d = new File("DiskRegions" + OSProcess.getId());
d.mkdirs();
DiskStoreFactory dsf = getCache().createDiskStoreFactory();
dsf.setDiskDirs(new File[] { d });
DiskStore ds = dsf.create(name);
factory.setDiskStoreName(ds.getName());
Region region = createRegion(name, factory.create());
// DiskRegion dr = ((LocalRegion) region).getDiskRegion();
// DiskRegionStats diskStats = dr.getStats();
LRUStatistics lruStats = getLRUStats(region);
// Put in larger stuff until we start evicting
int total;
for (total = 0; lruStats.getEvictions() <= 0; total++) {
int[] array = new int[250];
array[0] = total;
region.put(new Integer(total), array);
}
// BitSet bits = new BitSet();
Set values = region.entrySet(false);
assertEquals(total, values.size());
for (Iterator iter = values.iterator(); iter.hasNext(); ) {
Region.Entry entry = (Region.Entry) iter.next();
Integer key = (Integer) entry.getKey();
int[] value = (int[]) entry.getValue();
assertNotNull(value);
assertEquals("Key/value" + key, key.intValue(), value[0]);
}
}
use of org.apache.geode.internal.cache.LocalRegion in project geode by apache.
the class DiskRegionDUnitTest method testRegionEvictValue.
/**
* Tests for region.evictValue().
*/
@Test
public void testRegionEvictValue() throws Exception {
final String name = this.getUniqueName() + "testRegionEvictValue";
File d = new File("DiskRegions" + OSProcess.getId());
d.mkdirs();
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
factory.setDataPolicy(DataPolicy.PERSISTENT_REPLICATE);
// factory.setEvictionAttributes(EvictionAttributes.createLIFOEntryAttributes(capacity,
// EvictionAction.OVERFLOW_TO_DISK));
DiskStoreFactory dsf = getCache().createDiskStoreFactory();
dsf.setDiskDirs(new File[] { d });
DiskStore ds = dsf.create(name);
factory.setDiskStoreName(ds.getName());
Region region = createRegion(name, factory.create());
int size = 200;
for (int i = 0; i < size; i++) {
region.put("Key-" + i, new Integer(i));
}
// Evict alternate values.
for (int i = 0; i < size / 2; i++) {
if (i % 2 == 0) {
((LocalRegion) region).evictValue("Key-" + i);
}
}
// Check if its moved to disk.
for (int i = 0; i < size / 2; i++) {
if (i % 2 == 0) {
try {
Object value = ((LocalRegion) region).getValueInVM("Key-" + i);
if (value != null) {
fail("The values should have been evicted to disk, for key: " + "Key-" + i);
}
} catch (EntryNotFoundException e) {
fail("Entry not found not expected but occurred ");
}
}
}
}
use of org.apache.geode.internal.cache.LocalRegion in project geode by apache.
the class DiskRegionDUnitTest method testLowLevelGetMethods.
/**
* Tests the {@link LocalRegion#getValueInVM getValueInVM} and {@link LocalRegion#getValueOnDisk
* getValueOnDisk} methods that were added for testing.
*/
@Test
public void testLowLevelGetMethods() throws Exception {
final String name = this.getUniqueName();
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
factory.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(100, EvictionAction.OVERFLOW_TO_DISK));
DiskStoreFactory dsf = getCache().createDiskStoreFactory();
factory.setDiskSynchronous(true);
File d = new File("DiskRegions" + OSProcess.getId());
d.mkdirs();
dsf.setDiskDirs(new File[] { d });
DiskStore ds = dsf.create(name);
factory.setDiskStoreName(ds.getName());
LocalRegion region = (LocalRegion) createRegion(name, factory.create());
// DiskRegion dr = region.getDiskRegion();
// DiskRegionStats diskStats = dr.getStats();
LRUStatistics lruStats = getLRUStats(region);
// Put in larger stuff until we start evicting
int total;
for (total = 0; lruStats.getEvictions() <= 2; total++) {
int[] array = new int[250];
array[0] = total;
Integer key = new Integer(total);
region.put(key, array);
array = (int[]) region.getValueInVM(key);
assertNotNull(array);
assertEquals(total, array[0]);
assertNull(region.getValueOnDisk(key));
}
Integer key = new Integer(1);
assertNull(region.getValueInVM(key));
int[] array = (int[]) region.getValueOnDisk(key);
assertNotNull(array);
assertEquals(1, array[0]);
region.get(key);
CachedDeserializable cd = (CachedDeserializable) region.getValueInVM(key);
array = (int[]) cd.getValue();
assertNotNull(array);
assertEquals(1, array[0]);
array = (int[]) region.getValueOnDisk(key);
assertNotNull(array);
assertEquals(1, array[0]);
}
use of org.apache.geode.internal.cache.LocalRegion in project geode by apache.
the class DiskRegionDUnitTest method testTestHookStatistics.
/**
* Tests that the "test hook" {@link DiskRegionStats} work as advertised.
*/
@Test
public void testTestHookStatistics() throws Exception {
final String name = this.getUniqueName();
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.LOCAL);
// factory.setConcurrencyChecksEnabled(false);
factory.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(100, EvictionAction.OVERFLOW_TO_DISK));
DiskStoreFactory dsf = getCache().createDiskStoreFactory();
factory.setDiskSynchronous(true);
File d = new File("DiskRegions" + OSProcess.getId());
d.mkdirs();
dsf.setDiskDirs(new File[] { d });
DiskStore ds = dsf.create(name);
factory.setDiskStoreName(ds.getName());
LocalRegion region = (LocalRegion) createRegion(name, factory.create());
DiskRegion dr = region.getDiskRegion();
DiskRegionStats diskStats = dr.getStats();
LRUStatistics lruStats = getLRUStats(region);
// Put in stuff until we start evicting
int total;
for (total = 0; lruStats.getEvictions() <= 0; total++) {
int[] array = new int[1];
array[0] = total;
region.put(new Integer(total), array);
if (lruStats.getEvictions() <= 0) {
assertEquals(total + 1, diskStats.getNumEntriesInVM());
}
}
assertEquals(1, diskStats.getNumOverflowOnDisk());
// Net change of zero
region.get(new Integer(0));
assertEquals(region.entryCount(), diskStats.getNumEntriesInVM() + diskStats.getNumOverflowOnDisk());
assertEquals(total - 1, diskStats.getNumEntriesInVM());
assertEquals(1, diskStats.getNumOverflowOnDisk());
// Kick out 4 entries
region.put(new Integer(total + 10), new int[1]);
region.put(new Integer(total + 11), new int[1]);
region.put(new Integer(total + 12), new int[1]);
region.put(new Integer(total + 13), new int[1]);
assertEquals(region.entryCount(), diskStats.getNumEntriesInVM() + diskStats.getNumOverflowOnDisk());
assertEquals(total - 1, diskStats.getNumEntriesInVM());
assertEquals(5, diskStats.getNumOverflowOnDisk());
// Make sure invalidate of inVM entry changes inVM count but not disk
region.invalidate(new Integer(total + 10));
assertEquals(region.entryCount() - 1, diskStats.getNumEntriesInVM() + diskStats.getNumOverflowOnDisk());
assertEquals(total - 2, diskStats.getNumEntriesInVM());
assertEquals(5, diskStats.getNumOverflowOnDisk());
// Make sure local-invalidate of inVM entry changes inVM count but not disk
region.localInvalidate(new Integer(total + 11));
assertEquals(region.entryCount() - 2, diskStats.getNumEntriesInVM() + diskStats.getNumOverflowOnDisk());
assertEquals(total - 3, diskStats.getNumEntriesInVM());
assertEquals(5, diskStats.getNumOverflowOnDisk());
// Make sure destroy of invalid entry does not change inVM or onDisk but changes entry count
region.destroy(new Integer(total + 10));
// ((LocalRegion)region).dumpBackingMap();
assertEquals(region.entryCount() - 1, diskStats.getNumEntriesInVM() + diskStats.getNumOverflowOnDisk());
assertEquals(total - 3, diskStats.getNumEntriesInVM());
assertEquals(5, diskStats.getNumOverflowOnDisk());
// Make sure destroy of inVM entry does change inVM but not onDisk
region.destroy(new Integer(total + 12));
assertEquals(region.entryCount() - 1, diskStats.getNumEntriesInVM() + diskStats.getNumOverflowOnDisk());
assertEquals(total - 4, diskStats.getNumEntriesInVM());
assertEquals(5, diskStats.getNumOverflowOnDisk());
// Destroy an entry that has been overflowed
region.destroy(new Integer(3));
assertEquals(region.entryCount() - 1, diskStats.getNumEntriesInVM() + diskStats.getNumOverflowOnDisk());
assertEquals(total - 4, diskStats.getNumEntriesInVM());
assertEquals(4, diskStats.getNumOverflowOnDisk());
}
use of org.apache.geode.internal.cache.LocalRegion in project geode by apache.
the class DiskRegionDUnitTest method testDistributedInvalidate.
/**
* Tests that invalidates and updates received from different VMs are handled appropriately by
* overflow regions.
*/
@Test
public void testDistributedInvalidate() throws Exception {
final String name = this.getUniqueName();
SerializableRunnable create = new CacheSerializableRunnable("Create region") {
public void run2() throws CacheException {
AttributesFactory factory = new AttributesFactory();
factory.setScope(Scope.DISTRIBUTED_ACK);
factory.setEarlyAck(false);
factory.setEvictionAttributes(EvictionAttributes.createLRUEntryAttributes(100, EvictionAction.OVERFLOW_TO_DISK));
File d = new File("DiskRegions" + OSProcess.getId());
d.mkdirs();
DiskStoreFactory dsf = getCache().createDiskStoreFactory();
dsf.setDiskDirs(new File[] { d });
DiskStore ds = dsf.create(name);
factory.setDiskStoreName(ds.getName());
createRegion(name, factory.create());
}
};
Host host = Host.getHost(0);
VM vm0 = host.getVM(0);
VM vm1 = host.getVM(1);
vm0.invoke(create);
vm1.invoke(create);
vm0.invoke(new CacheSerializableRunnable("Fill Region") {
public void run2() throws CacheException {
LocalRegion region = (LocalRegion) getRootRegion().getSubregion(name);
// DiskRegion dr = region.getDiskRegion();
LRUStatistics lruStats = getLRUStats(region);
for (int i = 0; lruStats.getEvictions() < 10; i++) {
LogWriterUtils.getLogWriter().info("Put " + i);
region.put(new Integer(i), new byte[1]);
}
assertEquals(10, lruStats.getEvictions());
}
});
final Object key = new Integer(20);
vm1.invoke(new CacheSerializableRunnable("Invalidate entry") {
public void run2() throws CacheException {
Region region = getRootRegion().getSubregion(name);
assertNotNull(region.get(key));
region.invalidate(key);
}
});
vm0.invoke(new CacheSerializableRunnable("Verify invalidate") {
public void run2() throws CacheException {
final Region region = getRootRegion().getSubregion(name);
WaitCriterion ev = new WaitCriterion() {
public boolean done() {
return region.get(key) == null;
}
public String description() {
return "value for key remains: " + key;
}
};
Wait.waitForCriterion(ev, 500, 200, true);
}
});
final String newValue = "NEW VALUE";
vm1.invoke(new CacheSerializableRunnable("Update entry") {
public void run2() throws CacheException {
Region region = getRootRegion().getSubregion(name);
region.put(key, newValue);
}
});
vm0.invoke(new CacheSerializableRunnable("Verify update") {
public void run2() throws CacheException {
final Region region = getRootRegion().getSubregion(name);
WaitCriterion ev = new WaitCriterion() {
public boolean done() {
return newValue.equals(region.get(key));
}
public String description() {
return "verify update";
}
};
Wait.waitForCriterion(ev, 500, 200, true);
}
});
}
Aggregations