public override async void Start() { if (ChangeStatus(WorkerNodeStatus.NotStarted, WorkerNodeStatus.Starting)) { var startData = new BuildStartData { SessionId = m_appLoggingContext.Session.Id, WorkerId = WorkerId, CachedGraphDescriptor = m_masterService.CachedGraphDescriptor, SymlinkFileContentHash = m_masterService.SymlinkFileContentHash.ToBondContentHash(), FingerprintSalt = m_masterService.Environment.ContentFingerprinter.FingerprintSalt, MasterLocation = new ServiceLocation { IpAddress = Dns.GetHostName(), Port = m_masterService.Port, }, EnvironmentVariables = m_masterService.Environment.State.PipEnvironment .FullEnvironmentVariables.ToDictionary().ToDictionary(kvp => kvp.Key, kvp => kvp.Value), }; var callResult = await m_workerClient.AttachAsync(startData); if (callResult.State != RpcCallResultState.Succeeded) { // Change to stopped state since we failed to attach ChangeStatus(WorkerNodeStatus.Starting, WorkerNodeStatus.Stopped); } else { // Change to started state so we know the worker is connected ChangeStatus(WorkerNodeStatus.Starting, WorkerNodeStatus.Started); } } }
public static OpenBond.BuildStartData ToOpenBond(this BuildStartData message) { return(new OpenBond.BuildStartData() { WorkerId = message.WorkerId, CachedGraphDescriptor = new Cache.Fingerprints.PipGraphCacheDescriptor() { ConfigState = message.CachedGraphDescriptor.ConfigState.ToBondContentHash(), DirectedGraph = message.CachedGraphDescriptor.DirectedGraph.ToBondContentHash(), EngineState = message.CachedGraphDescriptor.EngineState.ToBondContentHash(), HistoricTableSizes = message.CachedGraphDescriptor.HistoricTableSizes.ToBondContentHash(), Id = message.CachedGraphDescriptor.Id, MountPathExpander = message.CachedGraphDescriptor.MountPathExpander.ToBondContentHash(), PathTable = message.CachedGraphDescriptor.PathTable.ToBondContentHash(), PipGraph = message.CachedGraphDescriptor.PipGraph.ToBondContentHash(), PipGraphId = message.CachedGraphDescriptor.PipGraphId.ToBondContentHash(), PipTable = message.CachedGraphDescriptor.PipTable.ToBondContentHash(), PreviousInputs = message.CachedGraphDescriptor.PreviousInputs.ToBondContentHash(), QualifierTable = message.CachedGraphDescriptor.QualifierTable.ToBondContentHash(), StringTable = message.CachedGraphDescriptor.StringTable.ToBondContentHash(), SymbolTable = message.CachedGraphDescriptor.SymbolTable.ToBondContentHash(), TraceInfo = message.CachedGraphDescriptor.TraceInfo }, EnvironmentVariables = message.EnvironmentVariables.ToDictionary(a => a.Key, a => a.Value), FingerprintSalt = message.FingerprintSalt, MasterLocation = new OpenBond.ServiceLocation() { IpAddress = message.MasterLocation.IpAddress, Port = message.MasterLocation.Port }, SessionId = message.SessionId, SymlinkFileContentHash = message.SymlinkFileContentHash.ToBondContentHash(), }); }
internal void AttachCore(BuildStartData buildStartData, string masterName) { Logger.Log.DistributionAttachReceived(m_appLoggingContext, buildStartData.SessionId, masterName); BuildStartData = buildStartData; // The app-level logging context has a wrong session id. Fix it now that we know the right one. m_appLoggingContext = new LoggingContext( m_appLoggingContext.ActivityId, m_appLoggingContext.LoggerComponentInfo, new LoggingContext.SessionInfo(buildStartData.SessionId, m_appLoggingContext.Session.Environment, m_appLoggingContext.Session.RelatedActivityId), m_appLoggingContext); if (m_isGrpcEnabled) { m_masterClient = new Grpc.GrpcMasterClient(m_appLoggingContext, m_services.BuildId, buildStartData.MasterLocation.IpAddress, buildStartData.MasterLocation.Port, OnConnectionTimeOutAsync); } else { #if !DISABLE_FEATURE_BOND_RPC m_bondWorkerService.UpdateLoggingContext(m_appLoggingContext); m_bondMasterClient = new InternalBond.BondMasterClient(m_appLoggingContext, buildStartData.MasterLocation.IpAddress, buildStartData.MasterLocation.Port); m_masterClient = m_bondMasterClient; #endif } WorkerId = BuildStartData.WorkerId; m_attachCompletionSource.TrySetResult(true); }
/// <inheritdoc/> public override Task <RpcResponse> Attach(BuildStartData message, ServerCallContext context) { var bondMessage = message.ToOpenBond(); m_workerService.AttachCore(bondMessage); return(Task.FromResult(new RpcResponse())); }
/// Note: The logic of service methods should be replicated in Test.BuildXL.Distribution.WorkerServerMock /// <inheritdoc/> public override Task <RpcResponse> Attach(BuildStartData message, ServerCallContext context) { var bondMessage = message.ToOpenBond(); GrpcSettings.ParseHeader(context.RequestHeaders, out string sender, out var _, out var _); m_workerService.Attach(bondMessage, sender); return(Task.FromResult(new RpcResponse())); }
internal void AttachCore(BuildStartData buildStartData, string masterName) { Logger.Log.DistributionAttachReceived(m_appLoggingContext, buildStartData.SessionId, masterName); BuildStartData = buildStartData; // The app-level logging context has a wrong session id. Fix it now that we know the right one. m_appLoggingContext = new LoggingContext( m_appLoggingContext.ActivityId, m_appLoggingContext.LoggerComponentInfo, new LoggingContext.SessionInfo(buildStartData.SessionId, m_appLoggingContext.Session.Environment, m_appLoggingContext.Session.RelatedActivityId), m_appLoggingContext); m_masterClient = new Grpc.GrpcMasterClient(m_appLoggingContext, m_services.BuildId, buildStartData.MasterLocation.IpAddress, buildStartData.MasterLocation.Port, OnConnectionTimeOutAsync); WorkerId = BuildStartData.WorkerId; m_attachCompletionSource.TrySetResult(true); }
public static BuildStartData ToGrpc(this OpenBond.BuildStartData message, SenderInfo senderInfo) { var buildStartData = new BuildStartData() { Sender = senderInfo, WorkerId = message.WorkerId, CachedGraphDescriptor = new BuildXL.Distribution.Grpc.PipGraphCacheDescriptor() { Id = message.CachedGraphDescriptor.Id, TraceInfo = message.CachedGraphDescriptor.TraceInfo, ConfigState = message.CachedGraphDescriptor.ConfigState?.Data.ToByteString() ?? ByteString.Empty, DirectedGraph = message.CachedGraphDescriptor.DirectedGraph?.Data.ToByteString() ?? ByteString.Empty, EngineState = message.CachedGraphDescriptor.EngineState?.Data.ToByteString() ?? ByteString.Empty, HistoricTableSizes = message.CachedGraphDescriptor.HistoricTableSizes?.Data.ToByteString() ?? ByteString.Empty, MountPathExpander = message.CachedGraphDescriptor.MountPathExpander?.Data.ToByteString() ?? ByteString.Empty, PathTable = message.CachedGraphDescriptor.PathTable?.Data.ToByteString() ?? ByteString.Empty, PipGraph = message.CachedGraphDescriptor.PipGraph?.Data.ToByteString() ?? ByteString.Empty, PipGraphId = message.CachedGraphDescriptor.PipGraphId?.Data.ToByteString() ?? ByteString.Empty, PipTable = message.CachedGraphDescriptor.PipTable?.Data.ToByteString() ?? ByteString.Empty, PreviousInputs = message.CachedGraphDescriptor.PreviousInputs?.Data.ToByteString() ?? ByteString.Empty, QualifierTable = message.CachedGraphDescriptor.QualifierTable?.Data.ToByteString() ?? ByteString.Empty, StringTable = message.CachedGraphDescriptor.StringTable?.Data.ToByteString() ?? ByteString.Empty, SymbolTable = message.CachedGraphDescriptor.SymbolTable?.Data.ToByteString() ?? ByteString.Empty, }, FingerprintSalt = message.FingerprintSalt, MasterLocation = new ServiceLocation() { IpAddress = message.MasterLocation.IpAddress, Port = message.MasterLocation.Port }, SessionId = message.SessionId, SymlinkFileContentHash = message.SymlinkFileContentHash.Data.ToByteString() }; foreach (var kvp in message.EnvironmentVariables) { buildStartData.EnvironmentVariables.Add(kvp.Key, kvp.Value); } return(buildStartData); }
// Server methods to better emulate the scenarios. // These should emulate what the homonymous methods do in GrpcWorker public void Attach(BuildStartData message) { var bondMessage = message.ToOpenBond(); WorkerService.Attach(bondMessage, "OrchestratorName"); }