Skip to content

Commit

Permalink
Some refactoring - avoided some data duplication, some rename job.
Browse files Browse the repository at this point in the history
  • Loading branch information
mockitoguy committed Apr 10, 2012
1 parent 4e70783 commit 8b97b26
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 31 deletions.
Expand Up @@ -15,7 +15,7 @@
*/
package org.gradle.launcher.daemon.client;

import org.gradle.launcher.daemon.diagnostics.DaemonProcessInfo;
import org.gradle.launcher.daemon.diagnostics.DaemonDiagnostics;
import org.gradle.messaging.remote.internal.Connection;

/**
Expand All @@ -26,13 +26,13 @@ public class DaemonConnection {
private final String uid;
private final Connection<Object> connection;
private final String password;
private DaemonProcessInfo processInfo;
private DaemonDiagnostics diagnostics;

public DaemonConnection(String uid, Connection<Object> connection, String password, DaemonProcessInfo info) {
public DaemonConnection(String uid, Connection<Object> connection, String password, DaemonDiagnostics diagnostics) {
this.uid = uid;
this.connection = connection;
this.password = password;
this.processInfo = info;
this.diagnostics = diagnostics;
}

public String getUid() {
Expand All @@ -47,7 +47,10 @@ public String getPassword() {
return this.password;
}

public DaemonProcessInfo getProcessInfo() {
return processInfo;
/**
* @return diagnostics. Can be null - it means we don't have process diagnostics.
*/
public DaemonDiagnostics getDaemonDiagnostics() {
return diagnostics;
}
}
Expand Up @@ -15,8 +15,8 @@
*/
package org.gradle.launcher.daemon.client;

import org.gradle.launcher.daemon.diagnostics.DaemonProcessInfo;
import org.gradle.launcher.daemon.diagnostics.DaemonStartupInfo;

public interface DaemonStarter {
DaemonProcessInfo startDaemon();
DaemonStartupInfo startDaemon();
}
Expand Up @@ -21,7 +21,8 @@
import org.gradle.api.specs.Spec;
import org.gradle.internal.UncheckedException;
import org.gradle.launcher.daemon.context.DaemonContext;
import org.gradle.launcher.daemon.diagnostics.DaemonProcessInfo;
import org.gradle.launcher.daemon.diagnostics.DaemonDiagnostics;
import org.gradle.launcher.daemon.diagnostics.DaemonStartupInfo;
import org.gradle.launcher.daemon.registry.DaemonInfo;
import org.gradle.launcher.daemon.registry.DaemonRegistry;
import org.gradle.messaging.remote.internal.ConnectException;
Expand Down Expand Up @@ -82,8 +83,7 @@ private DaemonConnection findConnection(List<DaemonInfo> daemonInfos, Spec<? sup
}

try {
//TODO SF some overlap between the DaemonConnection and DaemonProcessInfo
return connectToDaemon(daemonInfo, new DaemonProcessInfo(daemonInfo.getContext().getUid(), null));
return connectToDaemon(daemonInfo, null);
} catch (ConnectException e) {
//this means the daemon died without removing its address from the registry
//we can safely remove this address now
Expand All @@ -99,44 +99,44 @@ private DaemonConnection findConnection(List<DaemonInfo> daemonInfos, Spec<? sup

public DaemonConnection createConnection() {
LOGGER.info("Starting Gradle daemon");
final DaemonProcessInfo processInfo = daemonStarter.startDaemon();
LOGGER.debug("Started Gradle Daemon: {}", processInfo);
final DaemonStartupInfo startupInfo = daemonStarter.startDaemon();
LOGGER.debug("Started Gradle Daemon: {}", startupInfo);
long expiry = System.currentTimeMillis() + connectTimeout;
do {
try {
Thread.sleep(200L);
} catch (InterruptedException e) {
throw UncheckedException.throwAsUncheckedException(e);
}
DaemonConnection daemonConnection = connectToDaemonWithId(processInfo);
DaemonConnection daemonConnection = connectToDaemonWithId(startupInfo);
if (daemonConnection != null) {
return daemonConnection;
}
} while (System.currentTimeMillis() < expiry);

throw new GradleException("Timeout waiting to connect to Gradle daemon.\n" + processInfo.describe());
throw new GradleException("Timeout waiting to connect to Gradle daemon.\n" + startupInfo.describe());
}

private DaemonConnection connectToDaemonWithId(DaemonProcessInfo processInfo) throws ConnectException {
private DaemonConnection connectToDaemonWithId(DaemonStartupInfo startupInfo) throws ConnectException {
// Look for 'our' daemon among the busy daemons - a daemon will start in busy state so that nobody else will grab it.
for (DaemonInfo daemonInfo : daemonRegistry.getBusy()) {
if (daemonInfo.getContext().getUid().equals(processInfo.getUid())) {
if (daemonInfo.getContext().getUid().equals(startupInfo.getUid())) {
try {
// TODO:DAZ We should verify the connection using the original daemon constraint
return connectToDaemon(daemonInfo, processInfo);
return connectToDaemon(daemonInfo, startupInfo.getDiagnostics());
} catch (ConnectException e) {
// this means the daemon died without removing its address from the registry
// since we have never successfully connected we assume the daemon is dead and remove this address now
daemonRegistry.remove(daemonInfo.getAddress());
throw new GradleException("The forked daemon process died before we could connect.\n" + processInfo.describe());
throw new GradleException("The forked daemon process died before we could connect.\n" + startupInfo.describe());
//TODO SF after the refactorings add some coverage for visibility of the daemon tail.
}
}
}
return null;
}

private DaemonConnection connectToDaemon(DaemonInfo daemonInfo, DaemonProcessInfo processInfo) {
return new DaemonConnection(daemonInfo.getContext().getUid(), connector.connect(daemonInfo.getAddress()), daemonInfo.getPassword(), processInfo);
private DaemonConnection connectToDaemon(DaemonInfo daemonInfo, DaemonDiagnostics diagnostics) {
return new DaemonConnection(daemonInfo.getContext().getUid(), connector.connect(daemonInfo.getAddress()), daemonInfo.getPassword(), diagnostics);
}
}
Expand Up @@ -24,7 +24,7 @@
import org.gradle.launcher.daemon.bootstrap.GradleDaemon;
import org.gradle.launcher.daemon.configuration.DaemonParameters;
import org.gradle.launcher.daemon.diagnostics.DaemonDiagnostics;
import org.gradle.launcher.daemon.diagnostics.DaemonProcessInfo;
import org.gradle.launcher.daemon.diagnostics.DaemonStartupInfo;
import org.gradle.launcher.daemon.registry.DaemonDir;
import org.gradle.process.internal.ProcessParentingInitializer;
import org.gradle.util.Clock;
Expand Down Expand Up @@ -52,7 +52,7 @@ public DefaultDaemonStarter(DaemonDir daemonDir, DaemonParameters daemonParamete
this.daemonGreeter = daemonGreeter;
}

public DaemonProcessInfo startDaemon() {
public DaemonStartupInfo startDaemon() {
DefaultModuleRegistry registry = new DefaultModuleRegistry();
Set<File> bootstrapClasspath = new LinkedHashSet<File>();
bootstrapClasspath.addAll(registry.getModule("gradle-launcher").getImplementationClasspath().getAsFiles());
Expand Down Expand Up @@ -87,7 +87,7 @@ public DaemonProcessInfo startDaemon() {

DaemonDiagnostics diagnostics = startProcess(daemonArgs, daemonDir.getVersionedDir());

return new DaemonProcessInfo(daemonParameters.getUid(), diagnostics);
return new DaemonStartupInfo(daemonParameters.getUid(), diagnostics);
}

private DaemonDiagnostics startProcess(final List<String> args, final File workingDir) {
Expand Down
Expand Up @@ -18,7 +18,7 @@
import org.gradle.internal.CompositeStoppable;
import org.gradle.internal.Factory;
import org.gradle.internal.Stoppable;
import org.gradle.launcher.daemon.diagnostics.DaemonProcessInfo;
import org.gradle.launcher.daemon.diagnostics.DaemonStartupInfo;
import org.gradle.launcher.daemon.server.Daemon;

import java.util.ArrayList;
Expand All @@ -35,10 +35,10 @@ public EmbeddedDaemonStarter(Factory<Daemon> daemonFactory) {
this.daemonFactory = daemonFactory;
}

public DaemonProcessInfo startDaemon() {
public DaemonStartupInfo startDaemon() {
Daemon daemon = daemonFactory.create();
startDaemon(daemon);
return new DaemonProcessInfo(daemon.getUid(), null);
return new DaemonStartupInfo(daemon.getUid(), null);
}

public void startDaemon(Daemon daemon) {
Expand Down
Expand Up @@ -19,12 +19,12 @@
/**
* by Szczepan Faber, created at 4/6/12
*/
public class DaemonProcessInfo {
public class DaemonStartupInfo {

private String uid;
private DaemonDiagnostics diagnostics;

public DaemonProcessInfo(String uid, DaemonDiagnostics diagnostics) {
public DaemonStartupInfo(String uid, DaemonDiagnostics diagnostics) {
this.uid = uid;
this.diagnostics = diagnostics;
}
Expand Down
Expand Up @@ -18,7 +18,7 @@ package org.gradle.launcher.daemon.client
import org.gradle.api.specs.Spec
import org.gradle.launcher.daemon.context.DaemonContext
import org.gradle.launcher.daemon.context.DefaultDaemonContext
import org.gradle.launcher.daemon.diagnostics.DaemonProcessInfo
import org.gradle.launcher.daemon.diagnostics.DaemonStartupInfo
import org.gradle.launcher.daemon.registry.EmbeddedDaemonRegistry
import org.gradle.messaging.remote.Address
import org.gradle.messaging.remote.internal.Connection
Expand Down Expand Up @@ -66,7 +66,7 @@ class DefaultDaemonConnectorTest extends Specification {
def address = createAddress(daemonNum)
registry.store(address, context, "password")
registry.markBusy(address)
return new DaemonProcessInfo(daemonNum.toString(), null);
return new DaemonStartupInfo(daemonNum.toString(), null);
}

def startIdleDaemon() {
Expand Down

0 comments on commit 8b97b26

Please sign in to comment.