public override void Submit()
        {
            // NOTE: If SQS Failure occurs ignore.
            // Orchestrator will check submit queue

            var    listener = new Turbine.Orchestrator.AWS.Data.Contract.SimpleMessageListener();
            var    job      = new Turbine.Orchestrator.AWS.Data.Contract.Messages.SubmitJobMessage();
            string user     = Container.GetAppContext().UserName;

            using (TurbineModelContainer container = new TurbineModelContainer())
            {
                Job obj = container.Jobs.Single <Job>(s => s.Id == this.Id);  //Pulls the job that matches id
                if (obj.User.Name != user)
                {
                    throw new ArgumentException(
                              String.Format("Authorization Denied For {0}, Owner {1}", user, obj.User.Name)
                              );
                }
                if (obj.State != "create")
                {
                    throw new InvalidStateChangeException("Violation of state machine");
                }

                // Simple check
                ValidateConfig(obj.Simulation);
                // TODO: DIJ Application Validators
                // container.GetApplication(obj.Simulation.Application).Validate(obj.Simulation)

                obj.State  = "submit";
                obj.Submit = DateTime.UtcNow;

                container.SaveChanges();

                job.Id             = obj.guid;
                job.Inc            = obj.Id;
                job.Initialize     = obj.Initialize;
                job.Reset          = obj.Reset;
                job.SimulationId   = obj.SimulationId;
                job.SimulationName = obj.Simulation.Name;
                var messages  = new Turbine.Orchestrator.AWS.Data.Contract.Messages.SubmitJobMessage[] { job };
                var jobIdList = listener.PutOnQueue(messages);

                if (jobIdList.Count != 1)
                {
                    obj.State    = "failure";
                    obj.Finished = DateTime.UtcNow;
                    string msg = String.Format("Failed to Add Job {0} to SQS Queue", obj.guid);
                    var    w   = new Message()
                    {
                        Id = Guid.NewGuid(), Value = msg
                    };
                    obj.Messages.Add(w);
                    container.SaveChanges();
                }
            }
        }
Exemplo n.º 2
0
        private static void Run()
        {
            // Check Request Queue
            //Turbine.Consumer.AWS.Data.Contract.Messages.Message msg = null;
            var context = Turbine.Orchestrator.AWS.AppUtility.GetContext();
            // Update Job Queue

            var ms = new Turbine.Orchestrator.AWS.Data.Contract.SimpleMessageListener();

            ms.Setup();

            while (true)
            {
                // Check for New Jobs put on Queue
                var jobs  = GetJobsToSchedule();
                var count = ms.PutOnQueue(jobs);
                Debug.WriteLine("Put Queue Jobs: " + count);

                // Check For Requests
                RPCEnvelope[] messages = ms.Listen();
                if (messages == null)
                {
                    continue;
                }

                Debug.WriteLine("Listen returned messages: " + messages.Count());
                foreach (var msg in messages)
                {
                    Debug.WriteLine("Message: " + msg.Operation);

                    if (msg.Operation == "Register")
                    {
                        // Register and send RegistrationInfo back to Response Queue
                        var registration = (Turbine.Consumer.AWS.Data.Contract.Messages.Register)msg.Message;
                        var consumerId   = registration.ConsumerId;
                        var instanceId   = registration.InstanceID;
                        // successfully registered
                        Debug.WriteLine("SendRegistrationInfo");
                        ms.SendRegistrationInfo(msg);
                    }
                    else
                    {
                        Debug.WriteLine(String.Format("Unknown Operation: {0}", msg.Operation));
                    }
                }
            }
        }