bug fixes and small changes
This commit is contained in:
parent
2cb6078900
commit
c9d2a1b71b
@ -5,7 +5,10 @@ import subprocess, shutil, time, hashlib
|
||||
from netrender.utils import *
|
||||
import netrender.model
|
||||
|
||||
|
||||
JOB_WAITING = 0 # before all data has been entered
|
||||
JOB_PAUSED = 1 # paused by user
|
||||
JOB_QUEUED = 2 # ready to be dispatched
|
||||
|
||||
class MRenderSlave(netrender.model.RenderSlave):
|
||||
def __init__(self, name, adress, stats):
|
||||
super().__init__()
|
||||
@ -25,7 +28,7 @@ class MRenderSlave(netrender.model.RenderSlave):
|
||||
|
||||
# sorting key for jobs
|
||||
def groupKey(job):
|
||||
return (job.framesLeft() > 0, job.priority, job.credits)
|
||||
return (job.status, job.framesLeft() > 0, job.priority, job.credits)
|
||||
|
||||
class MRenderJob(netrender.model.RenderJob):
|
||||
def __init__(self, job_id, name, path, chunks = 1, priority = 1, credits = 100.0, blacklist = []):
|
||||
@ -33,6 +36,7 @@ class MRenderJob(netrender.model.RenderJob):
|
||||
self.id = job_id
|
||||
self.name = name
|
||||
self.path = path
|
||||
self.status = JOB_WAITING
|
||||
self.frames = []
|
||||
self.chunks = chunks
|
||||
self.priority = priority
|
||||
@ -40,6 +44,9 @@ class MRenderJob(netrender.model.RenderJob):
|
||||
self.blacklist = blacklist
|
||||
self.last_dispatched = time.time()
|
||||
|
||||
def start(self):
|
||||
self.status = JOB_QUEUED
|
||||
|
||||
def update(self):
|
||||
self.credits -= 5 # cost of one frame
|
||||
self.credits += (time.time() - self.last_dispatched) / 60
|
||||
@ -233,8 +240,6 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
message = []
|
||||
|
||||
for job in self.server:
|
||||
results = job.status()
|
||||
|
||||
message.append(job.serialize())
|
||||
|
||||
self.send_head()
|
||||
@ -322,25 +327,14 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
job_chunks = int(self.headers.get('job-chunks', "1"))
|
||||
blacklist = self.headers.get('slave-blacklist', '').split()
|
||||
|
||||
print("blacklist", blacklist)
|
||||
|
||||
job_path = str(self.rfile.read(length), encoding='utf8')
|
||||
|
||||
if os.path.exists(job_path):
|
||||
f = open(job_path, "rb")
|
||||
buf = f.read()
|
||||
f.close()
|
||||
job_id = self.server.nextJobID()
|
||||
|
||||
job_id = hashlib.md5(buf).hexdigest()
|
||||
job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
|
||||
self.server.addJob(job)
|
||||
|
||||
del buf
|
||||
|
||||
job = self.server.getJobByID(job_id)
|
||||
|
||||
if job == None:
|
||||
job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
|
||||
self.server.addJob(job)
|
||||
|
||||
if ":" in job_frame_string:
|
||||
frame_start, frame_end = [int(x) for x in job_frame_string.split(":")]
|
||||
|
||||
@ -349,6 +343,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
else:
|
||||
job_frame = int(job_frame_string)
|
||||
frame = job.addFrame(job_frame)
|
||||
|
||||
job.start()
|
||||
|
||||
self.send_head(headers={"job-id": job_id})
|
||||
else:
|
||||
@ -385,9 +381,9 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
length = int(self.headers['content-length'])
|
||||
job_frame_string = self.headers['job-frame']
|
||||
|
||||
name, stats = eval(str(self.rfile.read(length), encoding='utf8'))
|
||||
slave_info = netrender.model.RenderSlave.materialize(eval(str(self.rfile.read(length), encoding='utf8')))
|
||||
|
||||
slave_id = self.server.addSlave(name, self.client_address, stats)
|
||||
slave_id = self.server.addSlave(slave_info.name, self.client_address, slave_info.stats)
|
||||
|
||||
self.send_head(headers = {"slave-id": slave_id})
|
||||
|
||||
@ -410,23 +406,19 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
job_chunks = int(self.headers.get('job-chunks', "1"))
|
||||
blacklist = self.headers.get('slave-blacklist', '').split()
|
||||
|
||||
buf = self.rfile.read(length)
|
||||
job_id = self.server.nextJobID()
|
||||
|
||||
job_id = hashlib.md5(buf).hexdigest()
|
||||
buf = self.rfile.read(length)
|
||||
|
||||
job_path = job_id + ".blend"
|
||||
|
||||
f = open(PATH_PREFIX + job_path, "wb")
|
||||
f.write(buf)
|
||||
f.close()
|
||||
|
||||
del buf
|
||||
|
||||
job = self.server.getJobByID(job_id)
|
||||
|
||||
if job == None:
|
||||
job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
|
||||
self.server.addJob(job)
|
||||
job = MRenderJob(job_id, job_name, job_path, chunks = job_chunks, blacklist = blacklist)
|
||||
self.server.addJob(job)
|
||||
|
||||
if ":" in job_frame_string:
|
||||
frame_start, frame_end = [int(x) for x in job_frame_string.split(":")]
|
||||
@ -437,6 +429,8 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
|
||||
job_frame = int(job_frame_string)
|
||||
frame = job.addFrame(job_frame)
|
||||
|
||||
job.start()
|
||||
|
||||
self.send_head(headers={"job-id": job_id})
|
||||
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
elif self.path == "render":
|
||||
@ -495,6 +489,11 @@ class RenderMasterServer(http.server.HTTPServer):
|
||||
self.jobs_map = {}
|
||||
self.slaves = []
|
||||
self.slaves_map = {}
|
||||
self.job_id = 0
|
||||
|
||||
def nextJobID(self):
|
||||
self.job_id += 1
|
||||
return str(self.job_id)
|
||||
|
||||
def addSlave(self, name, adress, stats):
|
||||
slave = MRenderSlave(name, adress, stats)
|
||||
@ -540,7 +539,7 @@ class RenderMasterServer(http.server.HTTPServer):
|
||||
def getNewJob(self, slave_id):
|
||||
if self.jobs:
|
||||
for job in reversed(self.jobs):
|
||||
if job.framesLeft() > 0 and slave_id not in job.blacklist:
|
||||
if job.status == JOB_QUEUED and job.framesLeft() > 0 and slave_id not in job.blacklist:
|
||||
return job, job.getFrames()
|
||||
|
||||
return None, None
|
||||
|
@ -65,7 +65,7 @@ class RenderJob:
|
||||
def __len__(self):
|
||||
return len(self.frames)
|
||||
|
||||
def status(self):
|
||||
def framesStatus(self):
|
||||
results = {
|
||||
QUEUED: 0,
|
||||
DISPATCHED: 0,
|
||||
|
@ -66,7 +66,7 @@ class RENDER_OT_netclientstatus(bpy.types.Operator):
|
||||
netprops.jobs.add()
|
||||
job = netprops.jobs[-1]
|
||||
|
||||
job_results = j.status()
|
||||
job_results = j.framesStatus()
|
||||
|
||||
job.id = j.id
|
||||
job.name = j.name
|
||||
@ -210,15 +210,15 @@ class RENDER_OT_netclientcancel(bpy.types.Operator):
|
||||
__props__ = []
|
||||
|
||||
def poll(self, context):
|
||||
netrender = scene.network_render
|
||||
return netrender.active_job_index >= 0 and len(netrender.jobs) > 0
|
||||
netprops = context.scene.network_render
|
||||
return netprops.active_job_index >= 0 and len(netprops.jobs) > 0
|
||||
|
||||
def execute(self, context):
|
||||
netprops = context.scene.network_render
|
||||
conn = clientConnection(context.scene)
|
||||
|
||||
if conn:
|
||||
job = netprops.jobs[netrender.active_job_index]
|
||||
job = netprops.jobs[netprops.active_job_index]
|
||||
|
||||
conn.request("POST", "cancel", headers={"job-id":job.id})
|
||||
|
||||
|
@ -11,7 +11,10 @@ INCREMENT_TIMEOUT = 1
|
||||
|
||||
def slave_Info():
|
||||
sysname, nodename, release, version, machine = os.uname()
|
||||
return (nodename, sysname + " " + release + " " + machine)
|
||||
slave = netrender.model.RenderSlave()
|
||||
slave.name = nodename
|
||||
slave.stats = sysname + " " + release + " " + machine
|
||||
return slave
|
||||
|
||||
def testCancel(conn, job_id):
|
||||
conn.request("HEAD", "status", headers={"job-id":job_id})
|
||||
@ -35,7 +38,7 @@ def render_slave(engine, scene):
|
||||
conn = clientConnection(scene)
|
||||
|
||||
if conn:
|
||||
conn.request("POST", "slave", repr(slave_Info()))
|
||||
conn.request("POST", "slave", repr(slave_Info().serialize()))
|
||||
response = conn.getresponse()
|
||||
|
||||
slave_id = response.getheader("slave-id")
|
||||
|
@ -255,6 +255,18 @@ NetRenderSlave.StringProperty( attr="adress",
|
||||
maxlen = 64,
|
||||
default = "")
|
||||
|
||||
NetRenderSlave.StringProperty( attr="last_seen",
|
||||
name="Last time slave was seen by server",
|
||||
description="",
|
||||
maxlen = 64,
|
||||
default = "")
|
||||
|
||||
NetRenderSlave.StringProperty( attr="stats",
|
||||
name="Hardware stats of the slave",
|
||||
description="",
|
||||
maxlen = 128,
|
||||
default = "")
|
||||
|
||||
NetRenderJob.StringProperty( attr="id",
|
||||
name="ID of the job",
|
||||
description="",
|
||||
|
Loading…
Reference in New Issue
Block a user