Hi,
the release is currently blocked by failures in locking failures in WFS cite tests.
There is a chance these are due to Mauro recent JDBC locking optimization, but
looking at it, I’m not sure how.
Here is the log of the requests in the failing test (from my local CITE test engine run):
Assertion:
In response to a Transaction request that specifies releaseAction="SOME",
only modified features in the lock set shall be unlocked.
Request d1e29892_1:
Method: POST
URL: [http://localhost:8080/geoserver/wfs](http://localhost:8080/geoserver/wfs)
Body:
<wfs:Transaction xmlns="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)" xmlns:ctl="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)"
xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:myparsers="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:p="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:parsers="[http://www.occamlab.com/te/parsers](http://www.occamlab.com/te/parsers)"
xmlns:saxon="[http://saxon.sf.net/](http://saxon.sf.net/)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:te="[http://www.occamlab.com/te](http://www.occamlab.com/te)"
xmlns:tec="java:com.occamlab.te.TECore"
xmlns:tems="java:com.occamlab.te.web.MonitorServlet"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xi="[http://www.w3.org/2001/XInclude](http://www.w3.org/2001/XInclude)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsd="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
service="WFS"
version="1.1.0">
<wfs:Insert handle="insert-1">
<sf:EntitéGénérique gml:id="cite.gmlsf0-f502">
<gml:name codeSpace="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)">cite.gmlsf0-f502</gml:name>
<sf:attribut.Géométrie>
<gml:Point srsName="urn:ogc:def:crs:EPSG::4326">
<gml:pos>68.723555 -5.635101</gml:pos>
</gml:Point>
</sf:attribut.Géométrie>
<sf:boolProperty>false</sf:boolProperty>
<sf:str4Property>#!/_</sf:str4Property>
</sf:EntitéGénérique>
</wfs:Insert>
</wfs:Transaction>
Response from parser p:XMLValidatingParser.GMLSF1:
<wfs:TransactionResponse xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:it.geosolutions="[http://www.geo-solutions.it](http://www.geo-solutions.it)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
version="1.1.0"
xsi:schemaLocation="[http://www.opengis.net/wfs](http://www.opengis.net/wfs) [http://localhost:8080/geoserver/schemas/wfs/1.1.0/wfs.xsd](http://localhost:8080/geoserver/schemas/wfs/1.1.0/wfs.xsd)">
<wfs:TransactionSummary>
<wfs:totalInserted>1</wfs:totalInserted>
<wfs:totalUpdated>0</wfs:totalUpdated>
<wfs:totalDeleted>0</wfs:totalDeleted>
</wfs:TransactionSummary>
<wfs:TransactionResults/>
<wfs:InsertResults>
<wfs:Feature handle="insert-1">
<ogc:FeatureId fid="EntitéGénérique.fid-622faeca_14609a39d11_-7fda"/>
</wfs:Feature>
</wfs:InsertResults>
<!--Response received in [100] milliseconds--></wfs:TransactionResponse>
Request d1e29939_1:
Method: POST
URL: [http://localhost:8080/geoserver/wfs](http://localhost:8080/geoserver/wfs)
Body:
<wfs:LockFeature xmlns="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)" xmlns:ctl="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)"
xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:myparsers="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:p="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:parsers="[http://www.occamlab.com/te/parsers](http://www.occamlab.com/te/parsers)"
xmlns:saxon="[http://saxon.sf.net/](http://saxon.sf.net/)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:te="[http://www.occamlab.com/te](http://www.occamlab.com/te)"
xmlns:tec="java:com.occamlab.te.TECore"
xmlns:tems="java:com.occamlab.te.web.MonitorServlet"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xi="[http://www.w3.org/2001/XInclude](http://www.w3.org/2001/XInclude)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsd="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
expiry="5"
handle="LockFeature-tc3"
lockAction="ALL"
service="WFS"
version="1.1.0">
<wfs:Lock handle="lock-1" typeName="sf:EntitéGénérique">
<ogc:Filter>
<ogc:BBOX>
<ogc:PropertyName>sf:attribut.Géométrie</ogc:PropertyName>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
<gml:lowerCorner>34.5 -10.0</gml:lowerCorner>
<gml:upperCorner>72.0 32.0</gml:upperCorner>
</gml:Envelope>
</ogc:BBOX>
</ogc:Filter>
</wfs:Lock>
</wfs:LockFeature>
Response from parser p:XMLValidatingParser.GMLSF1:
<wfs:LockFeatureResponse xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:it.geosolutions="[http://www.geo-solutions.it](http://www.geo-solutions.it)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
xsi:schemaLocation="[http://www.opengis.net/wfs](http://www.opengis.net/wfs) [http://localhost:8080/geoserver/schemas/schemas/wfs/1.1.0/wfs.xsd](http://localhost:8080/geoserver/schemas/schemas/wfs/1.1.0/wfs.xsd)">
<wfs:LockId>LockFeature-tc3_4c8f938e38e98c7f</wfs:LockId>
<wfs:FeaturesLocked>
<ogc:FeatureId fid="EntitéGénérique.f004"/>
<ogc:FeatureId fid="EntitéGénérique.f007"/>
<ogc:FeatureId fid="EntitéGénérique.f017"/>
<ogc:FeatureId fid="EntitéGénérique.fid-622faeca_14609a39d11_-7fda"/>
</wfs:FeaturesLocked>
<!--Response received in [88] milliseconds--></wfs:LockFeatureResponse>
Request d1e30011_1:
Method: POST
URL: [http://localhost:8080/geoserver/wfs](http://localhost:8080/geoserver/wfs)
Body:
<wfs:Transaction xmlns="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)" xmlns:ctl="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)"
xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:myparsers="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:p="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:parsers="[http://www.occamlab.com/te/parsers](http://www.occamlab.com/te/parsers)"
xmlns:saxon="[http://saxon.sf.net/](http://saxon.sf.net/)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:te="[http://www.occamlab.com/te](http://www.occamlab.com/te)"
xmlns:tec="java:com.occamlab.te.TECore"
xmlns:tems="java:com.occamlab.te.web.MonitorServlet"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xi="[http://www.w3.org/2001/XInclude](http://www.w3.org/2001/XInclude)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsd="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
releaseAction="SOME"
service="WFS"
version="1.1.0">
<wfs:LockId>LockFeature-tc3_4c8f938e38e98c7f</wfs:LockId>
<wfs:Update handle="upd-1" typeName="sf:EntitéGénérique">
<wfs:Property>
<wfs:Name>sf:boolProperty</wfs:Name>
<wfs:Value>true</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>gml:name</ogc:PropertyName>
<ogc:Literal>cite.gmlsf0-f502</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>
Response from parser p:XMLValidatingParser.GMLSF1:
<wfs:TransactionResponse xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:it.geosolutions="[http://www.geo-solutions.it](http://www.geo-solutions.it)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
version="1.1.0"
xsi:schemaLocation="[http://www.opengis.net/wfs](http://www.opengis.net/wfs) [http://localhost:8080/geoserver/schemas/wfs/1.1.0/wfs.xsd](http://localhost:8080/geoserver/schemas/wfs/1.1.0/wfs.xsd)">
<wfs:TransactionSummary>
<wfs:totalInserted>0</wfs:totalInserted>
<wfs:totalUpdated>1</wfs:totalUpdated>
<wfs:totalDeleted>0</wfs:totalDeleted>
</wfs:TransactionSummary>
<wfs:TransactionResults/>
<wfs:InsertResults>
<wfs:Feature>
<ogc:FeatureId fid="none"/>
</wfs:Feature>
</wfs:InsertResults>
<!--Response received in [99] milliseconds--></wfs:TransactionResponse>
Request d1e30077_1:
Method: POST
URL: [http://localhost:8080/geoserver/wfs](http://localhost:8080/geoserver/wfs)
Body:
<wfs:Transaction xmlns="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)" xmlns:ctl="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)"
xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:myparsers="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:p="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:parsers="[http://www.occamlab.com/te/parsers](http://www.occamlab.com/te/parsers)"
xmlns:saxon="[http://saxon.sf.net/](http://saxon.sf.net/)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:te="[http://www.occamlab.com/te](http://www.occamlab.com/te)"
xmlns:tec="java:com.occamlab.te.TECore"
xmlns:tems="java:com.occamlab.te.web.MonitorServlet"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xi="[http://www.w3.org/2001/XInclude](http://www.w3.org/2001/XInclude)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsd="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
service="WFS"
version="1.1.0">
<wfs:Delete handle="del-1" typeName="sf:EntitéGénérique">
<ogc:Filter>
<ogc:PropertyIsEqualTo>
<ogc:PropertyName>gml:name</ogc:PropertyName>
<ogc:Literal>cite.gmlsf0-f502</ogc:Literal>
</ogc:PropertyIsEqualTo>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>
Response from parser p:XMLValidatingParser.GMLSF1:
<ows:ExceptionReport xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)" xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
version="1.0.0"
xsi:schemaLocation="[http://www.opengis.net/ows](http://www.opengis.net/ows) [http://localhost:8080/geoserver/schemas/ows/1.0.0/owsExceptionReport.xsd](http://localhost:8080/geoserver/schemas/ows/1.0.0/owsExceptionReport.xsd)">
<ows:Exception exceptionCode="MissingParameterValue" locator="del-1">
<ows:ExceptionText>Transaction does not have authorization for EntitéGénérique:EntitéGénérique.f007</ows:ExceptionText>
</ows:Exception>
<!--Response received in [98] milliseconds--></ows:ExceptionReport>
Message d1e30118_1:
FAILURE: Expected totalDeleted = 1 (feature with gml:name="cite.gmlsf0-f502" should be UNLOCKED)
Subtest s0010/d1e34700_1/d1e760_1/d1e31421_1/d1e29472_1/d1e30125_1 Failed
Request d1e30140_1:
Method: POST
URL: [http://localhost:8080/geoserver/wfs](http://localhost:8080/geoserver/wfs)
Body:
<wfs:Transaction xmlns="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)" xmlns:ctl="[http://www.occamlab.com/ctl](http://www.occamlab.com/ctl)"
xmlns:gml="[http://www.opengis.net/gml](http://www.opengis.net/gml)"
xmlns:myparsers="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:ogc="[http://www.opengis.net/ogc](http://www.opengis.net/ogc)"
xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)"
xmlns:p="[http://teamengine.sourceforge.net/parsers](http://teamengine.sourceforge.net/parsers)"
xmlns:parsers="[http://www.occamlab.com/te/parsers](http://www.occamlab.com/te/parsers)"
xmlns:saxon="[http://saxon.sf.net/](http://saxon.sf.net/)"
xmlns:sf="[http://cite.opengeospatial.org/gmlsf](http://cite.opengeospatial.org/gmlsf)"
xmlns:te="[http://www.occamlab.com/te](http://www.occamlab.com/te)"
xmlns:tec="java:com.occamlab.te.TECore"
xmlns:tems="java:com.occamlab.te.web.MonitorServlet"
xmlns:wfs="[http://www.opengis.net/wfs](http://www.opengis.net/wfs)"
xmlns:xi="[http://www.w3.org/2001/XInclude](http://www.w3.org/2001/XInclude)"
xmlns:xlink="[http://www.w3.org/1999/xlink](http://www.w3.org/1999/xlink)"
xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsd="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
service="WFS"
version="1.1.0">
<wfs:Delete handle="del-1" typeName="sf:EntitéGénérique">
<ogc:Filter>
<ogc:BBOX>
<ogc:PropertyName>sf:attribut.Géométrie</ogc:PropertyName>
<gml:Envelope srsName="urn:ogc:def:crs:EPSG::4326">
<gml:lowerCorner>34.5 -10.0</gml:lowerCorner>
<gml:upperCorner>72.0 32.0</gml:upperCorner>
</gml:Envelope>
</ogc:BBOX>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>
Response from parser p:XMLValidatingParser.GMLSF1:
<ows:ExceptionReport xmlns:ows="[http://www.opengis.net/ows](http://www.opengis.net/ows)" xmlns:xs="[http://www.w3.org/2001/XMLSchema](http://www.w3.org/2001/XMLSchema)"
xmlns:xsi="[http://www.w3.org/2001/XMLSchema-instance](http://www.w3.org/2001/XMLSchema-instance)"
version="1.0.0"
xsi:schemaLocation="[http://www.opengis.net/ows](http://www.opengis.net/ows) [http://localhost:8080/geoserver/schemas/ows/1.0.0/owsExceptionReport.xsd](http://localhost:8080/geoserver/schemas/ows/1.0.0/owsExceptionReport.xsd)">
<ows:Exception exceptionCode="MissingParameterValue" locator="del-1">
<ows:ExceptionText>Transaction does not have authorization for EntitéGénérique:EntitéGénérique.f004</ows:ExceptionText>
</ows:Exception>
<!--Response received in [113] milliseconds--></ows:ExceptionReport>
Subtest s0010/d1e34700_1/d1e760_1/d1e31421_1/d1e29472_1/d1e30186_1 Passed
Result: Failed
The test is failing because when doing a transaction against locked features with relaseAction=SOME, according to the spec:
A value of SOME
indicates that only the locks on feature instances modified by the transaction should be
released. The other, unmodified, feature instances should remain locked using the same
so that subsequent transactions can operate on those feature instances. In the
event that the releaseAction is set to SOME, and an expiry period was specified on the
or elements using the expiry attribute, the
expiry counter must be reset to zero after each transaction unless all feature instances in
the locked set have been operated upon.
For example, if a client application locks 20 feature instances and then submits a
transaction request that only operates on 10 of those locked feature instances, a
releaseAction of SOME would mean that the 10 remaining unaltered feature instances
should remain locked when the transaction terminates. Subsequent transaction operations
can then be submitted by the client application, using the same lock identifier to modify
the remaining 10 feature instances
Long story short, the features modified by the transaction should be unlocked, and the lock life should be extended for the others.
In the test results above you can see that instead one feature gets modified, but apparently its lock
is not released.
I’ve been looking at the code in Transaction, and in JDBCDataStore, and InProcessLockManager, so far I don’t
see how we can even release a lock on a specific feature id, there is a unLockFeatureID method,
but nothing in GeoTools or GeoServer is calling it.
And the code Mauro modified only called assertAccess, which by itself does not release locks
I’m going to look into this more, but if anybody has a clue, please share
Cheers
Andrea
–
==
Meet us at GEO Business 2014! in London! Visit http://goo.gl/fES3aK
for more information.
Ing. Andrea Aime
@geowolf
Technical Lead
GeoSolutions S.A.S.
Via Poggio alle Viti 1187
55054 Massarosa (LU)
Italy
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549
http://www.geo-solutions.it
http://twitter.com/geosolutions_it