/// <summary> /// Queries the registry for new jobs to schedule /// </summary> private void PollNewJobs() { List<Job> temp = new List<Job>(); using (Context context = ContextManager.Instance.CreateContext(ConnectionMode.AutoOpen, TransactionMode.AutoCommit)) { context.ContextGuid = contextGuid; foreach (var queue in Cluster.Queues.Values) { var qi = new QueueInstance(context); qi.Guid = queue.Guid; qi.Load(); var ji = qi.GetNextJobInstance(); if (ji != null) { var user = new User(context); user.Guid = ji.UserGuidOwner; user.Load(); var job = new Job() { Guid = ji.Guid, JobID = ji.JobID, UserGuid = user.Guid, UserName = user.Name, QueueGuid = ji.ParentReference.Guid, WorkflowTypeName = ji.WorkflowTypeName, }; if ((ji.JobExecutionStatus & JobExecutionState.Scheduled) != 0) { job.Status = JobStatus.Starting; ji.JobExecutionStatus = JobExecutionState.Starting; } else if ((ji.JobExecutionStatus & JobExecutionState.Persisted) != 0) { // Save cancel requested flag here ji.JobExecutionStatus ^= JobExecutionState.Persisted; ji.JobExecutionStatus |= JobExecutionState.Starting; job.Status = JobStatus.Resuming; } else { throw new NotImplementedException(); } ji.Save(); lock (queue) { queue.Jobs.Add(job.Guid, job); } temp.Add(job); } } } foreach (var job in temp) { StartOrResumeJob(job); } }
protected override void GetInitializedQuery_Graywulf(QueryBase query, string queryString, string outputTable) { var federationname = Federation.AppSettings.FederationName; var ef = new EntityFactory(Context); var federation = ef.LoadEntity<Federation>(federationname); var jd = ef.LoadEntity<JobDefinition>(federationname, typeof(SqlQueryJob).Name); var user = new User(Context); user.Guid = Context.UserGuid; user.Load(); // Load settings // **** TODO: this always takes settings from SqlQueryJob!! var settings = Jhu.Graywulf.Registry.Util.LoadSettings<Settings>(jd.Settings); query.ExecutionMode = ExecutionMode.Graywulf; query.FederationReference.Name = federationname; query.QueryString = queryString; query.SourceDatabaseVersionName = settings[Settings.HotDatabaseVersionName]; query.StatDatabaseVersionName = settings[Settings.StatDatabaseVersionName]; query.QueryTimeout = int.Parse(settings[Settings.LongQueryTimeout]); // Add MyDB as custom source var mydbds = new GraywulfDataset(); mydbds.Name = settings[Settings.DefaultDatasetName]; mydbds.DefaultSchemaName = settings[Settings.DefaultSchemaName]; mydbds.DatabaseInstance.Value = user.GetUserDatabaseInstance(federation.MyDBDatabaseVersion); mydbds.CacheSchemaConnectionString(); query.CustomDatasets.Add(mydbds); query.DefaultDataset = mydbds; // Set up MYDB for destination // ****** TODO add output table name to settings */ query.Destination.Table = new Table() { Dataset = mydbds, SchemaName = settings[Settings.DefaultSchemaName], TableName = String.IsNullOrWhiteSpace(outputTable) ? "outputtable" : outputTable }; query.Destination.Operation = DestinationTableOperation.Drop | DestinationTableOperation.Create; // Set up temporary database var tempds = new GraywulfDataset(); tempds.IsOnLinkedServer = false; tempds.DatabaseVersion.Value = federation.TempDatabaseVersion; query.TemporaryDataset = tempds; query.TemporaryDataset.DefaultSchemaName = settings[Settings.TemporarySchemaName]; // Set up code database var codeds = new GraywulfDataset(); codeds.Name = "Code"; // *** TODO codeds.IsOnLinkedServer = false; codeds.DatabaseVersion.Value = federation.CodeDatabaseVersion; query.CodeDataset = codeds; query.CodeDataset.DefaultSchemaName = "dbo"; // *** TODO }
protected override void GetInitializedQuery_Graywulf(QueryBase query, string queryString, string outputTable) { var ef = new EntityFactory(Context); var federation = ef.LoadEntity<Federation>(Registry.AppSettings.FederationName); var jd = ef.LoadEntity<JobDefinition>(Registry.AppSettings.FederationName, typeof(SqlQueryJob).Name); var settings = new SqlQueryJobSettings(jd.Settings); var user = new User(Context); user.Guid = Context.UserGuid; user.Load(); query.ExecutionMode = ExecutionMode.Graywulf; query.FederationReference.Name = Registry.AppSettings.FederationName; query.QueryString = queryString; query.SourceDatabaseVersionName = settings.HotDatabaseVersionName; query.StatDatabaseVersionName = settings.StatDatabaseVersionName; query.QueryTimeout = settings.QueryTimeout; // Add MyDB as custom source var mydbds = new GraywulfDataset(); mydbds.Name = settings.DefaultDatasetName; mydbds.DefaultSchemaName = settings.DefaultSchemaName; mydbds.DatabaseInstance.Value = federation.MyDBDatabaseVersion.GetUserDatabaseInstance(user); mydbds.CacheSchemaConnectionString(); mydbds.IsMutable = true; query.CustomDatasets.Add(mydbds); query.DefaultDataset = mydbds; // Set up MYDB for destination // ****** TODO add output table name to settings */ query.Destination = new DestinationTable( mydbds, mydbds.DatabaseName, settings.DefaultSchemaName, String.IsNullOrWhiteSpace(outputTable) ? "outputtable" : outputTable, TableInitializationOptions.Drop | TableInitializationOptions.Create); // Set up temporary database var tempds = new GraywulfDataset(); tempds.Name = Registry.Constants.TempDbName; tempds.IsOnLinkedServer = false; tempds.DatabaseVersion.Value = federation.TempDatabaseVersion; query.TemporaryDataset = tempds; // Set up code database var codeds = new GraywulfDataset(); codeds.Name = Registry.Constants.CodeDbName; codeds.IsOnLinkedServer = false; codeds.DatabaseVersion.Value = federation.CodeDatabaseVersion; query.CodeDataset = codeds; }