@@ -28,31 +28,12 @@ var requirementCheckFuncs = map[string]func(w *currentWorker, r sdk.Requirement)
2828 sdk .OSArchRequirement : checkOSArchRequirement ,
2929}
3030
31- func checkRequirements (w * currentWorker , a * sdk.Action , execGroups []sdk. Group , bookedJobID int64 ) (bool , []sdk.Requirement ) {
31+ func checkRequirements (w * currentWorker , a * sdk.Action , bookedJobID int64 ) (bool , []sdk.Requirement ) {
3232 requirementsOK := true
3333 errRequirements := []sdk.Requirement {}
3434
3535 log .Debug ("checkRequirements> for JobID:%d model of worker: %s" , bookedJobID , w .model .Name )
3636
37- // DEPRECATED
38- // this code is useful for pipelineBuildJob
39- // with CDS Workflows, the queue contains only jobs executable by worker
40- // after removing pbBuildJob, check execGroups here can be removed
41- if execGroups != nil && len (execGroups ) > 0 && w .model .GroupID > 0 {
42- checkGroup := false
43- for _ , g := range execGroups {
44- if g .ID == w .model .GroupID {
45- checkGroup = true
46- break
47- }
48- }
49- if ! checkGroup {
50- requirementsOK = false
51- log .Debug ("checkRequirements> model %s attached to group %d can't run this job" , w .model .Name , w .model .GroupID )
52- return requirementsOK , nil
53- }
54- }
55-
5637 log .Debug ("requirements for %s >>> %+v\n " , a .Name , a .Requirements )
5738 for _ , r := range a .Requirements {
5839 ok , err := checkRequirement (w , r )
@@ -177,19 +158,33 @@ func checkServiceRequirement(w *currentWorker, r sdk.Requirement) (bool, error)
177158}
178159
179160func checkMemoryRequirement (w * currentWorker , r sdk.Requirement ) (bool , error ) {
180- v , err := mem .VirtualMemory ()
161+ var totalMemory int64
162+ neededMemory , err := strconv .ParseInt (r .Value , 10 , 64 )
181163 if err != nil {
182164 return false , err
183165 }
184- totalMemory := v .Total
185166
186- neededMemory , err := strconv .ParseInt (r .Value , 10 , 64 )
187- if err != nil {
188- return false , err
167+ switch w .model .Type {
168+ // Check env variables in a docker is safer than mem.VirtualMemory
169+ case sdk .Docker :
170+ var err error
171+ // Useful for provisioned worker
172+ memoryEnv := os .Getenv ("CDS_MODEL_MEMORY" )
173+ totalMemory , err = strconv .ParseInt (memoryEnv , 10 , 64 )
174+ if err != nil {
175+ return false , err
176+ }
177+ totalMemory = totalMemory * 1024 * 1024
178+ default :
179+ v , err := mem .VirtualMemory ()
180+ if err != nil {
181+ return false , err
182+ }
183+ totalMemory = int64 (v .Total )
189184 }
190185 //Assuming memory is in megabytes
191186 //If we have more than 90% of neededMemory, lets do it
192- return int64 ( totalMemory ) >= (neededMemory * 1024 * 1024 )* 90 / 100 , nil
187+ return totalMemory >= (neededMemory * 1024 * 1024 )* 90 / 100 , nil
193188}
194189
195190func checkVolumeRequirement (w * currentWorker , r sdk.Requirement ) (bool , error ) {
0 commit comments