()
| 248 | } |
| 249 | |
| 250 | func (s *scope) checkTokenFreeRateLimiters() error { |
| 251 | var err error |
| 252 | |
| 253 | uRPM := s.user.rateLimiter.inc() |
| 254 | cRPM := s.clusterUser.rateLimiter.inc() |
| 255 | |
| 256 | // int32(xRPM) > 0 check is required to detect races when RPM |
| 257 | // is decremented on error below after per-minute zeroing |
| 258 | // in rateLimiter.run. |
| 259 | // These races become innocent with the given check. |
| 260 | if (s.user.reqPerMin > 0 && int32(uRPM) > 0 && uRPM > uint32(s.user.reqPerMin)) || s.user.reqPerMin < 0 { |
| 261 | err = fmt.Errorf("rate limit for user %q is exceeded: requests_per_minute limit: %d", |
| 262 | s.user.name, s.user.reqPerMin) |
| 263 | } |
| 264 | if (s.clusterUser.reqPerMin > 0 && int32(cRPM) > 0 && cRPM > uint32(s.clusterUser.reqPerMin)) || s.clusterUser.reqPerMin < 0 { |
| 265 | err = fmt.Errorf("rate limit for cluster user %q is exceeded: requests_per_minute limit: %d", |
| 266 | s.clusterUser.name, s.clusterUser.reqPerMin) |
| 267 | } |
| 268 | |
| 269 | err2 := s.checkTokenFreePacketSizeRateLimiters() |
| 270 | if err2 != nil { |
| 271 | err = err2 |
| 272 | } |
| 273 | |
| 274 | return err |
| 275 | } |
| 276 | |
| 277 | func (s *scope) checkTokenFreePacketSizeRateLimiters() error { |
| 278 | var err error |
no test coverage detected