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(); } } }
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)); } } } }