Ver Fonte

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

bigeagle há 9 anos atrás
pai
commit
0e808a449a
5 ficheiros alterados com 23 adições e 21 exclusões
  1. 9 5
      worker/cmd_provider.go
  2. 4 2
      worker/provider.go
  3. 9 4
      worker/provider_test.go
  4. 1 1
      worker/rsync_provider.go
  5. 0 9
      worker/runner.go

+ 9 - 5
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
 }

+ 4 - 2
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

+ 9 - 4
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() {

+ 1 - 1
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() {
 
 }
 

+ 0 - 9
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()