docs: public String changeSessionIdOnTomcatFailover( final String requestedSessionId ) {
          if ( !_sticky ) {
              return null;
          }
          final String localJvmRoute = _manager.getJvmRoute();
          if ( localJvmRoute != null && !localJvmRoute.equals( getSessionIdFormat().extractJvmRoute( requestedSessionId ) ) ) {
  
              // the session might already be relocated, e.g. if some ajax calls are running concurrently.
              // if we'd run session takeover again, a new empty session would be created.
              // see https://github.com/magro/memcached-session-manager/issues/282
              final String newSessionId = _memcachedNodesManager.changeSessionIdForTomcatFailover(requestedSessionId, _manager.getJvmRoute());
              if (_manager.getSessionInternal(newSessionId) != null) {
                  return newSessionId;
              }
  
              // the session might have been loaded already (by some valve), so let's check our session map
              MemcachedBackupSession session = _manager.getSessionInternal( requestedSessionId );
              if ( session == null ) {
                  session = loadFromMemcachedWithCheck( requestedSessionId );
              }
  
              // checking valid() can expire() the session!
              if ( session != null && session.isValid() ) {
                  return handleSessionTakeOver( session );
              } else if (_manager.getSessionInternal(newSessionId) != null) {
                  return newSessionId;
              }
          }
          return null;
      }