Esempio n. 1
0
 public Guid AddSlave(DT.Slave dto)
 {
     using (var db = CreateContext()) {
         var entity = Convert.ToEntity(dto);
         db.Resources.InsertOnSubmit(entity);
         db.SubmitChanges();
         return(entity.ResourceId);
     }
 }
Esempio n. 2
0
        public static Slave ToEntity(DT.Slave source)
        {
            if (source == null)
            {
                return(null);
            }
            var entity = new Slave(); ToEntity(source, entity);

            return(entity);
        }
Esempio n. 3
0
 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();
     }
 }
Esempio n. 4
0
 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;
     }
 }
Esempio n. 5
0
        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));
            }
        }