Skip to content

Commit ba8f6ce

Browse files
committed
Use process field to dermine liveness of the discovery
Also, force a process kill when the decode loop exits.
1 parent eb34220 commit ba8f6ce

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

client.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ func (disc *Client) jsonDecodeLoop(in io.Reader, outChan chan<- *discoveryMessag
126126
disc.statusMutex.Lock()
127127
disc.incomingMessagesError = err
128128
disc.statusMutex.Unlock()
129+
disc.stopSync()
130+
disc.killProcess()
129131
close(outChan)
130132
if err != nil {
131133
disc.logger.Errorf("stopped discovery %s decode loop: %v", disc, err)
@@ -171,6 +173,13 @@ func (disc *Client) jsonDecodeLoop(in io.Reader, outChan chan<- *discoveryMessag
171173
}
172174
}
173175

176+
// Alive returns true if the discovery is running and false otherwise.
177+
func (disc *Client) Alive() bool {
178+
disc.statusMutex.Lock()
179+
defer disc.statusMutex.Unlock()
180+
return disc.process != nil
181+
}
182+
174183
func (disc *Client) waitMessage(timeout time.Duration) (*discoveryMessage, error) {
175184
select {
176185
case msg := <-disc.incomingMessagesChan:
@@ -230,6 +239,9 @@ func (disc *Client) runProcess() error {
230239
}
231240

232241
func (disc *Client) killProcess() error {
242+
disc.statusMutex.Lock()
243+
defer disc.statusMutex.Unlock()
244+
233245
disc.logger.Infof("killing discovery %s process", disc)
234246
if disc.process != nil {
235247
if err := disc.process.Kill(); err != nil {
@@ -238,10 +250,8 @@ func (disc *Client) killProcess() error {
238250
if err := disc.process.Wait(); err != nil {
239251
return err
240252
}
253+
disc.process = nil
241254
}
242-
disc.statusMutex.Lock()
243-
defer disc.statusMutex.Unlock()
244-
disc.stopSync()
245255
disc.logger.Infof("killed discovery %s process", disc)
246256
return nil
247257
}

client_test.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,11 @@ func TestDiscoveryStdioHandling(t *testing.T) {
6565
require.NotNil(t, msg)
6666
require.Equal(t, "ev2", msg.EventType)
6767

68-
// TODO:
69-
// require.Equal(t, disc.State(), Alive)
68+
require.True(t, disc.Alive())
7069

7170
err = disc.outgoingCommandsPipe.(io.ReadCloser).Close()
7271
require.NoError(t, err)
7372
time.Sleep(time.Millisecond * 100)
7473

75-
// TODO:
76-
// require.Equal(t, disc.State(), Dead)
74+
require.False(t, disc.Alive())
7775
}

0 commit comments

Comments
 (0)