refactor(worker): change provider's Run method to Start, and change logfile handling

This commit is contained in:
bigeagle 2016-04-22 20:59:43 +08:00
parent 276ab233c5
commit 0e808a449a
No known key found for this signature in database
GPG Key ID: 9171A4571C27920A
5 changed files with 23 additions and 21 deletions

View File

@ -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
}

View File

@ -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

View File

@ -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() {

View File

@ -33,7 +33,7 @@ func newRsyncProvider(c rsyncConfig) (*rsyncProvider, error) {
}
// TODO: implement this
func (p *rsyncProvider) Run() {
func (p *rsyncProvider) Start() {
}

View File

@ -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()