From 0e808a449a8ed7658dfea962eed3059e6e32ec90 Mon Sep 17 00:00:00 2001 From: bigeagle Date: Fri, 22 Apr 2016 20:59:43 +0800 Subject: [PATCH] refactor(worker): change provider's Run method to Start, and change logfile handling --- worker/cmd_provider.go | 14 +++++++++----- worker/provider.go | 6 ++++-- worker/provider_test.go | 13 +++++++++---- worker/rsync_provider.go | 2 +- worker/runner.go | 9 --------- 5 files changed, 23 insertions(+), 21 deletions(-) diff --git a/worker/cmd_provider.go b/worker/cmd_provider.go index ca808ad..b97933f 100644 --- a/worker/cmd_provider.go +++ b/worker/cmd_provider.go @@ -20,6 +20,7 @@ type cmdProvider struct { cmdConfig command []string cmd *cmdJob + logFile *os.File } func newCmdProvider(c cmdConfig) (*cmdProvider, error) { @@ -46,10 +47,7 @@ func newCmdProvider(c cmdConfig) (*cmdProvider, error) { return provider, nil } -func (p *cmdProvider) InitRunner() { -} - -func (p *cmdProvider) Run() error { +func (p *cmdProvider) Start() error { env := map[string]string{ "TUNASYNC_MIRROR_NAME": p.Name(), "TUNASYNC_WORKING_DIR": p.WorkingDir(), @@ -65,13 +63,16 @@ func (p *cmdProvider) Run() error { if err != nil { return err } - // defer logFile.Close() + p.logFile = logFile p.cmd.SetLogFile(logFile) return p.cmd.Start() } func (p *cmdProvider) Wait() error { + if p.logFile != nil { + defer p.logFile.Close() + } return p.cmd.Wait() } @@ -79,6 +80,9 @@ func (p *cmdProvider) Terminate() error { if p.cmd == nil { return errors.New("provider command job not initialized") } + if p.logFile != nil { + defer p.logFile.Close() + } err := p.cmd.Terminate() return err } diff --git a/worker/provider.go b/worker/provider.go index 065c40e..806c073 100644 --- a/worker/provider.go +++ b/worker/provider.go @@ -16,8 +16,10 @@ type mirrorProvider interface { Name() string // TODO: implement Run, Terminate and Hooks - // run mirror job - Run() + // run mirror job in background + Start() + // Wait job to finish + Wait() // terminate mirror job Terminate() // job hooks diff --git a/worker/provider_test.go b/worker/provider_test.go index f249612..79b5b03 100644 --- a/worker/provider_test.go +++ b/worker/provider_test.go @@ -80,6 +80,9 @@ func TestCmdProvider(t *testing.T) { logDir: tmpDir, logFile: tmpFile, interval: 600, + env: map[string]string{ + "AOSP_REPO_BIN": "/usr/local/bin/repo", + }, } provider, err := newCmdProvider(c) @@ -97,13 +100,15 @@ echo $TUNASYNC_WORKING_DIR echo $TUNASYNC_MIRROR_NAME echo $TUNASYNC_UPSTREAM_URL echo $TUNASYNC_LOG_FILE +echo $AOSP_REPO_BIN ` exceptedOutput := fmt.Sprintf( - "%s\n%s\n%s\n%s\n", + "%s\n%s\n%s\n%s\n%s\n", provider.WorkingDir(), provider.Name(), provider.upstreamURL, provider.LogFile(), + "/usr/local/bin/repo", ) err = ioutil.WriteFile(scriptFile, []byte(scriptContent), 0755) So(err, ShouldBeNil) @@ -111,7 +116,7 @@ echo $TUNASYNC_LOG_FILE So(err, ShouldBeNil) So(readedScriptContent, ShouldResemble, []byte(scriptContent)) - err = provider.Run() + err = provider.Start() So(err, ShouldBeNil) err = provider.Wait() So(err, ShouldBeNil) @@ -129,7 +134,7 @@ echo $TUNASYNC_LOG_FILE So(err, ShouldBeNil) So(readedScriptContent, ShouldResemble, []byte(scriptContent)) - err = provider.Run() + err = provider.Start() So(err, ShouldBeNil) err = provider.Wait() So(err, ShouldNotBeNil) @@ -143,7 +148,7 @@ sleep 5 err = ioutil.WriteFile(scriptFile, []byte(scriptContent), 0755) So(err, ShouldBeNil) - err = provider.Run() + err = provider.Start() So(err, ShouldBeNil) go func() { diff --git a/worker/rsync_provider.go b/worker/rsync_provider.go index b0bcd06..1687109 100644 --- a/worker/rsync_provider.go +++ b/worker/rsync_provider.go @@ -33,7 +33,7 @@ func newRsyncProvider(c rsyncConfig) (*rsyncProvider, error) { } // TODO: implement this -func (p *rsyncProvider) Run() { +func (p *rsyncProvider) Start() { } diff --git a/worker/runner.go b/worker/runner.go index 9693ddb..92edbba 100644 --- a/worker/runner.go +++ b/worker/runner.go @@ -45,15 +45,6 @@ func newCmdJob(cmdAndArgs []string, workingDir string, env map[string]string) *c } } -// start job and wait -func (c *cmdJob) Run() error { - err := c.cmd.Start() - if err != nil { - return err - } - return c.Wait() -} - func (c *cmdJob) Start() error { c.finished = make(chan struct{}, 1) return c.cmd.Start()