[Catalyst] Production session issue - commercial support inquiry?

Sergio Salvi sergio.lists at salvi.ca
Thu Jan 8 16:20:42 GMT 2009


On Thu, Jan 8, 2009 at 10:20 AM, Matt Pitts <mpitts at a3its.com> wrote:
> A Cat app for one of our clients has been experiencing random session
> cross-over issues for the past several months. The first reported
> instance was on Oct. 16 and I have spent countless hours looking at any
> changes that took place around that time to try to isolate the problem
> without success.
>
> Here is an overview of the application setup:
>
>  - Catalyst 5.70014
>  - Catalyst::Plugin::Session 0.20
>  - single Apache 2.2 load balancer front end handling remote SSL and
> non-SSL requests
>  - two backend servers running Cat app via HTTP::Prefork for non-SSL
> traffic
>  - each backend also runs Apache/mod_ssl + mod_fastcgi in order to
> provide an SSL channel to the backends
>  - session storage via DBIC (was originally memcached)
>

[snip]

Are you using MySQL? If so, are you using strict sql_mode with at
least sql_mode='STRICT_ALL_TABLES'?

This is quite obvious, but have you confirmed your session table was
created exactly like in the C::P::Session docs? Column sizes,
nullable/not nullable, etc?

Do you have any package variable in your controllers or models?

Anything using "our $var" or "my $var" in the scope of a package
instead of being inside a sub foo { my $var = xxx } in your
controllers or models?

Are you using any closures and/or coderefs?

The behaviour you're describing sounds to me that you have a global
variable somewhere. A crazy, quick way to figure that out would be to
set your application workers (the child process that actually handles
the requests) to EXIT/DIE after each request, so every new request
gets a brand new process without reusing existing vars. You want
something similar to "MaxRequestsPerChild 1" if you were using
mod_perl.

Sergio Salvi



More information about the Catalyst mailing list