Fwd: [MAPSERVER-USERS] CLOSE_CONNECTION=DEFER - Segmentation fault
Dave Fuhry
dfuhry at gmail.com
Wed Mar 12 15:45:24 PDT 2008
Oops, forgot to CC mapserver-users.
---------- Forwarded message ----------
From: Dave Fuhry <dfuhry at gmail.com>
Date: Wed, Mar 12, 2008 at 6:33 PM
Subject: Re: [MAPSERVER-USERS] CLOSE_CONNECTION=DEFER - Segmentation fault
To: Ivan Mincik <ivan.mincik at gmail.com>
Ivan,
Ah, that does help. It looks like the error:
ERROR: DECLARE CURSOR may only be used in transaction blocks
is occurring after ROLLBACK statements are issued. I had not really
considered ROLLBACKs, not having seen them in my tests.
ROLLBACKs are only issued in two places in mappostgis.c. In
msPOSTGISLayerGetShape(), and in prepare_database() (but in the latter
case, only if using an ancient version of postgis).
The code in msPOSTGISLayerGetShape() seems unnecessary to me; no other
DECLARE CURSOR ...; FETCH ...; CLOSE ...; queries are followed by a
ROLLBACK, so it seems unnecessary here as well. The important thing
will be to ensure that if an error happens in one of those queries,
that the connection is not msConnPoolRelease()d back into the
connection pool. I haven't traced the code in detail yet, but that
should be staightforward enforce.
So essentially, the patch should be modified to remove the ROLLBACKs
from msPOSTGISLayerGetShape() in a safe way.
Thanks,
Dave
On Wed, Mar 12, 2008 at 5:49 AM, Ivan Mincik <ivan.mincik at gmail.com> wrote:
> Hi Dave,
> these are my postgis version details:
> select postgis_full_version();
> postgis_full_version
> ----------------------------------------------------------------------------------
> POSTGIS="1.3.1" GEOS="2.2.3-CAPI-1.1.1" PROJ="Rel. 4.5.0, 22 Oct 2006"
> USE_STATS
> (1 row)
>
> 1. I have changed value log_min_duration_statement
> 2. Restart of postgresql
> 3. Restart of apache
> 4. Restart of all firefox windows and deleted cache
> 5. pmapper loaded
>
> Here are two logs when reproducing the problem:
> http://projects.gpsmapy.sk/logs/
>
> I have tried to use mapserver also as fastcgi, but same problem. Every time
> the problem will start when I try to identify the object
> (Obj_queryBy{Point,Rect,etc.}).
>
> Thanks a lot
> Ivan
>
>
>
>
> On Wednesday 12 March 2008 04:41, you wrote:
> > Ivan,
> >
> > p.mapper seems to use the typical php
> > {map,layer}Obj_queryBy{Point,Rect,etc.} functions. These calls end up
> > calling the same msPOSTGIS* functions as everything else.
> >
> > I can't seem to reproduce your problem with a simple testcase
> > (basically, the attached files). It might help if you can set
> > log_min_duration_statement = 0 in your postgresql.conf, reproduce the
> > problem, and send the output from your postgresql log file. It will
> > show all commands issued to the database, including the BEGIN, and the
> > DECLARE CURSOR ..., and FETCH for every layer.
> >
> > I can setup p.mapper if that's necessary to reproduce the problem.
> >
> > (By the way, I assume you're not using an ancient version of
> > postgis, in the 0.5 - 0.6 era. There is an alternate codepath for
> > that, which I have not tested.)
> >
> > Thanks,
> >
> > Dave
> >
> > On Sun, Mar 9, 2008 at 5:31 AM, Ivan Mincik <ivan.mincik at gmail.com> wrote:
> > > I am sorry for late reply,
> > > I am testing mapserver with p.mapper application so I *don't* use it as
> > > cgi/fcgi.
> > >
> > > I have downloaded source package of mapserver 5.0.2 from debian
> > > unstable, applied a patch and compiled on Debian Etch.
> > > Installed and restarted apache and also rebooted whole system few times
> > > (I am testing this on my desktop computer).
> > >
> > > The problems are starting mostly when I am trying to use p.mapper's
> > > identify function, to get attributes of map object. Then p.mapper is
> > > freezing. In mapfile i have 7 postgis layers.
> > >
> > > I can try this also with some openlayers which is using cgi.
> > >
> > > LOGS:
> > >
> > > 2008-03-09 10:24:44 CET WARNING: there is already a transaction in
> > > progress 2008-03-09 10:24:45 CET WARNING: there is already a
transaction
> > > in progress 2008-03-09 10:24:46 CET ERROR: DECLARE CURSOR may only be
> > > used in transaction blocks
> > > 2008-03-09 10:24:46 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:46 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:46 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:46 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:47 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:47 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:47 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:47 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:50 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:50 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:50 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:52 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:52 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:52 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:53 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:53 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:53 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:54 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:54 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:54 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:54 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:54 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:54 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:24:55 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:24:55 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:24:55 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:25:00 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:25:00 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:25:00 CET ERROR: cursor "mycursor" does not exist
> > > 2008-03-09 10:25:00 CET ERROR: DECLARE CURSOR may only be used in
> > > transaction blocks
> > > 2008-03-09 10:25:00 CET WARNING: there is no transaction in progress
> > > 2008-03-09 10:25:01 CET ERROR: cursor "mycursor" does not exist
> > >
> > >
> > > Thanks a lot
> > > Ivan
> > >
> > > On Wednesday 05 March 2008 22:41, you wrote:
> > > > Ivan,
> > > >
> > > > Thanks for the problem report. If you are using fastcgi, you may
> > > > need to restart it.
> > > >
> > > > The only two places PQconnectdb is called is in msPOSTGISLayerOpen
> > > > and in msPOSTGRESQLJoinConnect, which operates independently, not
> > > > using cursors or the connection pool. With a patched
> > > > msPOSTGISLayerOpen, PQexec(layerinfo->conn, "BEGIN") is always called
> > > > right after connecting, before any queries and before the connection
> > > > ends up in the connection pool.
> > > >
> > > > So I'm wondering if you've put the new mapserv executable in your
> > > > cgi-bin, but not restarted the webserver, and it's pulling old
> > > > connections out of the fastcgi connection pool, which have not had
> > > > PQexec(layerinfo->conn, "BEGIN") issued to them (and thus, no
> > > > transaction started).
> > > >
> > > > Try restarting fastcgi. Depending on your configuration,
> > > > restarting your webserver may automatically restart fastcgi, or you
> > > > may have to specifically restart the fastcgi service/daemon on that
> > > > machine.
> > > >
> > > > Please let us know if this fixes the problem.
> > > >
> > > > Thanks,
> > > >
> > > > Dave
> > > >
> > > > On Wed, Mar 5, 2008 at 7:26 AM, Ivan Mincik <ivan.mincik at gmail.com>
> wrote:
> > > > > Nothing is perfect. There are no problems with applied patch when
> > > > > browsing the map. But when I use identify object query from
> > > > > php5-mapscript the problem is rising again.
> > > > >
> > > > > I have in postgresql log:
> > > > >
> > > > > 2008-03-05 13:19:30 CET WARNING: there is no transaction in
> > > > > progress 2008-03-05 13:19:30 CET ERROR: cursor "mycursor" does not
> > > > > exist 2008-03-05 13:19:31 CET ERROR: DECLARE CURSOR may only be
> > > > > used in transaction blocks
> > > > > 2008-03-05 13:19:31 CET WARNING: there is no transaction in
> > > > > progress 2008-03-05 13:19:31 CET ERROR: cursor "mycursor" does not
> > > > > exist 2008-03-05 13:19:32 CET ERROR: DECLARE CURSOR may only be
> > > > > used in transaction blocks
> > > > > 2008-03-05 13:19:32 CET WARNING: there is no transaction in
> > > > > progress 2008-03-05 13:19:32 CET ERROR: cursor "mycursor" does not
> > > > > exist 2008-03-05 13:19:34 CET ERROR: DECLARE CURSOR may only be
> > > > > used in transaction blocks
> > > > > 2008-03-05 13:19:34 CET WARNING: there is no transaction in
> > > > > progress 2008-03-05 13:19:34 CET ERROR: cursor "mycursor" does not
> > > > > exist 2008-03-05 13:20:10 CET LOG: could not receive data from
> > > > > client: Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: could not receive data from client:
> > > > > Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: autovacuum: processing database
> > > > > "gisplan" 2008-03-05 13:20:10 CET LOG: could not receive data from
> > > > > client: Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: could not receive data from client:
> > > > > Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: could not receive data from client:
> > > > > Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: could not receive data from client:
> > > > > Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: could not receive data from client:
> > > > > Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: could not receive data from client:
> > > > > Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > > 2008-03-05 13:20:10 CET LOG: could not receive data from client:
> > > > > Connection reset by peer
> > > > > 2008-03-05 13:20:10 CET LOG: unexpected EOF on client connection
> > > > >
> > > > >
> > > > > 2008-03-05 13:20:40 CET WARNING: there is already a
transaction in
> > > > > progress 2008-03-05 13:20:40 CET WARNING: there is already a
> > > > > transaction in progress 2008-03-05 13:20:41 CET WARNING: there is
> > > > > already a transaction in progress 2008-03-05 13:20:42 CET WARNING:
> > > > > there is already a transaction in progress 2008-03-05 13:20:43 CET
> > > > > WARNING: there is already a transaction in progress 2008-03-05
> > > > > 13:20:43 CET WARNING: there is already a transaction in progress
> > > > > 2008-03-05 13:20:44 CET WARNING: there is already a transaction in
> > > > > progress 2008-03-05 13:20:44 CET WARNING: there is already a
> > > > > transaction in progress 2008-03-05 13:20:45 CET WARNING: there is
> > > > > already a transaction in progress 2008-03-05 13:20:45 CET WARNING:
> > > > > there is already a transaction in progress 2008-03-05 13:20:45 CET
> > > > > WARNING: there is already a transaction in progress 2008-03-05
> > > > > 13:20:46 CET WARNING: there is already a transaction in progress
> > > > > 2008-03-05 13:20:46 CET WARNING: there is already a transaction in
> > > > > progress 2008-03-05 13:20:46 CET WARNING: there is already a
> > > > > transaction in progress 2008-03-05 13:20:47 CET WARNING: there is
> > > > > already a transaction in progress 2008-03-05 13:20:47 CET WARNING:
> > > > > there is already a transaction in progress 2008-03-05 13:20:48 CET
> > > > > WARNING: there is already a transaction in progress 2008-03-05
> > > > > 13:20:49 CET WARNING: there is already a transaction in progress
> > > > > 2008-03-05 13:20:50 CET WARNING: there is already a transaction in
> > > > > progress 2008-03-05 13:20:50 CET WARNING: there is already a
> > > > > transaction in progress
> > > > >
> > > > >
> > > > > ivan
> > > > >
> > > > > On Monday 03 March 2008 21:53, rich.fromm wrote:
> > > > > > hrach wrote:
> > > > > > > I use mapserver 4.10.3, postgresql 8.1, Debian Etch.
> > > > > > >
> > > > > > > Is anybody using CLOSE_CONNECTION=DEFER without any problems ?
> > > > > >
> > > > > > I am now using it fine with mapserver 5.0.0 after applying the
> > > > > > patch for bug 2497:
> > > > > > http://trac.osgeo.org/mapserver/ticket/2497
> > > > > >
> > > > > > I don't know if 4.10.3 is different enough for that patch to be
> > > > > > applicable or not. But if it's not too hard to upgrade, you
> > > > > > might want to try a later version (e.g. 5.0.2) plus that patch.
> > > > > > Note that the patch may make it into the 5.0.3 release (it was
> > > > > > originally targetted for 5.2).
> > > > > >
> > > > > > You also might want to take a look at the following related
> > > > > > mailing list threads:
> > > > > >
> > > > > >
http://www.nabble.com/Segmentation-fault---mapserver---postgis-to
> > > > > >12653 945.h tml#a12674499
>
>
> > > > > > http://www.nabble.com/postgres-transaction-warnings-to15749333.ht
> > > > > >ml
> > > > > >
> > > > > > - Rich
> > > > >
> > > > > _______________________________________________
> > > > > mapserver-users mailing list
> > > > > mapserver-users at lists.osgeo.org
> > > > > http://lists.osgeo.org/mailman/listinfo/mapserver-users
>
More information about the MapServer-users
mailing list