| 213 | } |
| 214 | |
| 215 | func (s *scope) inc() error { |
| 216 | uQueries := s.user.queryCounter.inc() |
| 217 | cQueries := s.clusterUser.queryCounter.inc() |
| 218 | |
| 219 | var err error |
| 220 | if s.user.maxConcurrentQueries > 0 && uQueries > s.user.maxConcurrentQueries { |
| 221 | err = fmt.Errorf("limits for user %q are exceeded: max_concurrent_queries limit: %d", |
| 222 | s.user.name, s.user.maxConcurrentQueries) |
| 223 | } |
| 224 | if s.clusterUser.maxConcurrentQueries > 0 && cQueries > s.clusterUser.maxConcurrentQueries { |
| 225 | err = fmt.Errorf("limits for cluster user %q are exceeded: max_concurrent_queries limit: %d", |
| 226 | s.clusterUser.name, s.clusterUser.maxConcurrentQueries) |
| 227 | } |
| 228 | |
| 229 | err2 := s.checkTokenFreeRateLimiters() |
| 230 | if err2 != nil { |
| 231 | err = err2 |
| 232 | } |
| 233 | |
| 234 | if err != nil { |
| 235 | s.user.queryCounter.dec() |
| 236 | s.clusterUser.queryCounter.dec() |
| 237 | |
| 238 | // Decrement rate limiter here, so it doesn't count requests |
| 239 | // that didn't start due to limits overflow. |
| 240 | s.user.rateLimiter.dec() |
| 241 | s.clusterUser.rateLimiter.dec() |
| 242 | return err |
| 243 | } |
| 244 | |
| 245 | s.host.IncrementConnections() |
| 246 | concurrentQueries.With(s.labels).Inc() |
| 247 | return nil |
| 248 | } |
| 249 | |
| 250 | func (s *scope) checkTokenFreeRateLimiters() error { |
| 251 | var err error |