blob: 7fee181424cc9027f0e721b3297493a6b78416f4 [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.geode.test.dunit.internal;
import java.rmi.Naming;
import org.apache.logging.log4j.Logger;
import org.apache.geode.internal.AvailablePortHelper;
import org.apache.geode.internal.ExitCode;
import org.apache.geode.internal.OSProcess;
import org.apache.geode.logging.internal.log4j.api.LogService;
import org.apache.geode.test.version.VersionManager;
public class ChildVM {
private static boolean stopMainLoop = false;
/**
* tells the main() loop to exit
*/
public static void stopVM() {
stopMainLoop = true;
}
private static final Logger logger = LogService.getLogger();
public static void main(String[] args) throws Throwable {
try {
int namingPort = Integer.getInteger(DUnitLauncher.RMI_PORT_PARAM);
int vmNum = Integer.getInteger(DUnitLauncher.VM_NUM_PARAM);
String geodeVersion = System.getProperty(DUnitLauncher.VM_VERSION_PARAM);
int pid = OSProcess.getId();
logger.info("VM" + vmNum + " is launching" + (pid > 0 ? " with PID " + pid : ""));
if (!VersionManager.isCurrentVersion(geodeVersion)) {
logger.info("This VM is using a Geode version {}",
geodeVersion);
}
MasterRemote holder = (MasterRemote) Naming
.lookup("//localhost:" + namingPort + "/" + DUnitLauncher.MASTER_PARAM);
DUnitLauncher.init(holder);
DUnitLauncher.locatorPort = holder.getLocatorPort();
final RemoteDUnitVM dunitVM = new RemoteDUnitVM();
final String name = "//localhost:" + namingPort + "/vm" + vmNum;
Naming.rebind(name, dunitVM);
JUnit4DistributedTestCase.initializeBlackboard();
holder.signalVMReady();
AvailablePortHelper.initializeUniquePortRange(vmNum + 2); // hacky, locator is -2
// This loop is here so this VM will die even if the master is mean killed.
while (!stopMainLoop) {
holder.ping();
Thread.sleep(1000);
}
} catch (Throwable t) {
logger.info("VM is exiting with error", t);
ExitCode.FATAL.doSystemExit();
} finally {
logger.info("VM is exiting");
}
}
}