Thanks a lot for the many updates... I actually don't have access to most of my test data right now, as it is at work. I'll try my JMeter test again on Monday with compression enabled, and I'll also take a look at your Junit test case.
The Domain.xml I sent you was indeed the one that was failing. I am using MySQL 4.0.18. We have talked about potentially moving to 4.1 at some point, but for now our production environment depends on 4.0.18. Are there any database settings that I should tweak (e.g. regarding locking?). -Mirko > Created a testcase where many threads effectively at random do > get,put,delete on the *same* file. I guess this is the hardest > concurrency test, the prorgrammer's night mare, right? > > And it worked with both the 2.1 locking and the new one in 2.2. Only > thing I did was to reduce the number of connections to 10 as I do not > know how many internal conncections MySQL has by default and how it > reacts when it runs out of connections. Some dbs throw errors instead > of waiting then... > > Anyway, the test is at > > testsuite\testsuite\junit\xmltestcases\functional\extra\multi-user\getPut\getPutSame.xml > > in cvs head. Maybe you can tune it to reveal the deadlocks. I will > have an additional look at it then. > > Oliver > > On Sat, 20 Nov 2004 14:42:44 +0100, Oliver Zeigermann > <[EMAIL PROTECTED]> wrote: >> ... and if you provided a test case that revealed any more deadlock I >> promise that I will try to help you further. >> >> Oliver >> >> On Sat, 20 Nov 2004 14:40:47 +0100, Oliver Zeigermann >> >> >> <[EMAIL PROTECTED]> wrote: >> > And finally took the time to check it with MySQL 4.1 with the attached >> > Domain.xml which differs from yours in details only and: >> > >> > no deadlocks, no conflicts, no problems. >> > >> > Could you describe how your test scenario looks like? Is your attached >> > Domain.xml really the one you used for testing? >> > >> > Oliver >> > >> > On Sat, 20 Nov 2004 13:27:36 +0100, Oliver Zeigermann >> > >> > >> > <[EMAIL PROTECTED]> wrote: >> > > I just tried this >> > > >> > > TProcessor.CMD -pattern *cases\\functional\\extra\\multi-user* >> -users >> > > 20 -iterations 10 >> > > >> > > which is 20 threads repeating uploads, deletes for 10 times and >> > > meanwhile browsed Slide with the Windows explorer and it worked >> > > without deadlocks. >> > > >> > > Caching was turned off as well. >> > > >> > > However, my store is the tx file one and I can not exclude there are >> > > still programming errors in the MySQL store as I have never used it. >> > > Lately problems were reported with other db stores when not using >> > > compression mode. Could you try it again with compression turned on >> > > and see if this changes anything. >> > > >> > > Oliver >> > > >> > > On Sat, 20 Nov 2004 09:31:17 +0100, Oliver Zeigermann >> > > >> > > >> > > <[EMAIL PROTECTED]> wrote: >> > > > OK, thanks for providing that info. I will have a look at it ASAP. >> > > > Which MySQL version are you using? >> > > > >> > > > Oliver >> > > > >> > > > >> > > > On Fri, 19 Nov 2004 17:44:11 -0800, Mirko Froehlich >> > > > >> > > > >> > > > <[EMAIL PROTECTED]> wrote: >> > > > > Yes, I'm using 2.1b2. I have copied my domain.xml below. It >> does have the >> > > > > two parameters you mentioned. One thing I should mention is that >> I disabled >> > > > > caching, because I really wanted to simulate the effect of >> iterating over >> > > > > new content without the effects of caching. My domain.xml >> defines both a >> > > > > text and a JDBC store, but the JDBC store is the one I'm using >> for this >> > > > > test. I have also included one of the stack traces below. >> > > > > >> > > > > >> > > > > Domain.xml: >> > > > > ========= >> > > > > >> > > > > <?xml version="1.0"?> >> > > > > <slide> >> > > > > <namespace name="slide"> >> > > > > <definition> >> > > > > <store name="tx"> >> > > > > <!-- cache settings (added by mirko) --> >> > > > > <parameter name="cache-mode">off</parameter> >> > > > > <parameter name="enable-content-caching">false</parameter> >> > > > > <parameter name="content-cache-size">1000</parameter> >> > > > > <parameter name="object-cache-size">1000</parameter> >> > > > > >> > > > > <parameter name="tlock-timeout">120</parameter> >> > > > > <nodestore >> > > > > classname="org.apache.slide.store.txfile.TxXMLFileDescriptorsStore"> >> > > > > <parameter >> > > > > name="rootpath">/usr/local/jakarta-slide/repository/store/metadata</parameter> >> > > > > <parameter >> > > > > name="workpath">/usr/local/jakarta-slide/repository/work/metadata</parameter> >> > > > > <parameter name="defer-saving">true</parameter> >> > > > > <parameter name="timeout">120</parameter> >> > > > > </nodestore> >> > > > > <sequencestore >> classname="org.apache.slide.store.txfile.FileSequenceStore"> >> > > > > <parameter >> > > > > name="rootpath">/usr/local/jakarta-slide/repository/store/sequence</parameter> >> > > > > </sequencestore> >> > > > > <securitystore> >> > > > > <reference store="nodestore"/> >> > > > > </securitystore> >> > > > > <lockstore> >> > > > > <reference store="nodestore"/> >> > > > > </lockstore> >> > > > > <revisiondescriptorsstore> >> > > > > <reference store="nodestore"/> >> > > > > </revisiondescriptorsstore> >> > > > > <revisiondescriptorstore> >> > > > > <reference store="nodestore"/> >> > > > > </revisiondescriptorstore> >> > > > > <contentstore >> classname="org.apache.slide.store.txfile.TxFileContentStore"> >> > > > > <parameter >> > > > > name="rootpath">/usr/local/jakarta-slide/repository/store/content</parameter> >> > > > > <parameter >> > > > > name="workpath">/usr/local/jakarta-slide/repository/work/content</parameter> >> > > > > <parameter name="defer-saving">true</parameter> >> > > > > <parameter name="timeout">120</parameter> >> > > > > </contentstore> >> > > > > <!-- uncomment if you want to use the sample >> Indexer --> >> > > > > <!-- be sure to have Lucene in your classpath >> > > > > --> >> > > > > <!-- >> > > > > <contentindexer >> > > > > classname="org.apache.slide.index.SampleTxtContainsIndexer"> >> > > > > <parameter name="indexpath">./index</parameter> >> > > > > </contentindexer> >> > > > > --> >> > > > > </store> >> > > > > <store name="db"> >> > > > > <!-- cache settings (added by mirko) --> >> > > > > <parameter name="cache-mode">off</parameter> >> > > > > <parameter name="enable-content-caching">false</parameter> >> > > > > <parameter name="content-cache-size">1000</parameter> >> > > > > <parameter name="object-cache-size">1000</parameter> >> > > > > >> > > > > <nodestore >> classname="org.apache.slide.store.impl.rdbms.JDBCStore"> >> > > > > <parameter >> > > > > name="adapter">org.apache.slide.store.impl.rdbms.MySqlRDBMSAdapter</parameter> >> > > > > <parameter name="driver">com.mysql.jdbc.Driver</parameter> >> > > > > <parameter name="url">jdbc:mysql://localhost/slide</parameter> >> > > > > <parameter name="user">slide</parameter> >> > > > > <parameter name="password">slide</parameter> >> > > > > <parameter name="dbcpPooling">true</parameter> >> > > > > <parameter name="maxPooledConnections">30</parameter> >> > > > > <parameter name="isolation">SERIALIZABLE</parameter> >> > > > > <parameter name="compress">false</parameter> >> > > > > </nodestore> >> > > > > <contentstore> >> > > > > <reference store="nodestore" /> >> > > > > </contentstore> >> > > > > <securitystore> >> > > > > <reference store="nodestore" /> >> > > > > </securitystore> >> > > > > <lockstore> >> > > > > <reference store="nodestore" /> >> > > > > </lockstore> >> > > > > <revisiondescriptorsstore> >> > > > > <reference store="nodestore" /> >> > > > > </revisiondescriptorsstore> >> > > > > <revisiondescriptorstore> >> > > > > <reference store="nodestore" /> >> > > > > </revisiondescriptorstore> >> > > > > </store> >> > > > > <scope match="/" store="tx"/> >> > > > > <scope match="/db" store="db"/> >> > > > > </definition> >> > > > > <configuration> >> > > > > <!-- Actions mapping --> >> > > > > <read-object>/actions/read</read-object> >> > > > > <create-object>/actions/write</create-object> >> > > > > <remove-object>/actions/write</remove-object> >> > > > > <grant-permission>/actions/write-acl</grant-permission> >> > > > > <revoke-permission>/actions/write-acl</revoke-permission> >> > > > > <read-permissions>/actions/read-acl</read-permissions> >> > > > > <read-own-permissions>/actions/read-current-user-privilege-set</read-own-permissions> >> > > > > <lock-object>/actions/write</lock-object> >> > > > > <kill-lock>/actions/unlock</kill-lock> >> > > > > <read-locks>/actions/read</read-locks> >> > > > > <read-revision-metadata>/actions/read</read-revision-metadata> >> > > > > <create-revision-metadata>/actions/write-properties</create-revision-metadata> >> > > > > <modify-revision-metadata>/actions/write-properties</modify-revision-metadata> >> > > > > <remove-revision-metadata>/actions/write-properties</remove-revision-metadata> >> > > > > <read-revision-content>/actions/read</read-revision-content> >> > > > > >> > > > > <create-revision-content>/actions/write-content</create-revision-content> >> > > > > >> > > > > <modify-revision-content>/actions/write-content</modify-revision-content> >> > > > > >> > > > > <remove-revision-content>/actions/write-content</remove-revision-content> >> > > > > <bind-member>/actions/bind</bind-member> >> > > > > <unbind-member>/actions/unbind</unbind-member> >> > > > > <!-- Paths configuration --> >> > > > > <userspath>/users</userspath> >> > > > > <rolespath>/roles</rolespath> >> > > > > <actionspath>/actions</actionspath> >> > > > > <filespath>/files</filespath> >> > > > > <parameter name="dav">true</parameter> >> > > > > <parameter name="standalone">true</parameter> >> > > > > <parameter name="acl_inheritance_type">path</parameter> >> > > > > <!-- Nested roles: means no nesting (default), 1 >> means one >> > > > > sublevel, etc. --> >> > > > > <parameter name="nested_roles_maxdepth">0</parameter> >> > > > > <!-- Can be "off", "write" and "full" --> >> > > > > <parameter name="sequential-mode">full</parameter> >> > > > > <!-- "false" lets all read-only methods be executed >> outside of >> > > > > transactions --> >> > > > > <parameter name="all-methods-in-transactions">true</parameter> >> > > > > <!-- Setting this to true will force Slide to >> internally >> > > > > convert the username a user >> > > > > enters at login to lowercase. This is useful >> for users who >> > > > > can't be bothered >> > > > > with turning off their capslock key before >> logging in. --> >> > > > > <parameter name="force-lowercase-login">false</parameter> >> > > > > </configuration> >> > > > > <data> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> uri="/"> >> > > > > <!-- Subject can be: >> > > > > any user "all" >> > > > > authenticated user "authenticated" >> > > > > unauthenticated user "unauthenticated" >> > > > > self "self" >> > > > > owner of resource "owner" >> > > > > a user "/users/john" >> > > > > a role "/roles/admin" >> > > > > --> >> > > > > <permission action="all" subject="/roles/root" >> inheritable="true"/> >> > > > > <permission action="/actions/read-acl" subject="all" >> inheritable="true" >> > > > > negative="true"/> >> > > > > <permission action="/actions/write-acl" subject="all" >> inheritable="true" >> > > > > negative="true"/> >> > > > > <permission action="/actions/unlock" subject="all" >> inheritable="true" >> > > > > negative="true"/> >> > > > > <permission action="/actions/read" subject="all" >> inheritable="true"/> >> > > > > <!-- db store --> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> uri="/db"> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true"/> >> > > > > <!-- >> > > > > <permission action="/actions/write" >> > > > > subject="/roles/user" inheritable="true"/> >> > > > > <permission action="/actions/read-acl" >> subject="owner" >> > > > > inheritable="true"/> >> > > > > --> >> > > > > </objectnode> >> > > > > <!-- /users --> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/users"> >> > > > > <permission action="all" subject="self" inheritable="true"/> >> > > > > <permission action="all" subject="/roles/projector" >> inheritable="true"/> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true" >> > > > > negative="true"/> >> > > > > <!-- /users/root represents the >> administrator --> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/users/root"> >> > > > > <revision> >> > > > > <property namespace="http://jakarta.apache.org/slide/" >> > > > > name="password">root</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <!-- /users/john and /users/john2 represent >> > > > > authenticated users --> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/users/john"> >> > > > > <revision> >> > > > > <property namespace="http://jakarta.apache.org/slide/" >> > > > > name="password">john</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/users/john2"> >> > > > > <revision> >> > > > > <property namespace="http://jakarta.apache.org/slide/" >> > > > > name="password">john2</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <!-- /users/guest represents an >> authenticated or >> > > > > unauthenticated guest user --> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/users/guest"> >> > > > > <revision> >> > > > > <property namespace="http://jakarta.apache.org/slide/" >> > > > > name="password">guest</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/users/projector"> >> > > > > <revision> >> > > > > <property namespace="http://jakarta.apache.org/slide/" >> > > > > name="password">projector</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > </objectnode> >> > > > > <!-- /roles --> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/roles"> >> > > > > <permission action="all" subject="self" inheritable="true"/> >> > > > > <permission action="all" subject="/roles/projector" >> inheritable="true"/> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true" >> > > > > negative="true"/> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/roles/root"> >> > > > > <revision> >> > > > > <property name="group-member-set">[CDATA[<D:href >> > > > > xmlns:D='DAV:'>/users/root</D:href>]]</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/roles/user"> >> > > > > <revision> >> > > > > <property name="group-member-set">[CDATA[<D:href >> > > > > xmlns:D='DAV:'>/users/john</D:href><D:href >> > > > > xmlns:D='DAV:'>/users/john2</D:href><D:href >> > > > > xmlns:D='DAV:'>/users/root</D:href><D:href >> > > > > xmlns:D='DAV:'>/users/projector</D:href>]]</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/roles/guest"> >> > > > > <revision> >> > > > > <property name="group-member-set">[CDATA[<D:href >> > > > > xmlns:D='DAV:'>/users/guest</D:href>]]</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/roles/projector"> >> > > > > <revision> >> > > > > <property name="group-member-set">[CDATA[<D:href >> > > > > xmlns:D='DAV:'>/users/root</D:href><D:href >> > > > > xmlns:D='DAV:'>/users/projector</D:href>]]</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > </objectnode> >> > > > > <!-- action --> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions"> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/read"> >> > > > > <revision> >> > > > > <property name="privilege-member-set">[CDATA[<D:href >> > > > > xmlns:D='DAV:'>/actions/read-acl</D:href> <D:href >> > > > > xmlns:D='DAV:'>/actions/read-current-user-privilege-set</D:href>]]</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/read-acl"> >> > > > > <revision> >> > > > > <property name="privilege-member-set"/> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/read-current-user-privilege-set"> >> > > > > <revision> >> > > > > <property name="privilege-member-set"/> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/write"> >> > > > > <revision> >> > > > > <property name="privilege-member-set">[CDATA[<D:href >> > > > > xmlns:D='DAV:'>/actions/write-acl</D:href> <D:href >> > > > > xmlns:D='DAV:'>/actions/write-properties</D:href> <D:href >> > > > > xmlns:D='DAV:'>/actions/write-content</D:href>]]</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/write-acl"> >> > > > > <revision> >> > > > > <property name="privilege-member-set"/> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/write-properties"> >> > > > > <revision> >> > > > > <property name="privilege-member-set"/> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/write-content"> >> > > > > <revision> >> > > > > <property name="privilege-member-set">[CDATA[<D:href >> > > > > xmlns:D='DAV:'>/actions/bind</D:href> <D:href >> > > > > xmlns:D='DAV:'>/actions/unbind</D:href>]]</property> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/bind"> >> > > > > <revision> >> > > > > <property name="privilege-member-set"/> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/unbind"> >> > > > > <revision> >> > > > > <property name="privilege-member-set"/> >> > > > > </revision> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.ActionNode" >> > > > > uri="/actions/unlock"> >> > > > > <revision> >> > > > > <property name="privilege-member-set"/> >> > > > > </revision> >> > > > > </objectnode> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/files"> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true"/> >> > > > > <permission action="/actions/write" subject="/roles/user" >> > > > > inheritable="true"/> >> > > > > <permission action="/actions/read-acl" subject="owner" >> inheritable="true"/> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/projector"> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true"/> >> > > > > <permission action="/actions/write" subject="/roles/projector" >> > > > > inheritable="true"/> >> > > > > <permission action="/actions/read-acl" subject="owner" >> inheritable="true"/> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/projector/work"></objectnode> >> > > > > </objectnode> >> > > > > <!-- DeltaV: default history and workspace >> paths --> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/history"> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true"/> >> > > > > <permission action="/actions/write" subject="/roles/user" >> > > > > inheritable="true"/> >> > > > > <permission action="/actions/read-acl" subject="owner" >> inheritable="true"/> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/workspace"> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true"/> >> > > > > <permission action="/actions/write" subject="/roles/user" >> > > > > inheritable="true"/> >> > > > > <permission action="/actions/read-acl" subject="owner" >> inheritable="true"/> >> > > > > </objectnode> >> > > > > <objectnode classname="org.apache.slide.structure.SubjectNode" >> > > > > uri="/workingresource"> >> > > > > <permission action="all" subject="unauthenticated" >> inheritable="true"/> >> > > > > <permission action="/actions/write" subject="/roles/user" >> > > > > inheritable="true"/> >> > > > > <permission action="/actions/read-acl" subject="owner" >> inheritable="true"/> >> > > > > </objectnode> >> > > > > </objectnode> >> > > > > </data> >> > > > > </namespace> >> > > > > <!-- >> > > > > DeltaV global parameters >> > > > > ======================== >> > > > > * historypath (mandatory=no, default="/history"): >> > > > > Specifies a Slide path which determines the location where >> this DeltaV >> > > > > server stores history data. >> > > > > >> > > > > * workspacepath (mandatory=no, default="/workspace"): >> > > > > Specifies a Slide path which determines the location where >> this DeltaV >> > > > > server allows workspaces to reside. >> > > > > >> > > > > * workingresourcepath (mandatory=no, >> default="/workingresource"): >> > > > > Specifies a Slide path which determines the location where >> this DeltaV >> > > > > server stores working resources. >> > > > > >> > > > > * auto-version (mandatory=no, default="checkout-checkin"): >> > > > > Controls the DeltaV auto-version behaviour. >> > > > > >> > > > > * auto-version-control (mandatory=no, default="false"): >> > > > > Indicates if a resource just created by a PUT should be set >> under >> > > > > version-control. >> > > > > >> > > > > * versioncontrol-exclude (mandatory=no, default=""): >> > > > > Specifies a Slide path which determines resources which are >> excluded >> > > > > from version-control. >> > > > > The default value "" makes no path being excluded. >> > > > > >> > > > > * checkout-fork (mandatory=no, default="forbidden"): >> > > > > Controls the DeltaV check-out behaviour when a version is >> already >> > > > > checked-out or has a successor. >> > > > > >> > > > > * checkin-fork (mandatory=no, default="forbidden"): >> > > > > Controls the DeltaV check-out behaviour when a version has >> already a >> > > > > successor. >> > > > > >> > > > > * standardLivePropertiesClass (mandatory=no, >> > > > > >> > > > > default="org.apache.slide.webdav.util.resourcekind.AbstractResourceKind"): >> > > > > Determines the "agent" knowing about what the standard live >> properties >> > > > > are. >> > > > > It should be a loadable class containing the following >> static methods: >> > > > > - boolean isLiveProperty(String propName) >> > > > > - boolean isProtectedProperty(String propName) >> > > > > - boolean isComputedProperty(String propName) >> > > > > - Set getAllLiveProperties() >> > > > > - Set getAllProtectedProperties() >> > > > > - Set getAllComputedProperties() >> > > > > >> > > > > * uriRedirectorClass (mandatory=no, >> > > > > default="org.apache.slide.webdav.util.DeltavUriRedirector"): >> > > > > Determines the URI redirector class. The DeltaV URI >> redirector is in >> > > > > charge of the following redirections: >> > > > > - version URI to history URI, e.g. /history/2/1.4 to >> /history/2 >> > > > > - latest revision number for history resource to 0.0 >> > > > > - latest revision number for version resource to last URI >> token, >> > > > > e.g. /history/2/1.4 to 1.4 >> > > > > It should be a loadable class containing the following >> static methods: >> > > > > - String redirectUri(String uri) >> > > > > - NodeRevisionNumber redirectLatestRevisionNumber(String >> uri) >> > > > > --> >> > > > > <parameter name="historypath">/history</parameter> >> > > > > <parameter name="workspacepath">/workspace</parameter> >> > > > > <parameter >> name="workingresourcepath">/workingresource</parameter> >> > > > > <parameter name="auto-version">checkout-checkin</parameter> >> > > > > <parameter name="auto-version-control">false</parameter> >> > > > > <parameter name="versioncontrol-exclude"/> >> > > > > <parameter name="checkout-fork">forbidden</parameter> >> > > > > <parameter name="checkin-fork">forbidden</parameter> >> > > > > >> > > > > >> > > > > <!-- Extractor configuration --> >> > > > > <extractors> >> > > > > <extractor >> classname="org.apache.slide.extractor.SimpleXmlExtractor" >> > > > > uri="/files/articles/test.xml"> >> > > > > <configuration> >> > > > > <instruction property="title" xpath="/article/title/text()" /> >> > > > > <instruction property="summary" xpath="/article/summary/text()" >> /> >> > > > > </configuration> >> > > > > </extractor> >> > > > > <extractor >> classname="org.apache.slide.extractor.OfficeExtractor" >> > > > > uri="/files/docs/"> >> > > > > <configuration> >> > > > > <instruction property="author" id="SummaryInformation-0-4" /> >> > > > > <instruction property="application" >> id="SummaryInformation-0-18" /> >> > > > > </configuration> >> > > > > </extractor> >> > > > > </extractors> >> > > > > >> > > > > <!-- Event configuration --> >> > > > > <events> >> > > > > <event classname="org.apache.slide.webdav.event.WebdavEvent" >> enable="true" >> > > > > /> >> > > > > <event classname="org.apache.slide.event.ContentEvent" >> enable="true" /> >> > > > > <event classname="org.apache.slide.event.ContentEvent" >> method="retrieve" >> > > > > enable="false" /> >> > > > > <event classname="org.apache.slide.event.EventCollection" >> enable="true" /> >> > > > > <event classname="org.apache.slide.event.TransactionEvent" >> enable="true" /> >> > > > > >> > > > > <event classname="org.apache.slide.event.MacroEvent" >> enable="true"/> >> > > > > >> > > > > <!--listener >> classname="org.apache.slide.util.event.EventLogger" >> > > > > /--> >> > > > > <listener >> classname="org.apache.slide.event.VetoableEventCollector" /> >> > > > > <listener >> classname="org.apache.slide.event.TransientEventCollector" /> >> > > > > <listener >> classname="org.apache.slide.webdav.event.NotificationTrigger"> >> > > > > <configuration> >> > > > > <notification include-events="false" /> >> > > > > <persist-subscriptions filename="subscriptions.xml" /> >> > > > > </configuration> >> > > > > </listener> >> > > > > <listener >> classname="org.apache.slide.extractor.PropertyExtractorTrigger" >> > > > > /> >> > > > > <listener classname="org.apache.slide.search.IndexTrigger"> >> > > > > <configuration> >> > > > > <indexer classname="org.apache.slide.search.LoggingIndexer" >> > > > > synchronous="false" uri="/files/articles" /> >> > > > > </configuration> >> > > > > </listener> >> > > > > >> > > > > <!-- Uncomment for cluster support. Be sure to local-host and >> > > > > repository-host --> >> > > > > <!-- >> > > > > <listener >> classname="org.apache.slide.cluster.ClusterCacheRefresher"> >> > > > > <configuration> >> > > > > <node local-host="local.host.domain" >> > > > > local-port="4444" >> > > > > repository-host="remote.host.domain" >> > > > > repository-port="8080" >> > > > > repository-protocol="http" >> > > > > username="root" >> > > > > password="root" >> > > > > base-uri="/files/" >> > > > > /> >> > > > > </configuration> >> > > > > </listener> >> > > > > --> >> > > > > >> > > > > <listener >> classname="org.apache.slide.macro.MacroPropertyUpdater"> >> > > > > <!-- Listener that updates some properties if >> resources are >> > > > > copied or moved. This requires MacroEvents >> enabled (at >> > > > > least methods copy and move) --> >> > > > > <configuration> >> > > > > <update-displayname>true</update-displayname> >> > > > > <update-owner-on-move>false</update-owner-on-move> >> > > > > <update-owner-on-copy>true</update-owner-on-copy> >> > > > > </configuration> >> > > > > </listener> >> > > > > </events> >> > > > > </slide> >> > > > > >> > > > > Stack Trace: >> > > > > ========== >> > > > > >> > > > > 19 Nov 2004 15:55:05 - >> org.apache.slide.store.impl.rdbms.MySqlRDBMSAdapter >> > > > > - ERROR - SQL error 1205 on /db/load_test/user_3: Deadlock found >> when trying >> > > > > to get lock; Try restarting transaction, message from server: >> "Lock wait >> > > > > timeout exceeded; Try restarting transaction" >> > > > > java.sql.SQLException: Deadlock found when trying to get lock; >> Try >> > > > > restarting transaction, message from server: "Lock wait timeout >> exceeded; >> > > > > Try restarting transaction" >> > > > > at >> com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1905) >> > > > > at >> com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1109) >> > > > > at >> com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1203) >> > > > > at >> com.mysql.jdbc.Connection.execSQL(Connection.java:2090) >> > > > > at >> > > > > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1680) >> > > > > at >> > > > > com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1527) >> > > > > at >> > > > > org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:101) >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.StandardRDBMSAdapter.clearBinding(StandardRDBMSAdapter.java:1345) >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.StandardRDBMSAdapter.storeObject(StandardRDBMSAdapter.java:133) >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.StandardRDBMSAdapter.storeObject(StandardRDBMSAdapter.java:89) >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.AbstractRDBMSStore.storeObject(AbstractRDBMSStore.java:431) >> > > > > at >> > > > > org.apache.slide.store.AbstractStore.storeObject(AbstractStore.java:639) >> > > > > at >> > > > > org.apache.slide.store.ExtendedStore.storeObject(ExtendedStore.java:590) >> > > > > at >> > > > > org.apache.slide.structure.StructureImpl.store(StructureImpl.java:493) >> > > > > at >> > > > > org.apache.slide.structure.StructureImpl.create(StructureImpl.java:379) >> > > > > at >> > > > > org.apache.slide.webdav.method.PutMethod.executeRequest(PutMethod.java:299) >> > > > > at >> > > > > org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:386) >> > > > > at >> > > > > org.apache.slide.webdav.WebdavServlet.service(WebdavServlet.java:164) >> > > > > at >> javax.servlet.http.HttpServlet.service(HttpServlet.java:802) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) >> > > > > at >> > > > > org.apache.slide.webdav.filter.LogFilter.doFilter(LogFilter.java:141) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) >> > > > > at >> > > > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) >> > > > > at >> > > > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) >> > > > > at >> > > > > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) >> > > > > at >> > > > > org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) >> > > > > at >> > > > > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) >> > > > > at >> > > > > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) >> > > > > at >> > > > > org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) >> > > > > at >> > > > > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) >> > > > > at java.lang.Thread.run(Thread.java:534) >> > > > > org.apache.slide.common.ServiceAccessException: Service >> > > > > [EMAIL PROTECTED] access error >> : Deadlock >> > > > > found when trying to get lock; Try restarting transaction, >> message from >> > > > > server: "Lock wait timeout exceeded; Try restarting transaction" >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.MySqlRDBMSAdapter.createException(MySqlRDBMSAdapter.java:66) >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.StandardRDBMSAdapter.storeObject(StandardRDBMSAdapter.java:191) >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.StandardRDBMSAdapter.storeObject(StandardRDBMSAdapter.java:89) >> > > > > at >> > > > > org.apache.slide.store.impl.rdbms.AbstractRDBMSStore.storeObject(AbstractRDBMSStore.java:431) >> > > > > at >> > > > > org.apache.slide.store.AbstractStore.storeObject(AbstractStore.java:639) >> > > > > at >> > > > > org.apache.slide.store.ExtendedStore.storeObject(ExtendedStore.java:590) >> > > > > at >> > > > > org.apache.slide.structure.StructureImpl.store(StructureImpl.java:493) >> > > > > at >> > > > > org.apache.slide.structure.StructureImpl.create(StructureImpl.java:379) >> > > > > at >> > > > > org.apache.slide.webdav.method.PutMethod.executeRequest(PutMethod.java:299) >> > > > > at >> > > > > org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:386) >> > > > > at >> > > > > org.apache.slide.webdav.WebdavServlet.service(WebdavServlet.java:164) >> > > > > at >> javax.servlet.http.HttpServlet.service(HttpServlet.java:802) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) >> > > > > at >> > > > > org.apache.slide.webdav.filter.LogFilter.doFilter(LogFilter.java:141) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) >> > > > > at >> > > > > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) >> > > > > at >> > > > > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) >> > > > > at >> > > > > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) >> > > > > at >> > > > > org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:535) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) >> > > > > at >> > > > > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) >> > > > > at >> > > > > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) >> > > > > at >> > > > > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) >> > > > > at >> > > > > org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) >> > > > > at >> > > > > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) >> > > > > at >> > > > > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) >> > > > > at >> > > > > org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) >> > > > > at >> > > > > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) >> > > > > at java.lang.Thread.run(Thread.java:534) >> > > > > http-8080-Processor11, 19-Nov-2004 15:52:31, unauthenticated, >> PUT, 500 >> > > > > "Internal Server Error", 153875 ms, >> /db/load_test/user_3/dummy_1100908351664 >> > > > > >> > > > > >> > > > > >> > > > > -Mirko >> > > > > >> > > > > >> > > > > >> > > > > >> > > > > On Fri, 2004-11-19 at 16:17, Oliver Zeigermann wrote: >> > > > > Make sure you have <parameter >> name="sequential-mode">full</parameter> >> > > > > <parameter name="all-methods-in-transactions">true</parameter> >> in the >> > > > > configuration sections of Domain.xml which is default for Slide >> 2.1b2. I >> > > > > have run concurrent tests with 20 threads all writing to the >> same collection >> > > > > resp. to different ones. One problems.... Oliver On Sat, 20 Nov >> 2004 >> > > > > 01:05:54 +0100, Oliver Zeigermann <[EMAIL PROTECTED]> >> wrote: > >> > > > > Please send your Domain.xml and the stack traces of said >> exceptions. > You >> > > > > said your were using 2.1b2? > > Oliver >> > > > > >> > > > >> > > >> > >> > >> > >> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
