maybeCleanup cleans up expired results if necessary.
()
| 136 | |
| 137 | // maybeCleanup cleans up expired results if necessary. |
| 138 | func (f *inMemoryCache) maybeCleanup() { |
| 139 | cleanupTTL := max(f.errorTTL, f.successTTL) |
| 140 | if now().Sub(f.lastCleanup) <= cleanupTTL*10 { |
| 141 | return |
| 142 | } |
| 143 | for req, res := range f.authInfo { |
| 144 | if !res.valid(f.successTTL, f.errorTTL) { |
| 145 | delete(f.authInfo, req) |
| 146 | } |
| 147 | } |
| 148 | for req, res := range f.applicationRights { |
| 149 | if !res.valid(f.successTTL, f.errorTTL) { |
| 150 | delete(f.applicationRights, req) |
| 151 | } |
| 152 | } |
| 153 | for req, res := range f.clientRights { |
| 154 | if !res.valid(f.successTTL, f.errorTTL) { |
| 155 | delete(f.clientRights, req) |
| 156 | } |
| 157 | } |
| 158 | for req, res := range f.gatewayRights { |
| 159 | if !res.valid(f.successTTL, f.errorTTL) { |
| 160 | delete(f.gatewayRights, req) |
| 161 | } |
| 162 | } |
| 163 | for req, res := range f.organizationRights { |
| 164 | if !res.valid(f.successTTL, f.errorTTL) { |
| 165 | delete(f.organizationRights, req) |
| 166 | } |
| 167 | } |
| 168 | for req, res := range f.userRights { |
| 169 | if !res.valid(f.successTTL, f.errorTTL) { |
| 170 | delete(f.userRights, req) |
| 171 | } |
| 172 | } |
| 173 | f.lastCleanup = now() |
| 174 | } |
| 175 | |
| 176 | func (f *inMemoryCache) AuthInfo(ctx context.Context) (authInfo *ttnpb.AuthInfoResponse, err error) { |
| 177 | defer func() { registerAuthInfoRequest(ctx, authInfo, err) }() |