@@ -54,6 +54,7 @@ class ListenerActor(
5454 private var initializationRequestsCount = 0
5555 private var isConnecting = false
5656 private var isShuttingDown = false
57+ private var isShuttingDownBeforeConnected = false
5758 private var isReceiveTimeout = false
5859 private var timeoutCancellableOpt : Option [Cancellable ] = None
5960
@@ -284,7 +285,7 @@ class ListenerActor(
284285 case request : Quit => {
285286 request.success(())
286287 failAllQueuedRequests(RedisIOException (" Connection has been shutdown by QUIT command" ))
287- shutdown()
288+ isShuttingDownBeforeConnected = true
288289 }
289290 case request : Request [_] => {
290291 queuedRequests.addLast(request)
@@ -305,60 +306,64 @@ class ListenerActor(
305306 case Connected => {
306307 isConnecting = false
307308
308- onConnect()
309-
310- val authRequestOpt = passwordOpt.map { password =>
311- Auth (password)
312- }
313- val selectRequestOpt = if (database > 0 ) {
314- Some (Select (database))
309+ if (isShuttingDownBeforeConnected) {
310+ shutdown()
315311 } else {
316- None
317- }
318- val setNameRequestOpt = nameOpt.map { name =>
319- ServerRequests .ClientSetName (name)
320- }
321-
322- val authFuture = authRequestOpt match {
323- case Some (request) => request.future
324- case None => Future .successful(())
325- }
326- val selectFuture = selectRequestOpt match {
327- case Some (request) => request.future
328- case None => Future .successful(())
329- }
330- val setNameFuture = setNameRequestOpt match {
331- case Some (request) => request.future
332- case None => Future .successful(())
333- }
334-
335- val requests = List [Option [Request [Unit ]]](
336- authRequestOpt, selectRequestOpt, setNameRequestOpt
337- ).flatten
338-
339- initializationRequestsCount = requests.size
340-
341- if (initializationRequestsCount > 0 ) {
342- send(requests : _* )
343- become(initializing)
344- } else {
345- onInitialized()
346- sendAllQueuedRequests()
347- if (isShuttingDown) {
348- become(shuttingDown)
312+ onConnect()
313+
314+ val authRequestOpt = passwordOpt.map { password =>
315+ Auth (password)
316+ }
317+ val selectRequestOpt = if (database > 0 ) {
318+ Some (Select (database))
349319 } else {
350- become(initialized)
320+ None
321+ }
322+ val setNameRequestOpt = nameOpt.map { name =>
323+ ServerRequests .ClientSetName (name)
324+ }
325+
326+ val authFuture = authRequestOpt match {
327+ case Some (request) => request.future
328+ case None => Future .successful(())
329+ }
330+ val selectFuture = selectRequestOpt match {
331+ case Some (request) => request.future
332+ case None => Future .successful(())
333+ }
334+ val setNameFuture = setNameRequestOpt match {
335+ case Some (request) => request.future
336+ case None => Future .successful(())
337+ }
338+
339+ val requests = List [Option [Request [Unit ]]](
340+ authRequestOpt, selectRequestOpt, setNameRequestOpt
341+ ).flatten
342+
343+ initializationRequestsCount = requests.size
344+
345+ if (initializationRequestsCount > 0 ) {
346+ send(requests : _* )
347+ become(initializing)
348+ } else {
349+ onInitialized()
350+ sendAllQueuedRequests()
351+ if (isShuttingDown) {
352+ become(shuttingDown)
353+ } else {
354+ become(initialized)
355+ }
356+ }
357+
358+ authFuture.recover {
359+ case e : Throwable => logger.error(s " Could not authenticate to $remote" , e)
360+ }
361+ selectFuture.recover {
362+ case e : Throwable => logger.error(s " Could not select database ' $database' in $remote" , e)
363+ }
364+ setNameFuture.recover {
365+ case e : Throwable => logger.error(s " Could not set client name in $remote" , e)
351366 }
352- }
353-
354- authFuture.recover {
355- case e : Throwable => logger.error(s " Could not authenticate to $remote" , e)
356- }
357- selectFuture.recover {
358- case e : Throwable => logger.error(s " Could not select database ' $database' in $remote" , e)
359- }
360- setNameFuture.recover {
361- case e : Throwable => logger.error(s " Could not set client name in $remote" , e)
362367 }
363368 }
364369 case ReceiveTimeout =>
0 commit comments