Example #1
0
        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);
                }
            }
        }
Example #2
0
 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(),
     });
 }
Example #3
0
        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);
        }
Example #4
0
        /// <inheritdoc/>
        public override Task <RpcResponse> Attach(BuildStartData message, ServerCallContext context)
        {
            var bondMessage = message.ToOpenBond();

            m_workerService.AttachCore(bondMessage);

            return(Task.FromResult(new RpcResponse()));
        }
Example #5
0
        /// 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()));
        }
Example #6
0
        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);
        }
Example #8
0
 // 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");
 }