EvictUser terminates all sessions of a given user.
(uid types.Uid, skipSid string)
| 221 | |
| 222 | // EvictUser terminates all sessions of a given user. |
| 223 | func (ss *SessionStore) EvictUser(uid types.Uid, skipSid string) { |
| 224 | ss.lock.Lock() |
| 225 | defer ss.lock.Unlock() |
| 226 | |
| 227 | // FIXME: this probably needs to be optimized. This may take very long time if the node hosts 100000 sessions. |
| 228 | evicted := NoErrEvicted("", "", types.TimeNow()) |
| 229 | evicted.AsUser = uid.UserId() |
| 230 | for _, s := range ss.sessCache { |
| 231 | if s.uid == uid && !s.isMultiplex() && s.sid != skipSid { |
| 232 | _, data := s.serialize(evicted) |
| 233 | s.stopSession(data) |
| 234 | delete(ss.sessCache, s.sid) |
| 235 | if s.proto == LPOLL { |
| 236 | ss.lru.Remove(s.lpTracker) |
| 237 | } |
| 238 | } |
| 239 | } |
| 240 | |
| 241 | statsSet("LiveSessions", int64(len(ss.sessCache))) |
| 242 | } |
| 243 | |
| 244 | // NodeRestarted removes stale sessions from a restarted cluster node. |
| 245 | // - nodeName is the name of affected node |
no test coverage detected