@@ -35,6 +35,7 @@ type GRPCConn struct {
35
35
sync.Mutex
36
36
37
37
grpcConn * grpc.ClientConn
38
+ started bool
38
39
connStarted sync.WaitGroup
39
40
}
40
41
@@ -44,51 +45,59 @@ type GRPCConn struct {
44
45
45
46
// NewGRPCConn creates new GRPCConn object.
46
47
func NewGRPCConn () * GRPCConn {
47
- conn := GRPCConn {}
48
+ conn := GRPCConn {started : false }
48
49
49
50
conn .connStarted .Add (1 )
50
51
51
52
return & conn
52
53
}
53
54
54
- // Start starts new grpc connection.
55
- func (conn * GRPCConn ) Start (connection * grpc.ClientConn ) error {
55
+ // Set assigns new grpc connection.
56
+ func (conn * GRPCConn ) Set (connection * grpc.ClientConn ) {
56
57
conn .Lock ()
57
58
defer conn .Unlock ()
58
59
59
- if conn .grpcConn != nil {
60
- return aoserrors .New ("Previous connection should be stopped before reset" )
61
- }
62
-
63
60
conn .grpcConn = connection
64
- conn .connStarted .Done ()
61
+ }
62
+
63
+ // Start starts processing grpc calls.
64
+ func (conn * GRPCConn ) Start () {
65
+ conn .Lock ()
66
+ defer conn .Unlock ()
65
67
66
- return nil
68
+ if ! conn .started {
69
+ conn .started = true
70
+ conn .connStarted .Done ()
71
+ }
67
72
}
68
73
69
74
// Stop stops current grpc connection.
70
75
func (conn * GRPCConn ) Stop () {
71
76
conn .Lock ()
72
77
defer conn .Unlock ()
73
78
74
- if conn .grpcConn == nil {
75
- return
79
+ if conn .grpcConn != nil {
80
+ conn .grpcConn .Close ()
81
+ conn .grpcConn = nil
76
82
}
77
83
78
- conn .grpcConn . Close ()
79
- conn .grpcConn = nil
80
-
81
- conn . connStarted . Add ( 1 )
84
+ if conn .started {
85
+ conn .started = false
86
+ conn . connStarted . Add ( 1 )
87
+ }
82
88
}
83
89
84
90
// Close closes grpc connection and releases all spawned goroutines.
85
91
func (conn * GRPCConn ) Close () {
86
92
conn .Lock ()
87
93
defer conn .Unlock ()
88
94
89
- if conn .grpcConn == nil {
95
+ if ! conn .started {
96
+ conn .started = true
90
97
conn .connStarted .Done ()
91
- } else {
98
+ }
99
+
100
+ if conn .grpcConn == nil {
92
101
conn .grpcConn .Close ()
93
102
conn .grpcConn = nil
94
103
}
@@ -102,7 +111,8 @@ func (conn *GRPCConn) Close() {
102
111
func (conn * GRPCConn ) Invoke (ctx context.Context , method string , args any , reply any ,
103
112
opts ... grpc.CallOption ,
104
113
) error {
105
- lock := make (chan struct {}, 1 )
114
+ lock := make (chan struct {})
115
+ defer close (lock )
106
116
107
117
go func () {
108
118
conn .connStarted .Wait ()
0 commit comments