I was doing some testing with the couchbase iis session replacement. I’m using the standard repo (https://github.com/couchbaselabs/couchbase-aspnet) and I have a test site using couchbase. I was testing the failover with 3 nodes, when I stop a service on a node and try to navigate the site during that time I lose my session. If I wait and restore the service before failover I keep my session intact.
I found this thread from over 2 years ago (http://www.couchbase.com/communities/q-and-a/what-happens-when-node-cluster-goes-down) where someone is talking about losing access to some data while a node is failing over. I think that in my tests the server can’t get the data for the server and thinks it doesn’t exist so it creates a new session. It seems related to what was going on 2 years ago but in that instance it was ok. For sessions I want to have as close to 100% up time as possible.
Is it my setup or the session state provider that is the problem? Thanks for any insight into this.
One thing you may want to look into is use of the durability requirements with ReplicateTo.ONE. This would give you higher availability at the cost of slightly higher latency, since you’re waiting until the session data is in memory in two locations.
That may require some porting of the aspnet session provider to the 2.0 client, but I’m not sure. @jmorris, can you advise?
While the system is in the middle of an automatic failover, the header was for a session was coming back null and thus presenting the user with an empty session. If the header comes back null, we now loop around until its not null.
On SessionStateItem.cs we changed lines around 115 from where the if (header.Result == null)
if (header.Result == null){
//if the header comes back null, couchbase is in a failure state
//must take caution not to present the user with a falsely null session.
do
{
Thread.Sleep(5000);
//loop header call until couchbase finishes failover and is back online
header = client.GetWithCas<byte[]>(headerPrefix + id);
} while (header.Result == null);
//header is no longer null, continue to memorystream
}
I hope this helps. I should also mention, we had other issues that prevents us from using this in production.
Thank you for the reply!
I’m struggling with this asp.net session provider:
And it is not just in the failover scenario you described. If our app is updated (web site is updated), the session stops working
Session State Server - I was able to use the couchbase as the session state server. At first, I encountered a problem when using the same configuration section the data cache is using. I was able to get around the error by creating a separate configuration section for the session state server.
One problem though, It appears there’s a bug on couchbase and IIS. The bug happens whenever a configuration file (e.g. Web.config, AppSetting.config) is updated OR overwritten - which in our case happens every deployment. The application will error indicating the couchbase node failed. The error goes away after I reboot the couchbase server.
Based on their support, this error was fixed on version 1.3.4 but we’re currently using version 1.3.10 and we’re still seeing the error. http://review.couchbase.org/#/c/31007/
We updated the CouchbaseClient API that we’re using. Originally, we’re using 1.2.10 version but they have a new major release called CouchbaseClient 2.0.2. Unfortunately, same results - same error.
Looks like the problem is in the Coucbase.AspNET.
Should I try this one ? https://github.com/evereq/couchbase-aspnet
looks like mostly the same except for the addtion of compression and logging).
The big question is this: is the Couchbase.AspNET ready for prime time, in a live application? Do I have a settings/config/usage problem? Love to get this to work, but looks shakey to me.
You mentioned that you did not use this in production. May I ask you what you did use for session state (I assume a .net app) in production?