code: public void updateExpiration( final MemcachedBackupSession session ) throws InterruptedException {
          if ( _log.isDebugEnabled() ) {
              _log.debug( "Updating expiration time for session " + session.getId() );
          }
  
          if ( !_memcachedNodesManager.getSessionIdFormat().isValid( session.getId() ) ) {
              return;
          }
  
          session.setExpirationUpdateRunning( true );
          session.setLastBackupTime( System.currentTimeMillis() );
          try {
              final ConcurrentMap<String, Object> attributes = session.getAttributesFiltered();
              final byte[] attributesData = _transcoderService.serializeAttributes( session, attributes );
              final byte[] data = _transcoderService.serialize( session, attributesData );
              createBackupSessionTask( session, true ).doBackupSession( session, data, attributesData );
          } finally {
              session.setExpirationUpdateRunning( false );
          }
      }
docs: Update the expiration for the session associated with this {@link BackupSessionService}
  in memcached, so that the session will expire in
  <em>session.maxInactiveInterval - timeIdle</em>
  seconds in memcached (whereas timeIdle is calculated as
  <em>System.currentTimeMillis - session.thisAccessedTime</em>).
  <p>
  <strong>IMPLEMENTATION NOTE</strong>: right now this performs a new backup of the session
  in memcached. Once the touch command is available in memcached
  (see <a href="http://code.google.com/p/memcached/issues/detail?id=110">issue #110</a> in memcached),
  we can consider to use this.
  </p>
  
  @param session the session for that the expiration shall be updated in memcached.
  
  @see Session#getMaxInactiveInterval()
  @see MemcachedBackupSession#getThisAccessedTimeInternal()