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