harbor
  • Introduction
  • 安装
  • API
  • harbor数据库
  • 镜像与源码项目
  • UI
    • user
      • GET_/users
    • Router
    • Controller-API
      • user
      • project
      • member
      • repository
      • base.go
  • JobService
  • secretkey
  • 日志
Powered by GitBook
On this page
  • 业务逻辑
  • 插入job记录
  • 读取job记录
  • 开启多个线程
  • 分发job
  • 领取job
  • 处理job

Was this helpful?

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

Previousbase.goNextsecretkey

Last updated 4 years ago

Was this helpful?