| 27 | } |
| 28 | |
| 29 | func NewScanner(cfg UsersScannerConfig, bkt objstore.InstrumentedBucket, logger log.Logger, reg prometheus.Registerer) (Scanner, error) { |
| 30 | var scanner Scanner |
| 31 | switch cfg.Strategy { |
| 32 | case UserScanStrategyList: |
| 33 | scanner = &listScanner{bkt: bkt} |
| 34 | case UserScanStrategyUserIndex: |
| 35 | scanner = newUserIndexScanner(&listScanner{bkt: bkt}, cfg, bkt, logger, reg) |
| 36 | default: |
| 37 | return nil, ErrInvalidUserScannerStrategy |
| 38 | } |
| 39 | |
| 40 | if cfg.CacheTTL > 0 { |
| 41 | scanner = newCachedScanner(scanner, cfg, reg) |
| 42 | } |
| 43 | |
| 44 | return scanner, nil |
| 45 | } |
| 46 | |
| 47 | func NewShardedScanner(scanner Scanner, isOwned func(userID string) (bool, error), logger log.Logger) Scanner { |
| 48 | return &shardedScanner{ |