Skip to content

Commit 9fca930

Browse files
committed
handle data race
Signed-off-by: Jiangnan Jia <[email protected]>
1 parent 6bfdc07 commit 9fca930

File tree

2 files changed

+3
-21
lines changed

2 files changed

+3
-21
lines changed

pkg/client/stream/subscribeconfig_stream.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ func (s *SubscribeConfigOutsStream) connectOutsStream() error {
9696
subscribeConfigStream, err := s.transportServiceClient.SubscribeConfig(context.Background())
9797
if err != nil {
9898
logging.Error(err, "[OpenSergo SDK] SubscribeConfigStream of OpenSergoClient can not connect.")
99-
s.pbStreamStatus.Store(PbStreamInterrupted)
10099
return err
101100
}
102101
s.setSubscribeConfigPbStreamWrapper(&subscribeConfigPbStreamWrapper{pbStream: subscribeConfigStream})
@@ -120,12 +119,12 @@ func (s *SubscribeConfigOutsStream) keepAlive() {
120119
logging.Info("start a keepalive() daemon goroutine to keep SubscribeConfigOutsStream of OpenSergoClient alive")
121120
for {
122121
status := s.StreamStatus()
123-
if status == PbStreamInterrupted {
122+
if status == PbStreamShutdown {
123+
return
124+
} else if status == PbStreamInterrupted {
124125
logging.Info("Try to restart OpenSergoClient...")
125126
// We do not handle error here because error has print in start()
126127
_ = s.Start()
127-
} else if status == PbStreamShutdown {
128-
return
129128
}
130129
time.Sleep(time.Duration(10) * time.Second)
131130
}

pkg/client/stream/subscribeconfig_streamobserver.go

-17
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ package stream
1717
import (
1818
"fmt"
1919
"reflect"
20-
"sync/atomic"
2120

2221
"github.com/opensergo/opensergo-go/pkg/common/logging"
2322
"github.com/opensergo/opensergo-go/pkg/configkind"
@@ -36,22 +35,15 @@ type subscribeConfigPbStreamObserver struct {
3635
outsStream *SubscribeConfigOutsStream
3736

3837
subscribeResponseChan chan *transportPb.SubscribeResponse
39-
40-
scObserverStatus atomic.Value // type of value is bool
4138
}
4239

4340
func newSubscribeConfigPbStreamObserver(outsStream *SubscribeConfigOutsStream) *subscribeConfigPbStreamObserver {
4441
scObserver := &subscribeConfigPbStreamObserver{
4542
outsStream: outsStream,
4643
}
47-
scObserver.scObserverStatus.Store(PbStreamObserverInitial)
4844
return scObserver
4945
}
5046

51-
func (scObserver *subscribeConfigPbStreamObserver) setSubscribeConfigOutsStream(outsStream *SubscribeConfigOutsStream) {
52-
scObserver.outsStream = outsStream
53-
}
54-
5547
func (scObserver *subscribeConfigPbStreamObserver) start(subscribeResponseChan chan *transportPb.SubscribeResponse) {
5648
scObserver.subscribeResponseChan = subscribeResponseChan
5749

@@ -66,12 +58,7 @@ func (scObserver *subscribeConfigPbStreamObserver) start(subscribeResponseChan c
6658
logging.Info("[OpenSergo SDK] started subscribeConfigPbStreamObserver with goroutines of doObserve() and doHandle().")
6759
}
6860

69-
func (scObserver *subscribeConfigPbStreamObserver) pbStreamObserverStatus() PbStreamObserverStatus {
70-
return scObserver.scObserverStatus.Load().(PbStreamObserverStatus)
71-
}
72-
7361
func (scObserver *subscribeConfigPbStreamObserver) doObserve() {
74-
scObserver.scObserverStatus.Store(PbStreamObserverRunning)
7562
for {
7663
pbStreamWrapper := scObserver.outsStream.subscribeConfigPbStreamWrapper()
7764
if !reflect.DeepEqual(pbStreamWrapper, &subscribeConfigPbStreamWrapper{}) {
@@ -99,7 +86,6 @@ func (scObserver *subscribeConfigPbStreamObserver) observeReceive() (resp *trans
9986
errRecover := errors.Errorf("%+v", r)
10087
scObserver.outsStream.setSubscribeConfigPbStreamWrapper(&subscribeConfigPbStreamWrapper{})
10188
scObserver.outsStream.pbStreamStatus.Store(PbStreamInterrupted)
102-
scObserver.scObserverStatus.Store(PbStreamObserverStopped)
10389
logging.Error(errRecover, "[OpenSergo SDK] interrupted gRpc Stream (SubscribeConfigStream) because of panic occurring when receive data from opensergo-control-plane.")
10490
resp = nil
10591
err = errRecover
@@ -117,7 +103,6 @@ func (scObserver *subscribeConfigPbStreamObserver) observeReceive() (resp *trans
117103
logging.Error(errorLocal, "error when receive config-data.")
118104
scObserver.outsStream.setSubscribeConfigPbStreamWrapper(&subscribeConfigPbStreamWrapper{})
119105
scObserver.outsStream.pbStreamStatus.Store(PbStreamInterrupted)
120-
scObserver.scObserverStatus.Store(PbStreamObserverStopped)
121106
logging.Warn("[OpenSergo SDK] interrupted gRpc Stream (SubscribeConfigStream) because of error occurring when receive data from opensergo-control-plane.")
122107
return nil, errorLocal
123108
}
@@ -129,7 +114,6 @@ func (scObserver *subscribeConfigPbStreamObserver) observeReceive() (resp *trans
129114
//
130115
// Handle the subscribeResponse from the subscribeResponseChan channel in subscribeConfigPbStreamObserver
131116
func (scObserver *subscribeConfigPbStreamObserver) doHandle() {
132-
scObserver.scObserverStatus.Store(PbStreamObserverRunning)
133117
for {
134118
pbStreamWrapper := scObserver.outsStream.subscribeConfigPbStreamWrapper()
135119
if !reflect.DeepEqual(pbStreamWrapper, &subscribeConfigPbStreamWrapper{}) {
@@ -175,7 +159,6 @@ func (scObserver *subscribeConfigPbStreamObserver) handleReceive(subscribeRespon
175159
logging.Error(errRecover2, fmt.Sprintf("[OpenSergo SDK] [subscribeResponseId:%v] panic occurred when invoking doHandleReceive() for subscribe.", subscribeResponse.ResponseId))
176160
scObserver.outsStream.setSubscribeConfigPbStreamWrapper(&subscribeConfigPbStreamWrapper{})
177161
scObserver.outsStream.pbStreamStatus.Store(PbStreamInterrupted)
178-
scObserver.scObserverStatus.Store(PbStreamObserverStopped)
179162
logging.Warn("[OpenSergo SDK] interrupted gRpc Stream (SubscribeConfigStream) because of error occurring when receive data from opensergo-control-plane.")
180163
err = errRecover2
181164
}

0 commit comments

Comments
 (0)