JobService
业务逻辑
在harbor的数据库中,有一个replication_job
表,每一个镜像版本image:tag
都会对应该表中的一条记录,记录该镜像的复制结果。在jobservice容器中有一个环境变量max_workers
,表示最多开启几个线程进行镜像的复制操作。
插入job记录
Q: replication_job
中的记录是如何被插入进去的?
读取job记录
Q:jobQueue
中的jobID是如何被放进去的?
开启多个线程
在jobservice的main函数中,初始化了一个工作池,工作池中有几个Worker,用来执行复制任务。一个Worker就是一个线程。
main函数的这部分代码如下:
InitWorkerPool()函数如下:
WorkPool中有两个变量:
workerChan:当一个Worker空闲后,Worker本身就会把自已加到workerChan中,job分发器
workerList:
分发job
在jobservice的main函数中起了一个新的线程用来分发job。代码如下:
而Dispatch()函数就是从jobQueue中读取jobID,然后分发给空闲的worker。从WorkerPool的workChan中读取一个空闲的worker,并把。代码如下:
领取job
处理job
Last updated
Was this helpful?