Browse code

Revert "Completely disable priority scheduler when no weights are provided"

This reverts commit 66c98f51f56761786f55aec5ab0fcd90e3fa4594.

Change-Id: I45f03e1793472792260e89fe5683a5c40fd99b7f
Reviewed-on: http://photon-jenkins.eng.vmware.com:8082/4374
Tested-by: gerrit-photon <photon-checkins@vmware.com>
Reviewed-by: gerrit-photon <photon-checkins@vmware.com>

Harish Udaiya Kumar authored on 2017/11/23 05:11:15
Showing 1 changed files
... ...
@@ -7,14 +7,13 @@ from Queue import PriorityQueue
7 7
 from SpecData import SPECS
8 8
 
9 9
 class Scheduler(object):
10
-
10
+    
11 11
     lock=threading.Lock()
12 12
     listOfAlreadyBuiltPackages=[]
13 13
     listOfPackagesToBuild=[]
14 14
     listOfPackagesCurrentlyBuilding=[]
15 15
     sortedList=[]
16
-    listOfPackagesNextToBuild=[]
17
-    queueOfPackagesNextToBuild=PriorityQueue()
16
+    listOfPackagesNextToBuild=PriorityQueue()
18 17
     listOfFailedPackages=[]
19 18
     alldependencyGraph = {}
20 19
     dependencyGraph = {}
... ...
@@ -24,14 +23,14 @@ class Scheduler(object):
24 24
     logger=None
25 25
     event=None
26 26
     stopScheduling=False
27
-
27
+    
28 28
     @staticmethod
29 29
     def setEvent(event):
30 30
         Scheduler.event=event
31
-
31
+    
32 32
     @staticmethod
33 33
     def setLog(logName,logPath):
34
-        Scheduler.logger = Logger.getLogger(logName, logPath)
34
+        Scheduler.logger = Logger.getLogger(logName, logPath)    
35 35
 
36 36
     @staticmethod
37 37
     def getBuildRequiredPackages(package):
... ...
@@ -108,7 +107,12 @@ class Scheduler(object):
108 108
 
109 109
     @staticmethod
110 110
     def setPriorities():
111
-        Scheduler.parseWeights()
111
+	if constants.packageWeightsPath == None:
112
+            Scheduler.logger.info("Priority Scheduler disabled")
113
+            Scheduler.isPriorityScheduler = 0
114
+	else:
115
+	    Scheduler.parseWeights()
116
+
112 117
         for package in Scheduler.sortedList:
113 118
             Scheduler.dependencyGraph[package] = {}
114 119
             Scheduler.alldependencyGraph[package] = {}
... ...
@@ -129,41 +133,37 @@ class Scheduler(object):
129 129
         Scheduler.logger.info("set Priorities: Priority of all packages")
130 130
         Scheduler.logger.info(Scheduler.priorityMap)
131 131
 
132
+
132 133
     @staticmethod
133 134
     def setParams(sortedList,listOfAlreadyBuiltPackages):
134
-        if constants.packageWeightsPath == None:
135
-            Scheduler.logger.info("Priority Scheduler disabled")
136
-            Scheduler.isPriorityScheduler = 0
137 135
         Scheduler.sortedList=sortedList
138 136
         Scheduler.listOfAlreadyBuiltPackages=listOfAlreadyBuiltPackages
139 137
         for x in Scheduler.sortedList:
140 138
             if x not in Scheduler.listOfAlreadyBuiltPackages or x in constants.testForceRPMS:
141 139
                 Scheduler.listOfPackagesToBuild.append(x)
142 140
         Scheduler.listOfPackagesCurrentlyBuilding=[]
143
-        Scheduler.queueOfPackagesNextToBuild=[]
141
+        Scheduler.listOfPackagesNextToBuild=[]
144 142
         Scheduler.listOfFailedPackages=[]
145
-        if Scheduler.isPriorityScheduler == 1:
146
-            Scheduler.setPriorities()
147
-
143
+        Scheduler.setPriorities()
144
+        
148 145
     @staticmethod
149 146
     def getRequiredPackages(package):
150 147
         listRequiredRPMPackages=[]
151 148
         listRequiredRPMPackages.extend(SPECS.getData().getBuildRequiresForPackage(package))
152 149
         listRequiredRPMPackages.extend(SPECS.getData().getRequiresAllForPackage(package))
153
-
150
+        
154 151
         listRequiredPackages=[]
155 152
 
156 153
         for pkg in listRequiredRPMPackages:
157 154
             basePkg=SPECS.getData().getSpecName(pkg)
158 155
             if basePkg not in listRequiredPackages:
159 156
                 listRequiredPackages.append(basePkg)
160
-
157
+        
161 158
         return listRequiredPackages
162
-
159
+    
163 160
     @staticmethod
164 161
     def __getListNextPackagesReadyToBuild():
165
-        queueOfPackagesNextToBuild=PriorityQueue()
166
-        listOfPackagesNextToBuild=[]
162
+        listOfPackagesNextToBuild=PriorityQueue()
167 163
         Scheduler.logger.info("Checking for next possible packages to build")
168 164
         for pkg in Scheduler.listOfPackagesToBuild:
169 165
             if pkg in Scheduler.listOfPackagesCurrentlyBuilding:
... ...
@@ -178,13 +178,9 @@ class Scheduler(object):
178 178
                     Scheduler.logger.info(reqPkg+" is not available. So we cannot build "+ pkg +" at this moment.")
179 179
                     break
180 180
             if canBuild:
181
+                listOfPackagesNextToBuild.put((-Scheduler.priorityMap[pkg], pkg))
181 182
                 Scheduler.logger.info("Adding "+ pkg +" to the schedule list")
182
-                if Scheduler.isPriorityScheduler:
183
-                    queueOfPackagesNextToBuild.put((-Scheduler.priorityMap[pkg], pkg))
184
-                    return queueOfPackagesNextToBuild
185
-                else:
186
-                    listOfPackagesNextToBuild.append(pkg)
187
-                    return listOfPackagesNextToBuild
183
+        return listOfPackagesNextToBuild
188 184
 
189 185
     @staticmethod
190 186
     def getNextPackageToBuild():
... ...
@@ -200,75 +196,62 @@ class Scheduler(object):
200 200
             if Scheduler.event is not None:
201 201
                 Scheduler.event.set()
202 202
 
203
-        if 0 == Scheduler.isPriorityScheduler:
204
-            if Scheduler.listOfPackagesNextToBuild is None or len(Scheduler.listOfPackagesNextToBuild) == 0:
205
-                listOfPackagesNextToBuild=Scheduler.__getListNextPackagesReadyToBuild()
206
-                Scheduler.listOfPackagesNextToBuild=listOfPackagesNextToBuild
207
-
208
-            if Scheduler.listOfPackagesNextToBuild is None or len(Scheduler.listOfPackagesNextToBuild) == 0:
209
-                Scheduler.logger.info("Released scheduler lock")
210
-                Scheduler.lock.release()
211
-                return None
212
-
213
-            package=Scheduler.listOfPackagesNextToBuild.pop(0)
214
-
215
-            if len(Scheduler.listOfPackagesNextToBuild) > 0:
216
-                ThreadPool.ThreadPool.activateWorkerThreads(len(Scheduler.listOfPackagesNextToBuild))
217
-        else:
218
-            try:
219
-                if Scheduler.queueOfPackagesNextToBuild.qsize() == 0:
220
-                    queueOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild()
221
-                    Scheduler.queueOfPackagesNextToBuild = queueOfPackagesNextToBuild
222
-            except:
223
-                if len(Scheduler.queueOfPackagesNextToBuild) == 0:
224
-                    queueOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild()
225
-                    Scheduler.queueOfPackagesNextToBuild = queueOfPackagesNextToBuild
226
-
227
-            if Scheduler.queueOfPackagesNextToBuild:
228
-                 if Scheduler.queueOfPackagesNextToBuild.qsize() == 0:
229
-                     Scheduler.logger.info("Released scheduler lock")
230
-                     Scheduler.lock.release()
231
-                     return None
232
-
233
-                 packageTup=Scheduler.queueOfPackagesNextToBuild.get()
234
-
235
-                 if packageTup[0] == 0:
236
-                    queueOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild()
237
-                    Scheduler.queueOfPackagesNextToBuild = queueOfPackagesNextToBuild
238
-                    packageTup = Scheduler.queueOfPackagesNextToBuild.get()
239
-
240
-                 package = packageTup[1]
241
-                 Scheduler.logger.info("PackagesNextToBuild " + str(packageTup))
242
-                 if Scheduler.queueOfPackagesNextToBuild.qsize() > 0:
243
-                     ThreadPool.ThreadPool.activateWorkerThreads(Scheduler.queueOfPackagesNextToBuild.qsize())
203
+        try:
204
+            if Scheduler.listOfPackagesNextToBuild.qsize() == 0:
205
+                listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild()
206
+                Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild
207
+        except:
208
+            if len(Scheduler.listOfPackagesNextToBuild) == 0:
209
+                listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild()
210
+                Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild
211
+
212
+        if Scheduler.listOfPackagesNextToBuild.qsize() == 0:
213
+            Scheduler.logger.info("Released scheduler lock")
214
+            Scheduler.lock.release()
215
+            return None
244 216
 
217
+        packageTup=Scheduler.listOfPackagesNextToBuild.get()
218
+
219
+        if packageTup[0] == 0 and Scheduler.isPriorityScheduler == 1:
220
+            listOfPackagesNextToBuild = Scheduler.__getListNextPackagesReadyToBuild()
221
+            Scheduler.listOfPackagesNextToBuild = listOfPackagesNextToBuild
222
+	    if Scheduler.listOfPackagesNextToBuild.qsize() == 0:
223
+            	Scheduler.logger.info("Released scheduler lock")
224
+            	Scheduler.lock.release()
225
+            	return None
226
+            packageTup = Scheduler.listOfPackagesNextToBuild.get()
227
+
228
+        package = packageTup[1]
229
+        Scheduler.logger.info("PackagesNextToBuild " + str(packageTup))
230
+        if Scheduler.listOfPackagesNextToBuild.qsize() > 0:
231
+            ThreadPool.ThreadPool.activateWorkerThreads(Scheduler.listOfPackagesNextToBuild.qsize())
245 232
         Scheduler.logger.info("Released scheduler lock")
246 233
         Scheduler.lock.release()
247 234
         Scheduler.listOfPackagesCurrentlyBuilding.append(package)
248 235
         Scheduler.listOfPackagesToBuild.remove(package)
249 236
         return package
250
-
237
+    
251 238
     #can be synchronized TODO
252 239
     @staticmethod
253 240
     def notifyPackageBuildCompleted(package):
254 241
         if package in Scheduler.listOfPackagesCurrentlyBuilding:
255 242
             Scheduler.listOfPackagesCurrentlyBuilding.remove(package)
256 243
             Scheduler.listOfAlreadyBuiltPackages.append(package)
257
-
258
-
244
+    
245
+        
259 246
     #can be synchronized TODO
260 247
     @staticmethod
261 248
     def notifyPackageBuildFailed(package):
262 249
         if package in Scheduler.listOfPackagesCurrentlyBuilding:
263 250
             Scheduler.listOfPackagesCurrentlyBuilding.remove(package)
264 251
             Scheduler.listOfFailedPackages.append(package)
265
-
252
+                
266 253
     @staticmethod
267 254
     def isAllPackagesBuilt():
268 255
         if len(Scheduler.listOfPackagesToBuild) == 0 :
269 256
             return True
270 257
         return False
271
-
258
+    
272 259
     @staticmethod
273 260
     def isAnyPackagesFailedToBuild():
274 261
         if len(Scheduler.listOfFailedPackages) != 0: