[Debconf-video-commits] r436 - package/trunk/src

Ben Hutchings benh at alioth.debian.org
Sat Jun 20 15:01:38 UTC 2009


Author: benh
Date: 2009-06-20 15:01:37 +0000 (Sat, 20 Jun 2009)
New Revision: 436

Modified:
   package/trunk/src/dc-do-transcoding
   package/trunk/src/dc-video-schema.sql
Log:
Move encoding host configuration into the database so we can change it dynamically


Modified: package/trunk/src/dc-do-transcoding
===================================================================
--- package/trunk/src/dc-do-transcoding	2009-06-20 14:58:33 UTC (rev 435)
+++ package/trunk/src/dc-do-transcoding	2009-06-20 15:01:37 UTC (rev 436)
@@ -11,6 +11,15 @@
 import debconfvideo
 from debconfvideo import config, database
 
+def get_host_procs():
+    host_procs = []
+    cur = database.get_cursor()
+    cur.execute('SELECT hostname, nproc FROM video_encoding_host')
+    for host, nproc in cur.fetchall():
+        for proc in range(nproc):
+            host_procs.append((host, proc))
+    return host_procs
+
 class Job(object):
     pass
 
@@ -180,21 +189,14 @@
     return ' '.join(escape(arg) for arg in argv)
 
 def main(pretend=False):
-    host_procs = []
-    for host_nproc in config['ENCODING_HOSTS'].split(' '):
-        if '*' in host_nproc:
-            host, nproc = host_nproc.split('*', 1)
-            nproc = int(nproc)
-        else:
-            host, nproc = host_nproc, 2
-        for proc in range(nproc):
-            host_procs.append((host, proc))
     jobs_by_host_proc = {}
     jobs_by_key = {}
 
     cur = database.get_cursor()
 
     while True:
+        host_procs = get_host_procs()
+
         # Generate a queue of jobs.  Remove the jobs we're running.
         queue = [job
                  for job in get_job_queue()
@@ -213,6 +215,7 @@
             break
 
         # Assign jobs to idle processors.
+        some_idle = False
         for host_proc in host_procs:
             if not jobs_by_host_proc.has_key(host_proc):
                 host, proc = host_proc
@@ -232,6 +235,8 @@
                     else:
                         print ('INFO: skipping %s as no source file'
                                'available' % job.target_filename)
+                else:
+                    some_idle = True
         print 'INFO: running jobs:'
         for host_proc, job in jobs_by_host_proc.items():
             host, proc = host_proc
@@ -239,7 +244,7 @@
 
         # If not all processors are busy, we should look for new jobs in
         # 5 minutes.  Otherwise we should wait for a job to finish.
-        if len(jobs_by_host_proc) < len(host_procs):
+        if some_idle:
             poll_time = time.time() + 300
         else:
             poll_time = None

Modified: package/trunk/src/dc-video-schema.sql
===================================================================
--- package/trunk/src/dc-video-schema.sql	2009-06-20 14:58:33 UTC (rev 435)
+++ package/trunk/src/dc-video-schema.sql	2009-06-20 15:01:37 UTC (rev 436)
@@ -83,6 +83,12 @@
     UNIQUE (event_recording_id, target_format_id)
 );
 
+CREATE TABLE video_encoding_host (
+    id serial PRIMARY KEY,
+    hostname character varying(32) NOT NULL,
+    nproc integer NOT NULL
+);
+
 -- Subject of events.  This is used for categorising events on DVDs
 -- and maybe for normal web pages.
 -- CREATE TABLE subject (




More information about the Debconf-video-commits mailing list