In environment.rb file, I initialize a connection to some data vending servers, through TCP sockets.
The connection object is global and hence the code:
$generic_connection = ConnectionClass.instance (singleton class)
$generic_connection.connect_me( this call will make the connection)
The above approach is to make sure that, only one connection is made to
the data vending servers.ConnectionClass is a library Class that, I
have written to handle connections and to ensure exception handling and
all that stuff.
Now, in our rails code, whenever we need some data from these data vending servers, we use this global variable to get the data.
Since, we switched to mongrel, we are facing a strange issue. Our
protocol code, specify what kind of data we want from data vending
servers.So, lets say we want, x informatio, then we specify xxx as
protocol code and get the data. protocol code “yyy” would give
completely different kind of data. Now…sometimes what happens is, an
Ajax call requests xxx protocol code and in the response we get data of
protocol code yyy. Data vending servers are threaded again, and for
each connection it starts a new thread and each request is served on a
Data vending servers are again mostly written in ruby.
Now, I am wondering where is the problem?
As i know, mongrel serves requests on new threads, so what happens to
this global variable that is shared among the threads.Is there a
possiblity that, problem is here?
I mean, lets say a thread is using this global variable for fetching
data for protocol code xxx and same time another thread requests for
protocol code yyy. My connection class, which is basically a proxy to
these data vending servers, may not be thread safe.If this is the
problem, then can anybody suggest better approach of making single
connection to data vending servers, without using shared global
It could be a problem with our data vending servers also.But I am not so, sure about that.