[Debconf-video-commits] r412 - in package/branches/pycon09: conf src src/pyconvideo/pyconvideo

benh at alioth.debian.org benh at alioth.debian.org
Sat Mar 28 18:10:31 UTC 2009


Author: benh
Date: 2009-03-28 18:10:31 +0000 (Sat, 28 Mar 2009)
New Revision: 412

Modified:
   package/branches/pycon09/conf/permissions.sql
   package/branches/pycon09/src/dc-do-transcoding
   package/branches/pycon09/src/dc-video-schema.sql
   package/branches/pycon09/src/pyconvideo/pyconvideo/admin.py
   package/branches/pycon09/src/pyconvideo/pyconvideo/models.py
Log:
Move encoding host configuration into the database so we can change it dynamically.


Modified: package/branches/pycon09/conf/permissions.sql
===================================================================
--- package/branches/pycon09/conf/permissions.sql	2009-03-28 18:09:39 UTC (rev 411)
+++ package/branches/pycon09/conf/permissions.sql	2009-03-28 18:10:31 UTC (rev 412)
@@ -2,7 +2,7 @@
 
 GRANT SELECT
 ON conference, conference_room, event, video_event_recording,
-   video_file_status, video_target_format
+   video_file_status, video_target_format, video_encoding_host
 TO videoteam;
 
 GRANT SELECT, INSERT, UPDATE, DELETE

Modified: package/branches/pycon09/src/dc-do-transcoding
===================================================================
--- package/branches/pycon09/src/dc-do-transcoding	2009-03-28 18:09:39 UTC (rev 411)
+++ package/branches/pycon09/src/dc-do-transcoding	2009-03-28 18:10:31 UTC (rev 412)
@@ -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/branches/pycon09/src/dc-video-schema.sql
===================================================================
--- package/branches/pycon09/src/dc-video-schema.sql	2009-03-28 18:09:39 UTC (rev 411)
+++ package/branches/pycon09/src/dc-video-schema.sql	2009-03-28 18:10:31 UTC (rev 412)
@@ -111,6 +111,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 (

Modified: package/branches/pycon09/src/pyconvideo/pyconvideo/admin.py
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/admin.py	2009-03-28 18:09:39 UTC (rev 411)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/admin.py	2009-03-28 18:10:31 UTC (rev 412)
@@ -31,3 +31,4 @@
 admin.site.register(models.VideoEventRecording)
 admin.site.register(models.VideoTargetFormat)
 admin.site.register(models.VideoTargetFile, VideoTargetFileAdmin)
+admin.site.register(models.VideoEncodingHost)

Modified: package/branches/pycon09/src/pyconvideo/pyconvideo/models.py
===================================================================
--- package/branches/pycon09/src/pyconvideo/pyconvideo/models.py	2009-03-28 18:09:39 UTC (rev 411)
+++ package/branches/pycon09/src/pyconvideo/pyconvideo/models.py	2009-03-28 18:10:31 UTC (rev 412)
@@ -146,3 +146,12 @@
         return self.target_filename
     class Meta:
         db_table = u'video_target_file'
+
+class VideoEncodingHost(models.Model):
+    id = models.AutoField(primary_key=True)
+    hostname = models.CharField(max_length=32)
+    nproc = models.IntegerField()
+    def __unicode__(self):
+        return '%s * %d' % (self.hostname, self.nproc)
+    class Meta:
+        db_table = u'video_encoding_host'




More information about the Debconf-video-commits mailing list