public Guid AddSlave(DT.Slave dto) { using (var db = CreateContext()) { var entity = Convert.ToEntity(dto); db.Resources.InsertOnSubmit(entity); db.SubmitChanges(); return(entity.ResourceId); } }
public static Slave ToEntity(DT.Slave source) { if (source == null) { return(null); } var entity = new Slave(); ToEntity(source, entity); return(entity); }
public void UpdateSlave(DT.Slave dto) { using (var db = CreateContext()) { var entity = db.Resources.OfType <Slave>().FirstOrDefault(x => x.ResourceId == dto.Id); if (entity == null) { db.Resources.InsertOnSubmit(Convert.ToEntity(dto)); } else { Convert.ToEntity(dto, entity); } db.SubmitChanges(); } }
public static void ToEntity(DT.Slave source, Slave target) { if ((source != null) && (target != null)) { target.ResourceId = source.Id; target.ParentResourceId = source.ParentResourceId; target.Cores = source.Cores; target.CpuSpeed = source.CpuSpeed; target.FreeCores = source.FreeCores; target.FreeMemory = source.FreeMemory; target.IsAllowedToCalculate = source.IsAllowedToCalculate; target.Memory = source.Memory; target.Name = source.Name; target.SlaveState = source.SlaveState; target.CpuArchitecture = source.CpuArchitecture; target.OperatingSystem = source.OperatingSystem; target.LastHeartbeat = source.LastHeartbeat; target.CpuUtilization = source.CpuUtilization; } }
public IEnumerable <DT.Job> GetWaitingJobs(DT.Slave slave, int count) { using (var db = CreateContext()) { var resourceIds = GetParentResources(slave.Id).Select(r => r.Id); var waitingParentJobs = GetParentJobs(resourceIds, count, false); if (count > 0 && waitingParentJobs.Count() >= count) { return(waitingParentJobs.Take(count).ToArray()); } var query = from ar in db.AssignedResources where resourceIds.Contains(ar.ResourceId) && !(ar.Job.IsParentJob && ar.Job.FinishWhenChildJobsFinished) && ar.Job.State == JobState.Waiting && ar.Job.CoresNeeded <= slave.FreeCores && ar.Job.MemoryNeeded <= slave.FreeMemory orderby ar.Job.Priority descending, db.Random() // take random job to avoid the race condition that occurs when this method is called concurrently (the same job would be returned) select Convert.ToDto(ar.Job); var waitingJobs = (count == 0 ? query : query.Take(count)).ToArray(); return(waitingJobs.Union(waitingParentJobs).OrderByDescending(x => x.Priority)); } }