@@ -46,8 +46,9 @@ type session struct {
4646 tableService Ydb_Table_V1.TableServiceClient
4747 config config.Config
4848
49- status options.SessionStatus
50- nodeID uint32
49+ status table.SessionStatus
50+ statusMtx sync.RWMutex
51+ nodeID uint32
5152
5253 onClose []func (s * session )
5354 closeOnce sync.Once
@@ -72,23 +73,27 @@ func (s *session) NodeID() uint32 {
7273 return uint32 (nodeID )
7374}
7475
75- func (s * session ) Status () string {
76+ func (s * session ) Status () table. SessionStatus {
7677 if s == nil {
77- return ""
78+ return table . SessionStatusUnknown
7879 }
79- return options .SessionStatus (atomic .LoadUint32 ((* uint32 )(& s .status ))).String ()
80+ s .statusMtx .RLock ()
81+ defer s .statusMtx .RUnlock ()
82+ return s .status
8083}
8184
82- func (s * session ) SetStatus (status options.SessionStatus ) {
83- atomic .StoreUint32 ((* uint32 )(& s .status ), uint32 (status ))
85+ func (s * session ) SetStatus (status table.SessionStatus ) {
86+ s .statusMtx .Lock ()
87+ defer s .statusMtx .Unlock ()
88+ s .status = status
8489}
8590
8691func (s * session ) isClosed () bool {
87- return options . SessionStatus ( atomic . LoadUint32 (( * uint32 )( & s . status ))) == options .SessionClosed
92+ return s . Status () == table .SessionClosed
8893}
8994
9095func (s * session ) isClosing () bool {
91- return options . SessionStatus ( atomic . LoadUint32 (( * uint32 )( & s . status ))) == options .SessionClosing
96+ return s . Status () == table .SessionClosing
9297}
9398
9499func newSession (ctx context.Context , cc grpc.ClientConnInterface , config config.Config , opts ... sessionBuilderOption ) (
@@ -129,7 +134,7 @@ func newSession(ctx context.Context, cc grpc.ClientConnInterface, config config.
129134 id : result .GetSessionId (),
130135 tableService : c ,
131136 config : config ,
132- status : options .SessionReady ,
137+ status : table .SessionReady ,
133138 }
134139
135140 for _ , o := range opts {
@@ -160,7 +165,7 @@ func (s *session) Close(ctx context.Context) (err error) {
160165
161166 s .closeOnce .Do (func () {
162167 defer func () {
163- s .SetStatus (options .SessionClosed )
168+ s .SetStatus (table .SessionClosed )
164169 }()
165170
166171 onDone := trace .TableOnSessionDelete (s .config .Trace (), & ctx , s )
@@ -232,9 +237,9 @@ func (s *session) KeepAlive(ctx context.Context) (err error) {
232237 }
233238 switch result .SessionStatus {
234239 case Ydb_Table .KeepAliveResult_SESSION_STATUS_READY :
235- s .SetStatus (options .SessionReady )
240+ s .SetStatus (table .SessionReady )
236241 case Ydb_Table .KeepAliveResult_SESSION_STATUS_BUSY :
237- s .SetStatus (options .SessionBusy )
242+ s .SetStatus (table .SessionBusy )
238243 }
239244 return nil
240245}
@@ -447,7 +452,7 @@ func (s *session) checkError(err error) {
447452 return
448453 }
449454 if m := retry .Check (err ); m .MustDeleteSession () {
450- s .SetStatus (options .SessionClosing )
455+ s .SetStatus (table .SessionClosing )
451456 }
452457}
453458
0 commit comments