+if defined?(MEMCACHE_SERVERS)
+ unless STATUS == :database_offline or STATUS == :database_readonly
+ module Rack
+ module Session
+ class Memcache
+ def get_session(env, sid)
+ with_lock(env, [nil, {}]) do
+ unless sid and session = @pool.get(sid)
+ if sid and s = ActiveRecord::SessionStore::SqlBypass.find_by_session_id(sid)
+ session = s.data
+ s.destroy
+ else
+ sid, session = generate_sid, {}
+ end
+
+ unless /^STORED/ =~ @pool.add(sid, session)
+ raise "Session collision on '#{sid.inspect}'"
+ end
+ end
+ [sid, session]
+ end
+ end
+ end
+ end
+ end
+ end