mirror of
https://github.com/tuna/tunasync.git
synced 2025-04-21 04:42:46 +00:00
feature(worker): implemented mirror role (master/slave) option
This commit is contained in:
parent
8399417880
commit
56459f2ce0
@ -29,6 +29,7 @@ command = "/tmp/tunasync/bin/myrsync2.sh"
|
||||
upstream = "https://aosp.google.com/"
|
||||
interval = 2
|
||||
mirror_dir = "/tmp/tunasync/git/AOSP"
|
||||
role = "slave"
|
||||
[mirrors.env]
|
||||
REPO = "/usr/local/bin/aosp-repo"
|
||||
|
||||
|
@ -75,6 +75,7 @@ type mirrorConfig struct {
|
||||
MirrorDir string `toml:"mirror_dir"`
|
||||
LogDir string `toml:"log_dir"`
|
||||
Env map[string]string `toml:"env"`
|
||||
Role string `toml:"role"`
|
||||
|
||||
ExecOnSuccess string `toml:"exec_on_success"`
|
||||
ExecOnFailure string `toml:"exec_on_failure"`
|
||||
|
@ -44,6 +44,7 @@ type mirrorProvider interface {
|
||||
WorkingDir() string
|
||||
LogDir() string
|
||||
LogFile() string
|
||||
IsMaster() bool
|
||||
|
||||
// enter context
|
||||
EnterContext() *Context
|
||||
@ -59,6 +60,7 @@ type baseProvider struct {
|
||||
ctx *Context
|
||||
name string
|
||||
interval time.Duration
|
||||
isMaster bool
|
||||
|
||||
cmd *cmdJob
|
||||
isRunning atomic.Value
|
||||
@ -92,6 +94,10 @@ func (p *baseProvider) Interval() time.Duration {
|
||||
return p.interval
|
||||
}
|
||||
|
||||
func (p *baseProvider) IsMaster() bool {
|
||||
return p.isMaster
|
||||
}
|
||||
|
||||
func (p *baseProvider) WorkingDir() string {
|
||||
if v, ok := p.ctx.Get(_WorkingDirKey); ok {
|
||||
if s, ok := v.(string); ok {
|
||||
|
@ -90,6 +90,16 @@ func (w *Worker) initProviders() {
|
||||
}
|
||||
logDir = formatLogDir(logDir, mirror)
|
||||
|
||||
// IsMaster
|
||||
isMaster := true
|
||||
if mirror.Role == "slave" {
|
||||
isMaster = false
|
||||
} else {
|
||||
if mirror.Role != "" && mirror.Role != "master" {
|
||||
logger.Warningf("Invalid role configuration for %s", mirror.Name)
|
||||
}
|
||||
}
|
||||
|
||||
var provider mirrorProvider
|
||||
|
||||
switch mirror.Provider {
|
||||
@ -105,6 +115,7 @@ func (w *Worker) initProviders() {
|
||||
env: mirror.Env,
|
||||
}
|
||||
p, err := newCmdProvider(pc)
|
||||
p.isMaster = isMaster
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -123,6 +134,7 @@ func (w *Worker) initProviders() {
|
||||
interval: time.Duration(mirror.Interval) * time.Minute,
|
||||
}
|
||||
p, err := newRsyncProvider(rc)
|
||||
p.isMaster = isMaster
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -142,6 +154,7 @@ func (w *Worker) initProviders() {
|
||||
interval: time.Duration(mirror.Interval) * time.Minute,
|
||||
}
|
||||
p, err := newTwoStageRsyncProvider(rc)
|
||||
p.isMaster = isMaster
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
@ -395,7 +408,7 @@ func (w *Worker) updateStatus(jobMsg jobMessage) {
|
||||
smsg := MirrorStatus{
|
||||
Name: jobMsg.name,
|
||||
Worker: w.cfg.Global.Name,
|
||||
IsMaster: true,
|
||||
IsMaster: p.IsMaster(),
|
||||
Status: jobMsg.status,
|
||||
Upstream: p.Upstream(),
|
||||
Size: "unknown",
|
||||
|
Loading…
x
Reference in New Issue
Block a user