Search in sources :

Example 1 with Address

use of org.gradle.internal.remote.Address in project gradle by gradle.

the class DefaultWorkerProcessBuilder method build.

@Override
public WorkerProcess build() {
    final WorkerJvmMemoryStatus memoryStatus = shouldPublishJvmMemoryInfo ? new WorkerJvmMemoryStatus() : null;
    final DefaultWorkerProcess workerProcess = new DefaultWorkerProcess(connectTimeoutSeconds, TimeUnit.SECONDS, memoryStatus);
    ConnectionAcceptor acceptor = server.accept(new Action<ObjectConnection>() {

        public void execute(final ObjectConnection connection) {
            workerProcess.onConnect(connection, new Runnable() {

                @Override
                public void run() {
                    DefaultWorkerLoggingProtocol defaultWorkerLoggingProtocol = new DefaultWorkerLoggingProtocol(outputEventListener);
                    connection.useParameterSerializers(WorkerLoggingSerializer.create());
                    connection.addIncoming(WorkerLoggingProtocol.class, defaultWorkerLoggingProtocol);
                    if (shouldPublishJvmMemoryInfo) {
                        connection.useParameterSerializers(WorkerJvmMemoryInfoSerializer.create());
                        connection.addIncoming(WorkerJvmMemoryInfoProtocol.class, memoryStatus);
                    }
                }
            });
        }
    });
    workerProcess.startAccepting(acceptor);
    Address localAddress = acceptor.getAddress();
    // Build configuration for GradleWorkerMain
    Object id = idGenerator.generateId();
    String displayName = getBaseName() + " " + id;
    LOGGER.debug("Creating {}", displayName);
    LOGGER.debug("Using application classpath {}", applicationClasspath);
    LOGGER.debug("Using implementation classpath {}", implementationClassPath);
    JavaExecHandleBuilder javaCommand = getJavaCommand();
    javaCommand.setDisplayName(displayName);
    workerImplementationFactory.prepareJavaCommand(id, displayName, this, implementationClassPath, localAddress, javaCommand, shouldPublishJvmMemoryInfo);
    javaCommand.args("'" + displayName + "'");
    ExecHandle execHandle = javaCommand.build();
    workerProcess.setExecHandle(execHandle);
    return new MemoryRequestingWorkerProcess(workerProcess, memoryManager, MemoryAmount.parseNotation(javaCommand.getMinHeapSize()));
}
Also used : ConnectionAcceptor(org.gradle.internal.remote.ConnectionAcceptor) Address(org.gradle.internal.remote.Address) JavaExecHandleBuilder(org.gradle.process.internal.JavaExecHandleBuilder) ObjectConnection(org.gradle.internal.remote.ObjectConnection) ExecHandle(org.gradle.process.internal.ExecHandle)

Example 2 with Address

use of org.gradle.internal.remote.Address in project gradle by gradle.

the class TcpIncomingConnector method accept.

public ConnectionAcceptor accept(Action<ConnectCompletion> action, boolean allowRemote) {
    final ServerSocketChannel serverSocket;
    int localPort;
    try {
        serverSocket = ServerSocketChannel.open();
        serverSocket.socket().bind(new InetSocketAddress(addressFactory.getLocalBindingAddress(), 0));
        localPort = serverSocket.socket().getLocalPort();
    } catch (Exception e) {
        throw UncheckedException.throwAsUncheckedException(e);
    }
    UUID id = idGenerator.generateId();
    List<InetAddress> addresses = addressFactory.getCommunicationAddresses();
    final Address address = new MultiChoiceAddress(id, localPort, addresses);
    LOGGER.debug("Listening on {}.", address);
    final StoppableExecutor executor = executorFactory.create("Incoming " + (allowRemote ? "remote" : "local") + " TCP Connector on port " + localPort);
    executor.execute(new Receiver(serverSocket, action, allowRemote));
    return new ConnectionAcceptor() {

        public Address getAddress() {
            return address;
        }

        public void requestStop() {
            CompositeStoppable.stoppable(serverSocket).stop();
        }

        public void stop() {
            requestStop();
            executor.stop();
        }
    };
}
Also used : ConnectionAcceptor(org.gradle.internal.remote.ConnectionAcceptor) InetSocketAddress(java.net.InetSocketAddress) Address(org.gradle.internal.remote.Address) InetAddress(java.net.InetAddress) InetSocketAddress(java.net.InetSocketAddress) StoppableExecutor(org.gradle.internal.concurrent.StoppableExecutor) UUID(java.util.UUID) InetAddress(java.net.InetAddress) ServerSocketChannel(java.nio.channels.ServerSocketChannel) ClosedChannelException(java.nio.channels.ClosedChannelException) UncheckedException(org.gradle.internal.UncheckedException)

Example 3 with Address

use of org.gradle.internal.remote.Address in project gradle by gradle.

the class DaemonStartupCommunication method readDiagnostics.

public DaemonStartupInfo readDiagnostics(String message) {
    //Assuming the message has correct format. Not bullet proof, but seems to work ok for now.
    if (!message.startsWith(daemonGreeting())) {
        throw new IllegalArgumentException(String.format("Unexpected daemon startup message: %s", message));
    }
    try {
        String encoded = message.substring(daemonGreeting().length()).trim();
        InputStream inputStream = new EncodedStream.EncodedInput(new ByteArrayInputStream(encoded.getBytes()));
        Decoder decoder = new InputStreamBackedDecoder(inputStream);
        String pidString = decoder.readNullableString();
        String uid = decoder.readString();
        Long pid = pidString == null ? null : Long.valueOf(pidString);
        Address address = new MultiChoiceAddressSerializer().read(decoder);
        File daemonLog = new File(decoder.readString());
        return new DaemonStartupInfo(uid, address, new DaemonDiagnostics(daemonLog, pid));
    } catch (IOException e) {
        throw new UncheckedIOException(e);
    }
}
Also used : InputStreamBackedDecoder(org.gradle.internal.serialize.InputStreamBackedDecoder) Address(org.gradle.internal.remote.Address) MultiChoiceAddress(org.gradle.internal.remote.internal.inet.MultiChoiceAddress) UncheckedIOException(org.gradle.api.UncheckedIOException) UncheckedIOException(org.gradle.api.UncheckedIOException) Decoder(org.gradle.internal.serialize.Decoder) InputStreamBackedDecoder(org.gradle.internal.serialize.InputStreamBackedDecoder) DaemonStartupInfo(org.gradle.launcher.daemon.diagnostics.DaemonStartupInfo) DaemonDiagnostics(org.gradle.launcher.daemon.diagnostics.DaemonDiagnostics) MultiChoiceAddressSerializer(org.gradle.internal.remote.internal.inet.MultiChoiceAddressSerializer)

Example 4 with Address

use of org.gradle.internal.remote.Address in project gradle by gradle.

the class PersistentDaemonRegistry method store.

public void store(final DaemonInfo info) {
    final Address address = info.getAddress();
    final DaemonContext daemonContext = info.getContext();
    final byte[] token = info.getToken();
    final State state = info.getState();
    lock.lock();
    LOGGER.debug("Storing daemon address: {}, context: {}", address, daemonContext);
    try {
        cache.update(new PersistentStateCache.UpdateAction<DaemonRegistryContent>() {

            public DaemonRegistryContent update(DaemonRegistryContent oldValue) {
                if (oldValue == null) {
                    //it means the registry didn't exist yet
                    oldValue = new DaemonRegistryContent();
                }
                DaemonInfo daemonInfo = new DaemonInfo(address, daemonContext, token, state);
                oldValue.setStatus(address, daemonInfo);
                return oldValue;
            }
        });
    } finally {
        lock.unlock();
    }
}
Also used : DaemonContext(org.gradle.launcher.daemon.context.DaemonContext) PersistentStateCache(org.gradle.cache.PersistentStateCache) Address(org.gradle.internal.remote.Address) State(org.gradle.launcher.daemon.server.api.DaemonStateControl.State)

Aggregations

Address (org.gradle.internal.remote.Address)4 ConnectionAcceptor (org.gradle.internal.remote.ConnectionAcceptor)2 InetAddress (java.net.InetAddress)1 InetSocketAddress (java.net.InetSocketAddress)1 ClosedChannelException (java.nio.channels.ClosedChannelException)1 ServerSocketChannel (java.nio.channels.ServerSocketChannel)1 UUID (java.util.UUID)1 UncheckedIOException (org.gradle.api.UncheckedIOException)1 PersistentStateCache (org.gradle.cache.PersistentStateCache)1 UncheckedException (org.gradle.internal.UncheckedException)1 StoppableExecutor (org.gradle.internal.concurrent.StoppableExecutor)1 ObjectConnection (org.gradle.internal.remote.ObjectConnection)1 MultiChoiceAddress (org.gradle.internal.remote.internal.inet.MultiChoiceAddress)1 MultiChoiceAddressSerializer (org.gradle.internal.remote.internal.inet.MultiChoiceAddressSerializer)1 Decoder (org.gradle.internal.serialize.Decoder)1 InputStreamBackedDecoder (org.gradle.internal.serialize.InputStreamBackedDecoder)1 DaemonContext (org.gradle.launcher.daemon.context.DaemonContext)1 DaemonDiagnostics (org.gradle.launcher.daemon.diagnostics.DaemonDiagnostics)1 DaemonStartupInfo (org.gradle.launcher.daemon.diagnostics.DaemonStartupInfo)1 State (org.gradle.launcher.daemon.server.api.DaemonStateControl.State)1