@@ -480,10 +480,26 @@ func (i *Ingester) checkRunningOrStopping() error {
480
480
return status .Error (codes .Unavailable , s .String ())
481
481
}
482
482
483
+ // Using block store, the ingester is only available when it is in a Running state. The ingester is not available
484
+ // when stopping to prevent any read or writes to the TSDB after the ingester has closed them.
485
+ func (i * Ingester ) checkRunning () error {
486
+ s := i .State ()
487
+ if s == services .Running {
488
+ return nil
489
+ }
490
+ return status .Error (codes .Unavailable , s .String ())
491
+ }
492
+
483
493
// Push implements client.IngesterServer
484
494
func (i * Ingester ) Push (ctx context.Context , req * cortexpb.WriteRequest ) (* cortexpb.WriteResponse , error ) {
485
- if err := i .checkRunningOrStopping (); err != nil {
486
- return nil , err
495
+ if i .cfg .BlocksStorageEnabled {
496
+ if err := i .checkRunning (); err != nil {
497
+ return nil , err
498
+ }
499
+ } else {
500
+ if err := i .checkRunningOrStopping (); err != nil {
501
+ return nil , err
502
+ }
487
503
}
488
504
489
505
// We will report *this* request in the error too.
@@ -762,14 +778,17 @@ func (i *Ingester) purgeUserMetricsMetadata() {
762
778
763
779
// Query implements service.IngesterServer
764
780
func (i * Ingester ) Query (ctx context.Context , req * client.QueryRequest ) (* client.QueryResponse , error ) {
765
- if err := i .checkRunningOrStopping (); err != nil {
766
- return nil , err
767
- }
768
-
769
781
if i .cfg .BlocksStorageEnabled {
782
+ if err := i .checkRunning (); err != nil {
783
+ return nil , err
784
+ }
770
785
return i .v2Query (ctx , req )
771
786
}
772
787
788
+ if err := i .checkRunningOrStopping (); err != nil {
789
+ return nil , err
790
+ }
791
+
773
792
userID , err := tenant .TenantID (ctx )
774
793
if err != nil {
775
794
return nil , err
@@ -829,14 +848,17 @@ func (i *Ingester) Query(ctx context.Context, req *client.QueryRequest) (*client
829
848
830
849
// QueryStream implements service.IngesterServer
831
850
func (i * Ingester ) QueryStream (req * client.QueryRequest , stream client.Ingester_QueryStreamServer ) error {
832
- if err := i .checkRunningOrStopping (); err != nil {
833
- return err
834
- }
835
-
836
851
if i .cfg .BlocksStorageEnabled {
852
+ if err := i .checkRunning (); err != nil {
853
+ return err
854
+ }
837
855
return i .v2QueryStream (req , stream )
838
856
}
839
857
858
+ if err := i .checkRunningOrStopping (); err != nil {
859
+ return err
860
+ }
861
+
840
862
spanLog , ctx := spanlogger .New (stream .Context (), "QueryStream" )
841
863
defer spanLog .Finish ()
842
864
@@ -926,14 +948,17 @@ func (i *Ingester) QueryExemplars(ctx context.Context, req *client.ExemplarQuery
926
948
927
949
// LabelValues returns all label values that are associated with a given label name.
928
950
func (i * Ingester ) LabelValues (ctx context.Context , req * client.LabelValuesRequest ) (* client.LabelValuesResponse , error ) {
929
- if err := i .checkRunningOrStopping (); err != nil {
930
- return nil , err
931
- }
932
-
933
951
if i .cfg .BlocksStorageEnabled {
952
+ if err := i .checkRunning (); err != nil {
953
+ return nil , err
954
+ }
934
955
return i .v2LabelValues (ctx , req )
935
956
}
936
957
958
+ if err := i .checkRunningOrStopping (); err != nil {
959
+ return nil , err
960
+ }
961
+
937
962
i .userStatesMtx .RLock ()
938
963
defer i .userStatesMtx .RUnlock ()
939
964
state , ok , err := i .userStates .getViaContext (ctx )
@@ -951,14 +976,17 @@ func (i *Ingester) LabelValues(ctx context.Context, req *client.LabelValuesReque
951
976
952
977
// LabelNames return all the label names.
953
978
func (i * Ingester ) LabelNames (ctx context.Context , req * client.LabelNamesRequest ) (* client.LabelNamesResponse , error ) {
954
- if err := i .checkRunningOrStopping (); err != nil {
955
- return nil , err
956
- }
957
-
958
979
if i .cfg .BlocksStorageEnabled {
980
+ if err := i .checkRunning (); err != nil {
981
+ return nil , err
982
+ }
959
983
return i .v2LabelNames (ctx , req )
960
984
}
961
985
986
+ if err := i .checkRunningOrStopping (); err != nil {
987
+ return nil , err
988
+ }
989
+
962
990
i .userStatesMtx .RLock ()
963
991
defer i .userStatesMtx .RUnlock ()
964
992
state , ok , err := i .userStates .getViaContext (ctx )
@@ -976,14 +1004,17 @@ func (i *Ingester) LabelNames(ctx context.Context, req *client.LabelNamesRequest
976
1004
977
1005
// MetricsForLabelMatchers returns all the metrics which match a set of matchers.
978
1006
func (i * Ingester ) MetricsForLabelMatchers (ctx context.Context , req * client.MetricsForLabelMatchersRequest ) (* client.MetricsForLabelMatchersResponse , error ) {
979
- if err := i .checkRunningOrStopping (); err != nil {
980
- return nil , err
981
- }
982
-
983
1007
if i .cfg .BlocksStorageEnabled {
1008
+ if err := i .checkRunning (); err != nil {
1009
+ return nil , err
1010
+ }
984
1011
return i .v2MetricsForLabelMatchers (ctx , req )
985
1012
}
986
1013
1014
+ if err := i .checkRunningOrStopping (); err != nil {
1015
+ return nil , err
1016
+ }
1017
+
987
1018
i .userStatesMtx .RLock ()
988
1019
defer i .userStatesMtx .RUnlock ()
989
1020
state , ok , err := i .userStates .getViaContext (ctx )
@@ -1046,14 +1077,17 @@ func (i *Ingester) MetricsMetadata(ctx context.Context, req *client.MetricsMetad
1046
1077
1047
1078
// UserStats returns ingestion statistics for the current user.
1048
1079
func (i * Ingester ) UserStats (ctx context.Context , req * client.UserStatsRequest ) (* client.UserStatsResponse , error ) {
1049
- if err := i .checkRunningOrStopping (); err != nil {
1050
- return nil , err
1051
- }
1052
-
1053
1080
if i .cfg .BlocksStorageEnabled {
1081
+ if err := i .checkRunning (); err != nil {
1082
+ return nil , err
1083
+ }
1054
1084
return i .v2UserStats (ctx , req )
1055
1085
}
1056
1086
1087
+ if err := i .checkRunningOrStopping (); err != nil {
1088
+ return nil , err
1089
+ }
1090
+
1057
1091
i .userStatesMtx .RLock ()
1058
1092
defer i .userStatesMtx .RUnlock ()
1059
1093
state , ok , err := i .userStates .getViaContext (ctx )
@@ -1075,14 +1109,17 @@ func (i *Ingester) UserStats(ctx context.Context, req *client.UserStatsRequest)
1075
1109
1076
1110
// AllUserStats returns ingestion statistics for all users known to this ingester.
1077
1111
func (i * Ingester ) AllUserStats (ctx context.Context , req * client.UserStatsRequest ) (* client.UsersStatsResponse , error ) {
1078
- if err := i .checkRunningOrStopping (); err != nil {
1079
- return nil , err
1080
- }
1081
-
1082
1112
if i .cfg .BlocksStorageEnabled {
1113
+ if err := i .checkRunning (); err != nil {
1114
+ return nil , err
1115
+ }
1083
1116
return i .v2AllUserStats (ctx , req )
1084
1117
}
1085
1118
1119
+ if err := i .checkRunningOrStopping (); err != nil {
1120
+ return nil , err
1121
+ }
1122
+
1086
1123
i .userStatesMtx .RLock ()
1087
1124
defer i .userStatesMtx .RUnlock ()
1088
1125
users := i .userStates .cp ()
0 commit comments