private void spawnInner( int processes, int serverIndex, int maxHeap, String frameworkCode, ArrayList<ServerInfo> logins, String[] args, int terminationPort) throws Exception { String ownLocation = new File(".").getAbsolutePath(); System.out.println("ownLocation=" + ownLocation); DistributedLockProvider provider = Globals.instantiateLockProvider(frameworkCode); String localClasspath; if (System.getProperty("java.class.path").contains("Chainbench.jar")) localClasspath = ownLocation + "/Chainbench.jar"; else { final String CP_STUB = ".;./bin;./lib/*;./lib/ojdbc6.jar;./lib/aspectjrt.jar"; localClasspath = provider.getMiniServerClasspath(CP_STUB); } int pathEnvVarIndex = -1; // Need to copy env vars across or get a Windows networking error Map<String, String> variables = System.getenv(); String[] envp = new String[variables.size()]; int i = 0; for (Map.Entry<String, String> entry : variables.entrySet()) { String name = entry.getKey(); String value = entry.getValue(); if (name.toLowerCase().equals("path")) { pathEnvVarIndex = i; System.out.println("PATH AT INDEX" + i); System.out.println("PATH=" + value); } envp[i++] = name + "=" + value; } Params.setServerIndex(args, serverIndex); String flattened = Params.spaceSeparatedList(args); System.out.println("Flattened=" + flattened); String debugFlags = (serverIndex == 0) ? " -debug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=1234 " : ""; String cmdStub; String miniserverClasspath; String extraProps = ""; if (serverIndex != 0 && logins.size() != 0) { int remoteBoxIndex = serverIndex % (logins.size()); ServerInfo login = logins.get(remoteBoxIndex); cmdStub = "cmd /K start java -cp " + localClasspath + " com.hp.software.chainbench.SSH " + login.getHost() + " " + login.getUsername() + " " + login.getPassword() + " " + terminationPort + " " + " java "; miniserverClasspath = "./Chainbench.jar"; // Speeds up JDBC cxns on Linux - // see http://stackoverflow.com/questions/5503063/oracle-getconnection-slow extraProps = "-Djava.security.egd=file:/dev/./urandom"; ServerInfo remote = (ServerInfo) login.clone(); remote.setTerminationPort(terminationPort); servers.add(remote); } else { miniserverClasspath = localClasspath; cmdStub = "cmd /K start java "; ServerInfo local = new ServerInfo("localhost", null, null, terminationPort); servers.add(local); } String loadTimeWeaver = ""; if (Params.getSlowdownMode(args).equals(Constants.SLOWDOWN_ASPECT)) { loadTimeWeaver = " -javaagent:./lib/aspectjweaver.jar "; } else if (Params.getSlowdownMode(args).equals(Constants.SLOWDOWN_REVISER)) { loadTimeWeaver = " -javaagent:./lib/gluonj.jar=debug:com.hp.software.chainbench.SlowdownReviser "; } String propsStub = // " -XX:+HeapDumpOnOutOfMemoryError " + " -Xms" + maxHeap + "m" + " -Xmx" + maxHeap + "m" + loadTimeWeaver + debugFlags + extraProps; String props = provider.getJavaProps(propsStub, args); String cmd = cmdStub + " " + props + " " + " -cp " + miniserverClasspath + " com.hp.software.chainbench.MiniServer " + flattened; System.out.println(cmd); /* " -Dgemfire.remove-unresponsive-client=true " + " -Dgemfire.enable-network-partition-detection=true " + " -Dgemfire.departure-correlation-window=30 " + " -Dgemfire.conserve-sockets=false " + " -Dgemfire.ack-severe-alert-threshold=5 " + */ // /* " -Dhazelcast.initial.min.cluster.size=" + processes + // " -Dhazelcast.restart.on.max.idle=true " + // " -Dhazelcast.max.no.heartbeat.seconds=15 " + // " -Dhazelcast.in.thread.priority=10 " + // " -Dhazelcast.out.thread.priority=10 " + // " -Dhazelcast.service.thread.priority=10 " + */ // /* " -Djgroups.bind_addr=" + bindAddress + " " + " -Djgroups.diagnostics_addr=" + bindAddress + " " + " -Dsm.ini.groupname=testGroupName " + */ File dir = new File(ownLocation); Process p = Runtime.getRuntime().exec(cmd, envp, dir); localProcesses.add(p); }
/** * Detects the current-user-principal for a given WebDavResource. At first, /.well-known/ is * tried. Only if no current-user-principal can be detected for the .well-known location, the * given location of the resource is tried. * * @param serverInfo Location that will be queried * @param serviceName Well-known service name ("carddav", "caldav") * @return WebDavResource of current-user-principal for the given service, or null if it can't be * found * <p>TODO: If a TXT record is given, always use it instead of trying .well-known first */ WebDavResource getCurrentUserPrincipal(ServerInfo serverInfo, String serviceName) throws URISyntaxException, IOException, NotAuthorizedException { URI initialURL = getInitialContextURL(serverInfo, serviceName); if (initialURL != null) { Log.i( TAG, "Looking up principal URL for service " + serviceName + "; initial context: " + initialURL); // determine base URL (host name and initial context path) WebDavResource base = new WebDavResource( httpClient, initialURL, serverInfo.getUserName(), serverInfo.getPassword(), serverInfo.isAuthPreemptive()); // look for well-known service (RFC 5785) try { WebDavResource wellKnown = new WebDavResource(base, "/.well-known/" + serviceName); wellKnown.propfind(Mode.CURRENT_USER_PRINCIPAL); if (wellKnown.getProperties().getCurrentUserPrincipal() != null) { URI principal = wellKnown.getProperties().getCurrentUserPrincipal(); Log.i(TAG, "Principal URL found from Well-Known URI: " + principal); return new WebDavResource(wellKnown, principal); } } catch (NotAuthorizedException e) { Log.w(TAG, "Not authorized for well-known " + serviceName + " service detection", e); throw e; } catch (URISyntaxException e) { Log.e( TAG, "Well-known" + serviceName + " service detection failed because of invalid URIs", e); } catch (HttpException e) { Log.d(TAG, "Well-known " + serviceName + " service detection failed with HTTP error", e); } catch (DavException e) { Log.w( TAG, "Well-known " + serviceName + " service detection failed with unexpected DAV response", e); } catch (IOException e) { Log.e(TAG, "Well-known " + serviceName + " service detection failed with I/O error", e); } // fall back to user-given initial context path Log.d(TAG, "Well-known service detection failed, trying initial context path " + initialURL); try { base.propfind(Mode.CURRENT_USER_PRINCIPAL); if (base.getProperties().getCurrentUserPrincipal() != null) { URI principal = base.getProperties().getCurrentUserPrincipal(); Log.i(TAG, "Principal URL found from initial context path: " + principal); return new WebDavResource(base, principal); } } catch (NotAuthorizedException e) { Log.e(TAG, "Not authorized for querying principal", e); throw e; } catch (HttpException e) { Log.e(TAG, "HTTP error when querying principal", e); } catch (DavException e) { Log.e(TAG, "DAV error when querying principal", e); } Log.i( TAG, "Couldn't find current-user-principal for service " + serviceName + ", assuming initial context path is principal path"); return base; } return null; }