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?