@@ -69,7 +69,6 @@ class SessionManager[S <: Session, R <: RecoveryMetadata : ClassTag](
69
69
70
70
protected implicit def executor : ExecutionContext = ExecutionContext .global
71
71
72
- protected [this ] final val idCounter = new AtomicInteger (0 )
73
72
protected [this ] final val sessions = mutable.LinkedHashMap [Int , S ]()
74
73
75
74
private [this ] final val sessionTimeout =
@@ -78,11 +77,8 @@ class SessionManager[S <: Session, R <: RecoveryMetadata : ClassTag](
78
77
mockSessions.getOrElse(recover()).foreach(register)
79
78
new GarbageCollector ().start()
80
79
81
- def nextId (): Int = synchronized {
82
- val id = idCounter.getAndIncrement()
83
- sessionStore.saveNextSessionId(sessionType, idCounter.get())
84
- id
85
- }
80
+ // sessionStore.getNextSessionId is guaranteed to return atomic and returns unique IDs.
81
+ def nextId (): Int = sessionStore.getNextSessionId(sessionType)
86
82
87
83
def register (session : S ): S = {
88
84
info(s " Registering new session ${session.id}" )
@@ -136,18 +132,13 @@ class SessionManager[S <: Session, R <: RecoveryMetadata : ClassTag](
136
132
}
137
133
138
134
private def recover (): Seq [S ] = {
139
- // Recover next session id from state store and create SessionManager.
140
- idCounter.set(sessionStore.getNextSessionId(sessionType))
141
135
142
136
// Retrieve session recovery metadata from state store.
143
137
val sessionMetadata = sessionStore.getAllSessions[R ](sessionType)
144
138
145
139
// Recover session from session recovery metadata.
146
140
val recoveredSessions = sessionMetadata.flatMap(_.toOption).map(sessionRecovery)
147
141
148
- info(s " Recovered ${recoveredSessions.length} $sessionType sessions. " +
149
- s " Next session id: $idCounter" )
150
-
151
142
// Print recovery error.
152
143
val recoveryFailure = sessionMetadata.filter(_.isFailure).map(_.failed.get)
153
144
recoveryFailure.foreach(ex => error(ex.getMessage, ex.getCause))
0 commit comments