use of org.apache.geode.internal.cache.GemFireCacheImpl in project geode by apache.
the class ConfigCommandsDUnitTest method testAlterRuntimeConfigOnAllMembers.
@Test
public void testAlterRuntimeConfigOnAllMembers() throws Exception {
final String member1 = "VM1";
final String controller = "controller";
String controllerDirectory = this.temporaryFolder.newFolder(controller).getAbsolutePath();
String controllerStatFilePath = new File(controllerDirectory, "stat.gfs").getAbsolutePath();
setUpJmxManagerOnVm0ThenConnect(null);
Properties localProps = new Properties();
localProps.setProperty(NAME, controller);
localProps.setProperty(LOG_LEVEL, "error");
getSystem(localProps);
final GemFireCacheImpl cache = (GemFireCacheImpl) getCache();
final DistributionConfig config = cache.getSystem().getConfig();
Host.getHost(0).getVM(1).invoke(new SerializableRunnable() {
public void run() {
Properties localProps = new Properties();
localProps.setProperty(NAME, member1);
getSystem(localProps);
Cache cache = getCache();
}
});
CommandStringBuilder csb = new CommandStringBuilder(CliStrings.ALTER_RUNTIME_CONFIG);
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOG__LEVEL, "info");
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOG__FILE__SIZE__LIMIT, "50");
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__DISK__SPACE__LIMIT, "32");
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__ARCHIVE__FILE__SIZE__LIMIT, "49");
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLE__RATE, "2000");
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__ARCHIVE__FILE, controllerStatFilePath);
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__STATISTIC__SAMPLING__ENABLED, "true");
csb.addOption(CliStrings.ALTER_RUNTIME_CONFIG__LOG__DISK__SPACE__LIMIT, "10");
CommandResult cmdResult = executeCommand(csb.getCommandString());
String resultString = commandResultToString(cmdResult);
getLogWriter().info("#SB Result\n");
getLogWriter().info(resultString);
assertEquals(true, cmdResult.getStatus().equals(Status.OK));
assertEquals(LogWriterImpl.INFO_LEVEL, config.getLogLevel());
assertEquals(50, config.getLogFileSizeLimit());
assertEquals(49, config.getArchiveFileSizeLimit());
assertEquals(32, config.getArchiveDiskSpaceLimit());
assertEquals(2000, config.getStatisticSampleRate());
assertEquals("stat.gfs", config.getStatisticArchiveFile().getName());
assertEquals(true, config.getStatisticSamplingEnabled());
assertEquals(10, config.getLogDiskSpaceLimit());
// Validate the changes in the vm1
Host.getHost(0).getVM(1).invoke(new SerializableRunnable() {
public void run() {
GemFireCacheImpl cacheVM1 = (GemFireCacheImpl) getCache();
DistributionConfig configVM1 = cacheVM1.getSystem().getConfig();
assertEquals(LogWriterImpl.INFO_LEVEL, configVM1.getLogLevel());
assertEquals(50, configVM1.getLogFileSizeLimit());
assertEquals(49, configVM1.getArchiveFileSizeLimit());
assertEquals(32, configVM1.getArchiveDiskSpaceLimit());
assertEquals(2000, configVM1.getStatisticSampleRate());
assertEquals("stat.gfs", configVM1.getStatisticArchiveFile().getName());
assertEquals(true, configVM1.getStatisticSamplingEnabled());
assertEquals(10, configVM1.getLogDiskSpaceLimit());
}
});
}
use of org.apache.geode.internal.cache.GemFireCacheImpl in project geode by apache.
the class DistributedAckRegionCCEDUnitTest method testConcurrentOpWithGII.
/**
* test for bug #45564. a create() is received by region creator and then a later destroy() is
* received in initial image and while the version info from the destroy is recorded we keep the
* value from the create event
*/
@Test
public void testConcurrentOpWithGII() {
if (this.getClass() != DistributedAckRegionCCEDUnitTest.class) {
// not really a scope-related thing
return;
}
final String name = this.getUniqueName() + "-CC";
final String key = "mykey";
VM vm1 = Host.getHost(0).getVM(1);
VM vm2 = Host.getHost(0).getVM(2);
// create some destroyed entries so the GC service is populated
SerializableCallable create = new SerializableCallable("create region") {
public Object call() {
RegionFactory f = getCache().createRegionFactory(getRegionAttributes());
CCRegion = (LocalRegion) f.create(name);
return CCRegion.getDistributionManager().getDistributionManagerId();
}
};
// do conflicting update() and destroy() on the region. We want the update() to
// be sent with a message and the destroy() to be transferred in the initial image
// and be the value that we want to keep
InternalDistributedMember vm1ID = (InternalDistributedMember) vm1.invoke(create);
AsyncInvocation partialCreate = vm2.invokeAsync(new SerializableCallable("create region with stall") {
public Object call() throws Exception {
final GemFireCacheImpl cache = (GemFireCacheImpl) getCache();
RegionFactory f = cache.createRegionFactory(getRegionAttributes());
InitialImageOperation.VMOTION_DURING_GII = true;
// this will stall region creation at the point of asking for an initial image
VMotionObserverHolder.setInstance(new VMotionObserver() {
@Override
public void vMotionBeforeCQRegistration() {
}
@Override
public void vMotionBeforeRegisterInterest() {
}
@Override
public void vMotionDuringGII(Set recipientSet, LocalRegion region) {
InitialImageOperation.VMOTION_DURING_GII = false;
int oldLevel = LocalRegion.setThreadInitLevelRequirement(LocalRegion.BEFORE_INITIAL_IMAGE);
LocalRegion ccregion = cache.getRegionByPath("/" + name);
try {
// happen
while (!ccregion.isDestroyed() && ccregion.getRegionEntry(key) == null) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
}
} finally {
LocalRegion.setThreadInitLevelRequirement(oldLevel);
}
}
});
try {
CCRegion = (LocalRegion) f.create(name);
// at this point we should have received the update op and then the GII, which should
// overwrite
// the conflicting update op
assertFalse("expected initial image transfer to destroy entry", CCRegion.containsKey(key));
} finally {
InitialImageOperation.VMOTION_DURING_GII = false;
}
return null;
}
});
vm1.invoke(new SerializableRunnable("create conflicting events") {
public void run() {
// wait for the other to come on line
long waitEnd = System.currentTimeMillis() + 45000;
DistributionAdvisor adv = ((DistributedRegion) CCRegion).getCacheDistributionAdvisor();
while (System.currentTimeMillis() < waitEnd && adv.adviseGeneric().isEmpty()) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
}
if (adv.adviseGeneric().isEmpty()) {
fail("other member never came on line");
}
// inhibit all messaging
DistributedCacheOperation.LOSS_SIMULATION_RATIO = 200.0;
try {
CCRegion.put("mykey", "initialValue");
CCRegion.destroy("mykey");
} finally {
DistributedCacheOperation.LOSS_SIMULATION_RATIO = 0.0;
}
// generate a fake version tag for the message
VersionTag tag = CCRegion.getRegionEntry(key).getVersionStamp().asVersionTag();
// create a fake member ID that will be < mine and lose a concurrency check
NetMember nm = CCRegion.getDistributionManager().getDistributionManagerId().getNetMember();
InternalDistributedMember mbr = null;
try {
mbr = new InternalDistributedMember(nm.getInetAddress().getCanonicalHostName(), nm.getPort() - 1, "fake_id", "fake_id_ustring", DistributionManager.NORMAL_DM_TYPE, null, null);
tag.setMemberID(mbr);
} catch (UnknownHostException e) {
org.apache.geode.test.dunit.Assert.fail("could not create member id", e);
}
// generate an event to distribute that contains the fake version tag
EntryEventImpl event = EntryEventImpl.create(CCRegion, Operation.UPDATE, key, false, mbr, true, false);
event.setNewValue("newValue");
event.setVersionTag(tag);
// this should update the controller's cache with the updated value but leave this cache
// alone
DistributedCacheOperation op = new UpdateOperation(event, tag.getVersionTimeStamp());
op.distribute();
event.release();
}
});
try {
partialCreate.getResult();
} catch (Throwable e) {
org.apache.geode.test.dunit.Assert.fail("async invocation in vm2 failed", e);
}
}
use of org.apache.geode.internal.cache.GemFireCacheImpl in project geode by apache.
the class ReconnectDUnitTest method testReconnectFailsInCacheCreation.
/**
* auto-reconnect was found to stop attempting to reconnect and rebuild the cache if another
* forced-disconnect was triggered after reconnect but before cache creation was completed. This
* test uses a region listener to crash the reconnecting distributed system during cache creation
* and asserts that it then reconnects and rebuilds the cache.
*/
@Test
public void testReconnectFailsInCacheCreation() throws Exception {
Host host = Host.getHost(0);
VM vm0 = host.getVM(0);
VM vm1 = host.getVM(1);
final int locPort = locatorPort;
final String xmlFileLoc = (new File(".")).getAbsolutePath();
SerializableRunnable createCache = new SerializableRunnable("Create Cache and Regions") {
public void run() {
locatorPort = locPort;
final Properties props = getDistributedSystemProperties();
props.put(MAX_WAIT_TIME_RECONNECT, "1000");
dsProperties = props;
ReconnectDUnitTest.savedSystem = getSystem(props);
ReconnectDUnitTest.savedCache = (GemFireCacheImpl) getCache();
Region myRegion = createRegion("myRegion", createAtts());
myRegion.put("MyKey", "MyValue");
myRegion.getAttributesMutator().addCacheListener(new CacheKillingListener());
}
};
// vm0 keeps the locator from losing quorum when vm1 crashes
vm0.invoke(createCache);
vm1.invoke(createCache);
IgnoredException.addIgnoredException("DistributedSystemDisconnectedException|ForcedDisconnectException", vm1);
forceDisconnect(vm1);
vm1.invoke(new SerializableRunnable("wait for reconnect") {
public void run() {
final GemFireCacheImpl cache = ReconnectDUnitTest.savedCache;
Wait.waitForCriterion(new WaitCriterion() {
public boolean done() {
return cache.isReconnecting();
}
public String description() {
return "waiting for cache to begin reconnecting";
}
}, 30000, 100, true);
System.out.println("entering reconnect wait for " + cache);
try {
cache.waitUntilReconnected(20, TimeUnit.SECONDS);
} catch (InterruptedException e) {
fail("interrupted");
}
assertNotNull(cache.getReconnectedCache());
}
});
}
use of org.apache.geode.internal.cache.GemFireCacheImpl in project geode by apache.
the class ReconnectedCacheServerDUnitTest method testDefaultCacheServerNotCreatedOnReconnect.
@Test
public void testDefaultCacheServerNotCreatedOnReconnect() {
assertFalse(Boolean.getBoolean(DistributionConfig.GEMFIRE_PREFIX + "autoReconnect-useCacheXMLFile"));
GemFireCacheImpl gc = (GemFireCacheImpl) this.cache;
// fool the system into thinking cluster-config is being used
GMSMembershipManager mgr = (GMSMembershipManager) MembershipManagerHelper.getMembershipManager(gc.getDistributedSystem());
final boolean sharedConfigEnabled = true;
mgr.saveCacheXmlForReconnect(sharedConfigEnabled);
// the cache server config should now be stored in the cache's config
assertFalse(gc.getCacheServers().isEmpty());
int numServers = gc.getCacheServers().size();
assertNotNull(gc.getCacheConfig().getCacheServerCreation());
InternalDistributedSystem system = gc.getInternalDistributedSystem();
system.createAndStartCacheServers(gc.getCacheConfig().getCacheServerCreation(), gc);
assertEquals("found these cache servers:" + gc.getCacheServers(), numServers, gc.getCacheServers().size());
}
use of org.apache.geode.internal.cache.GemFireCacheImpl in project geode by apache.
the class RegionMembershipListenerDUnitTest method crashCacheOtherVm.
private void crashCacheOtherVm() {
VM vm = getOtherVm();
vm.invoke(new CacheSerializableRunnable("crash cache") {
public void run2() throws CacheException {
// shut down the gms before the distributed system to simulate
// a crash. In post-5.1.x, this could use SystemFailure.initFailure()
GemFireCacheImpl cache = (GemFireCacheImpl) getCache();
InternalDistributedSystem sys = (InternalDistributedSystem) cache.getDistributedSystem();
MembershipManagerHelper.crashDistributedSystem(sys);
}
});
}
Aggregations