| 111 | } |
| 112 | |
| 113 | func (r *RegexResolver) running(ctx context.Context) error { |
| 114 | level.Info(r.logger).Log("msg", "regex-resolver started") |
| 115 | ticker := time.NewTicker(r.userSyncInterval) |
| 116 | defer ticker.Stop() |
| 117 | |
| 118 | for { |
| 119 | select { |
| 120 | case <-ctx.Done(): |
| 121 | return ctx.Err() |
| 122 | case <-ticker.C: |
| 123 | // Active and deleting users are considered |
| 124 | active, deleting, _, err := r.userScanner.ScanUsers(ctx) |
| 125 | if err != nil { |
| 126 | level.Error(r.logger).Log("msg", "failed to discover users from bucket", "err", err) |
| 127 | } |
| 128 | |
| 129 | r.Lock() |
| 130 | r.knownUsers = append(active, deleting...) |
| 131 | // We keep it sort |
| 132 | sort.Strings(r.knownUsers) |
| 133 | |
| 134 | // Reset the cache because the set of available users has changed. |
| 135 | if r.matchedCache != nil { |
| 136 | r.matchedCache.Purge() |
| 137 | r.matchedCacheSize.Set(0) |
| 138 | } |
| 139 | r.Unlock() |
| 140 | r.lastUpdateUserRun.SetToCurrentTime() |
| 141 | r.discoveredUsers.Set(float64(len(active) + len(deleting))) |
| 142 | } |
| 143 | } |
| 144 | } |
| 145 | |
| 146 | func (r *RegexResolver) TenantID(ctx context.Context) (string, error) { |
| 147 | orgIDs, err := r.TenantIDs(ctx) |