16795: Simplify "kill" behavior in stub driver.
authorTom Clegg <tom@tomclegg.ca>
Tue, 1 Sep 2020 21:10:09 +0000 (17:10 -0400)
committerTom Clegg <tom@tomclegg.ca>
Tue, 1 Sep 2020 21:10:09 +0000 (17:10 -0400)
Now, "kill" just sets a flag, and the "run" stub exits when it notices
the flag.

Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@tomclegg.ca>

lib/dispatchcloud/test/stub_driver.go

index 2dcd6c1283c297b7e0b830701d3709a943c019b2..132bd4d695f0ef88095951b151be592029c31328 100644 (file)
@@ -268,19 +268,17 @@ func (svm *StubVM) Exec(env map[string]string, command string, stdin io.Reader,
                logger.Printf("[test] starting crunch-run stub")
                go func() {
                        var ctr arvados.Container
-                       var started, completed, killed bool
+                       var started, completed bool
                        defer func() {
                                logger.Print("[test] exiting crunch-run stub")
                                svm.Lock()
                                defer svm.Unlock()
                                if svm.running[uuid] != pid {
-                                       if !completed && !killed {
-                                               bugf := svm.sis.driver.Bugf
-                                               if bugf == nil {
-                                                       bugf = logger.Warnf
-                                               }
-                                               bugf("[test] StubDriver bug or caller bug: pid %d exiting, running[%s]==%d", pid, uuid, svm.running[uuid])
+                                       bugf := svm.sis.driver.Bugf
+                                       if bugf == nil {
+                                               bugf = logger.Warnf
                                        }
+                                       bugf("[test] StubDriver bug or caller bug: pid %d exiting, running[%s]==%d", pid, uuid, svm.running[uuid])
                                } else {
                                        delete(svm.running, uuid)
                                }
@@ -305,7 +303,7 @@ func (svm *StubVM) Exec(env map[string]string, command string, stdin io.Reader,
                        time.Sleep(time.Duration(math_rand.Float64()*20) * time.Millisecond)
 
                        svm.Lock()
-                       killed = svm.running[uuid] != pid
+                       killed := svm.killing[uuid]
                        svm.Unlock()
                        if killed || wantCrashEarly {
                                return
@@ -345,21 +343,9 @@ func (svm *StubVM) Exec(env map[string]string, command string, stdin io.Reader,
        }
        if strings.HasPrefix(command, "crunch-run --kill ") {
                svm.Lock()
-               pid, running := svm.running[uuid]
-               if running && !svm.killing[uuid] {
+               _, running := svm.running[uuid]
+               if running {
                        svm.killing[uuid] = true
-                       go func() {
-                               time.Sleep(time.Duration(math_rand.Float64()*30) * time.Millisecond)
-                               svm.Lock()
-                               defer svm.Unlock()
-                               if svm.running[uuid] == pid {
-                                       // Kill only if the running entry
-                                       // hasn't since been killed and
-                                       // replaced with a different one.
-                                       delete(svm.running, uuid)
-                               }
-                               delete(svm.killing, uuid)
-                       }()
                        svm.Unlock()
                        time.Sleep(time.Duration(math_rand.Float64()*2) * time.Millisecond)
                        svm.Lock()