Re: Choosing between multiple namespace and multiple stores
I asked the same question a little while ago. It sounds like the advantages of using one configuration over the other are not entirely clear. Multiple stores are much easier to configure than multiple namespaces, so I would probably go with this configuration. I suppose that using multiple namespaces might give you more control if you want these namespaces to behave very differently (e.g. with regards to versioning, permissions, etc.), but then again I don't really know. -Mirko On Wed, 2004-12-08 at 00:00, Ritu Kedia wrote: Could someone please point out the pros and cons of using multiple namespaces vs multiple stores. I have a requirement of configuring multiple slide stores in a single App Instance. Each store will be used by a different set of people. I would also like to know if there are known issues with either configuration and which one would be more performant and stable. Thanks, Ritu - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Exceptions on MySQL 4.1
Absolutely! I'll let you know how it goes. Again, thanks for implementing these fixes. -Mirko On Tue, 2004-12-07 at 09:18, Oliver Zeigermann wrote: OK, this should work for MySQL now. Mirko, do you still have enough patience to try it with the latest CVS head? Oliver On Tue, 7 Dec 2004 15:40:15 +0100, Oliver Zeigermann [EMAIL PROTECTED] wrote: As a final hint: set isolation level to read committed! Oliver P.S.: Thanks for reporting all this; I am currently working on the deadlock retry thing... On Mon, 06 Dec 2004 17:02:56 -0800, Mirko Froehlich [EMAIL PROTECTED] wrote: In that case, I don't think this will solve my issue. Slide actually started up fine with MySQL 4.1 for the first time, using the MySql41RDBMSAdapter and the new schema. I ran my concurrency test, which again failed after less than a minute. Only subsequent startups failed due to the schema issues, for some reason. -Mirko On Mon, 2004-12-06 at 16:47, Oliver Zeigermann wrote: Nono, use the MySql41RDBMSAdapter. That's what worked for me. Oliver On Mon, 06 Dec 2004 16:37:36 -0800, Mirko Froehlich [EMAIL PROTECTED] wrote: In that case, should I continue to use the MySqlRDBMSAdapter, or should I use the MySql41RDBMSAdapter? -Mirko On Mon, 2004-12-06 at 16:25, Oliver Zeigermann wrote: May be true, I did my tests with the 4.0 schema and it worked just fine. No idea what the original problem is. Anyway, use the 4.0 schema even for 4.1 and it should work. 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]
propfind using webdavclient and mod_dav
I ran into a weird issue using the WebDAV client API as well as the command line tool to access an Apache mod_dav based WebDAV repository. When I create a WebdavResource for a particular path and enumerate the child resources using listWebdavResources() or getChildResources(), it only returns the folder itself, not its children. The command line tool displays the same behavior. When I explicitly use a PropfindMethod with a depth of 1, it works fine. Any ideas? -Mirko
Re: Exceptions on MySQL 4.1
In that case, should I continue to use the MySqlRDBMSAdapter, or should I use the MySql41RDBMSAdapter? -Mirko On Mon, 2004-12-06 at 16:25, Oliver Zeigermann wrote: May be true, I did my tests with the 4.0 schema and it worked just fine. No idea what the original problem is. Anyway, use the 4.0 schema even for 4.1 and it should work. Oliver
Re: Exceptions on MySQL 4.1
In that case, I don't think this will solve my issue. Slide actually started up fine with MySQL 4.1 for the first time, using the MySql41RDBMSAdapter and the new schema. I ran my concurrency test, which again failed after less than a minute. Only subsequent startups failed due to the schema issues, for some reason. -Mirko On Mon, 2004-12-06 at 16:47, Oliver Zeigermann wrote: Nono, use the MySql41RDBMSAdapter. That's what worked for me. Oliver On Mon, 06 Dec 2004 16:37:36 -0800, Mirko Froehlich [EMAIL PROTECTED] wrote: In that case, should I continue to use the MySqlRDBMSAdapter, or should I use the MySql41RDBMSAdapter? -Mirko On Mon, 2004-12-06 at 16:25, Oliver Zeigermann wrote: May be true, I did my tests with the 4.0 schema and it worked just fine. No idea what the original problem is. Anyway, use the 4.0 schema even for 4.1 and it should work. Oliver - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
main branch vs. 2.1 release branch
How stable would you consider the Slide main branch at this point? What are some of the significant differences between this and 2.1? I am still doing my concurrency testing, and unfortunately I think I spoke too soon when I said that everything runs fine with caching enabled. I still get deadlocks under Slide 2.1. Sometimes it deadlocks very soon, other times it takes about 1 hour or so. For some reason, I no longer get stacktraces in the Tomcat logs. Initial testing using the main branch from CVS suggests that this version might be more stable, as I have yet to run into this deadlock problem. But of course I am concerned about actually running with a development release. I'd appreciate any thoughts on this. -Mirko
Re: main branch vs. 2.1 release branch
Thanks for the suggestion, I will definitely try that. Do you know which particular improvements in MySQL 4.1 would have made a difference? When you say it worked for you, which specific issue did it resolve? -Mirko On Fri, 2004-12-03 at 16:02, Oliver Zeigermann wrote: I would try upgrading to MySQL 4.1. It worked fine for me. Oliver On Fri, 03 Dec 2004 13:34:41 -0800, Mirko Froehlich [EMAIL PROTECTED] wrote: How stable would you consider the Slide main branch at this point? What are some of the significant differences between this and 2.1? I am still doing my concurrency testing, and unfortunately I think I spoke too soon when I said that everything runs fine with caching enabled. I still get deadlocks under Slide 2.1. Sometimes it deadlocks very soon, other times it takes about 1 hour or so. For some reason, I no longer get stacktraces in the Tomcat logs. Initial testing using the main branch from CVS suggests that this version might be more stable, as I have yet to run into this deadlock problem. But of course I am concerned about actually running with a development release. I'd appreciate any thoughts on this. -Mirko - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Performance
This might sound obvious, but is there any way you can distribute your content across a hierarchy of folders? I have not experimented with this scenario in Slide, but I have worked with similar content repositories before, and having many (i.e. several thousand) documents in a folder is usually very problematic. In addition to the actual repository efficiency that suffers, there are often UI scalability issues (e.g. if the documents get displayed on a web page, you might need to implement pagination, etc.). -Mirko On Mon, 2004-11-29 at 09:49, Dirk Ehms wrote: Hi, I have put 2000 file resources in one WebDav collection. When I request a list of all resources (PROPFIND) I have to wait between 30 and 40 seconds until I get a response. At the moment I use TxXMLFileDescriptorsStore. Using a database is even slower. Has anybody a suggestion how to get the response a bit faster? Regards Dirk. Virus checked by G DATA AntiVirusKit Version: AVK 15.0.1261 from 29.11.2004 Virus news: www.antiviruslab.com - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: major deadlock issues (JDBC store with MySQL)
This is probably no surprise, but once I enable caching (as we would in production), everything works fine. My test case consists of about 90% read-only access and 10% read/write access, which should reflect our expected usage patterns. -Mirko On Wed, 2004-11-24 at 11:21, Mirko Froehlich wrote: Unfortunately I am still getting deadlocks with the latest code from the release branch. I think my initial tests were a little too aggressive, as I was generating more requests than the server could actually handle. I have now adjusted my tests to closely match the realistic throughput that I can achieve, and I'm getting good results using the tx store. The db store still isn't happy. I still get an XAException, preceded by HeuristicMixedException, IllegalStateException, all of which result in a WebdavException (Internal server error), as well as occasional SQLException and ServiceAccessException that mention deadlocks - see below. Could someone help me get the test suite running? I'll try to reproduce the problem that way, which might simplify things. I've been able to compile the test suite, but am not sure how to configure and invoke it, as I always get a success message when I run the TProcessor, even when my Slide server is down... -Mirko Exceptions: = 24 Nov 2004 11:10:57 - org.apache.slide.transaction.SlideTransaction - WARNING - Enlist failure: Resource manager [EMAIL PROTECTED] Error code XAER_NOTA in Transaction 168 xid http-8080-Processor15-1101323457477-168- in thread http-8080-Processor15 http-8080-Processor16, 24-Nov-2004 11:10:57, unauthenticated, GET, 200 OK, 51 ms, /db/load_test/user_12/foobar_7.txt http-8080-Processor16, 24-Nov-2004 11:10:57, unauthenticated, GET, 200 OK, 39 ms, /db/load_test/user_12/foobar_6.txt http-8080-Processor16, 24-Nov-2004 11:10:57, unauthenticated, GET, 200 OK, 42 ms, /db/load_test/user_12/foobar_5.txt http-8080-Processor16, 24-Nov-2004 11:10:57, unauthenticated, GET, 200 OK, 65 ms, /db/load_test/user_12/foobar_4.txt http-8080-Processor16, 24-Nov-2004 11:10:57, unauthenticated, GET, 200 OK, 56 ms, /db/load_test/user_12/foobar_3.txt http-8080-Processor16, 24-Nov-2004 11:10:57, unauthenticated, GET, 200 OK, 163 ms, /db/load_test/user_12/foobar_2.txt 24 Nov 2004 11:10:58 - org.apache.slide.transaction.SlideTransaction - WARNING - Commit failure: Resource manager [EMAIL PROTECTED] Error code XAER_NOTA in Transaction 168 xid http-8080-Processor15-1101323457477-168- in thread http-8080-Processor15 javax.transaction.xa.XAException at org.apache.commons.transaction.util.xa.AbstractXAResource.commit(AbstractXAResource.java:69) at org.apache.slide.transaction.SlideTransaction.commit(SlideTransaction.java:300) at org.apache.slide.transaction.SlideTransactionManager.commit(SlideTransactionManager.java:186) at org.apache.slide.common.NamespaceAccessTokenImpl.commit(NamespaceAccessTokenImpl.java:423) at org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:388) at org.apache.slide.webdav.WebdavServlet.service(WebdavServlet.java:155) 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
Re: publishing workflow / best practices
It sounds like writing a client tool to migrate content from one Slide server to another one might be a good option. This should be fairly simple to write using the Webdav client library. Another option that I originally had in mind is to simply perform a database dump on the staging server and upload this to production. Of course, this would preserve the entire version history, which we most likely won't care about on our production server, so a separate tool might be more appropriate. -Mirko On Wed, 2004-11-24 at 13:58, Richard Emberson wrote: I must preface my remarks by stating that our Slide deployment will use a database for storage. Consider Slide namespaces. From what I've heard and based upon the mailing list traffic, multi Slide namespace installations do not occur very often. Lets say that such installations work just fine, - each namespace could use a different database - one would need some external Slide/webdav tool/script to promote (copy) directories from dev namespace to test namespace to production namespace. Since one has to create and use such a promotion tool, its not clear that having a single Slide with three namespaces buys one anything over having three distinct Slides each with their own DB. I am assuming that to promote a directory involves getting it (the whole directory hierarchy) into the (client) tool from one Slide server and then putting into a second Slide server. This is true even if one has the three Slide databases on the same database server; one must extract the directory from one db and insert it into another. Our dev Slide server will be version controlled while the test and production need only have non-versionable copies. Mirko Froehlich wrote: Our current staging environment really serves a different purpose. Our test, staging, and production servers correspond to phases in our software development cycle and are strictly separated. We definitely wouldn't want to use the production Slide server for development or test purposes, so those at the minimum would need to be separate servers. However, my example of publishing web content from staging to production uses a different concept of staging than we currently have, so it may not be an ideal example. I suppose for this scenario the content could very well live in two different folders on the production Slide server, with a simple publishing process that copies or moves content from the staging to the production server. I guess in the end this really depends on the workflows we need. For example, for content updates on the live site this approach would probably work well. But lets say we develop a new major version of the application with significant changes to our web content management framework and corresponding new content in the repository. When this goes live, we would need to publish the content from the staging Slide server to the production server. I know this is somewhat hypothetical at this point. I'm just trying to get a feel for how people use Slide. Yours is definitely a viable option. -Mirko On Wed, 2004-11-24 at 12:58, Richard Emberson wrote: For my information, why would you not have top-level directories: dev, staging, and production; all within the same Slide server? Richard Mirko Froehlich wrote: Those of you who are using Slide in a production environment, what kind of publishing workflow have you put in place? We will likely end up using Slide for various aspects of our application. Initially, it will mostly serve as a repository for user-specific application data. In this scenario, the user data would only live on the production server and there would not have to be a publishing process that moves data from staging to production. However, there's a good chance that we may end up using Slide for web publishing as well, in which case we would probably want to be able to manage content on the staging server and push it to production as part of a publishing workflow. I suppose this could be as simple as performing a database dump on staging and loading it on production. We would probably set up multiple db stores, which would allow us to publish the part of the repository that is used for web publishing, but not the part of the repository that contains the users' application data. Anyway, I would be interested in hearing about your experiences and best practices that you have determined for these kinds of scenarios. -Mirko
Re: major deadlock issues (JDBC store with MySQL)
I just tried it again with compression turned on, and the result was only marginally better. This time, the system didn't deadlock completely until after 63 iterations, whereas before it was closer to 10... The exceptions seem to look slightly different, too (I don't think I noticed a HeuristicMixedException before). They still lead to the same deadlock exception, though. See below. I have tried to attach my JMeter test case, but haven't been lucky getting the attachments getting accepted by the mailing list server so far. I'll follow up in a separate email. Unfortunately I didn't have much time yesterday to look into this issue. Today, I am hoping to try the patch that Warwick mentioned, as well as run the test against the file store. I will also try your JUnit test. Thanks again for your help. -Mirko Exceptions: = 22 Nov 2004 17:26:31 - org.apache.slide.transaction.SlideTransaction - WARNING - Enlist failure: Resource manager [EMAIL PROTECTED] Error code XAER_NOTA in Transaction 1272 xid http-8080-Processor16-1101173191802-1272- in thread http-8080-Processor16 http-8080-Processor9, 22-Nov-2004 17:26:31, unauthenticated, GET, 200 OK, 225 ms, /db/load_test/user_6/dummy_1101173191200 http-8080-Processor15, 22-Nov-2004 17:26:31, unauthenticated, GET, 200 OK, 61 ms, /db/load_test/user_8/foobar_3.txt http-8080-Processor15, 22-Nov-2004 17:26:31, unauthenticated, GET, 200 OK, 42 ms, /db/load_test/user_8/foobar_2.txt http-8080-Processor15, 22-Nov-2004 17:26:31, unauthenticated, GET, 200 OK, 42 ms, /db/load_test/user_8/foobar_1.txt 22 Nov 2004 17:26:32 - org.apache.slide.transaction.SlideTransaction - WARNING - Commit failure: Resource manager [EMAIL PROTECTED] Error code XAER_NOTA in Transaction 1272 xid http-8080-Processor16-1101173191802-1272- in thread http-8080-Processor16 javax.transaction.xa.XAException at org.apache.commons.transaction.util.xa.AbstractXAResource.commit(AbstractXAResource.java:69) at org.apache.slide.transaction.SlideTransaction.commit(SlideTransaction.java:300) at org.apache.slide.transaction.SlideTransactionManager.commit(SlideTransactionManager.java:186) at org.apache.slide.common.NamespaceAccessTokenImpl.commit(NamespaceAccessTokenImpl.java:423) at org.apache.slide.webdav.method.AbstractWebdavMethod.run(AbstractWebdavMethod.java:388) 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
Re: major deadlock issues (JDBC store with MySQL)
I have attached my JMeter test case, as well as my test JSPs. populate.jsp is used to populate the repository before running the test. It assumes that the /slide/db/load_test/ folder exists and creates 100 subfolders called user_[i] with 10 documents each. slide.jsp is the page that my JMeter test case is hitting. JMeter passes the folder name as a parameter, and the test then iterates over the documents in the folder, retrieves their content, creates a new document, retrieves its content, and deletes it. The test case uses 5 concurrent threads, and each thread pauses for 800ms between requests. Hope the attachments make it through... :) -Mirko On Sat, 2004-11-20 at 12:35, Oliver Zeigermann wrote: This should not be caused by using MySQL 4 as the Slide code for both is identical when it comes to inserting content. Additionally, serilzability of requests is handled in the WebDAV layer, so there really should be no deadlocks in the store except there are programming errors (in the store implementation). You do not use externally controlled transactions, do you? Also make sure that there are not open connections with pending transactions from other tools like e.g. an SQL command line tool or a visualizer or anything. Anyway, looking forward to your test case :) Oliver ?xml version=1.0 encoding=UTF-8? node testelement class=org.apache.jmeter.testelement.TestPlan testelement class=org.apache.jmeter.config.Arguments name=TestPlan.user_defined_variables property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.gui_classorg.apache.jmeter.config.gui.ArgumentsPanel/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.test_classorg.apache.jmeter.config.Arguments/property collection class=java.util.ArrayList propType=org.apache.jmeter.testelement.property.CollectionProperty name=Arguments.arguments/ property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.nameUser Defined Variables/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.BooleanProperty name=TestElement.enabledtrue/property /testelement property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.gui_classorg.apache.jmeter.control.gui.TestPlanGui/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.BooleanProperty name=TestPlan.serialize_threadgroupsfalse/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.test_classorg.apache.jmeter.testelement.TestPlan/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.nameSlide Test/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.BooleanProperty name=TestPlan.functional_modefalse/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.BooleanProperty name=TestElement.enabledtrue/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestPlan.comments/ /testelement node testelement class=org.apache.jmeter.threads.ThreadGroup property xml:space=preserve propType=org.apache.jmeter.testelement.property.LongProperty name=ThreadGroup.start_time1100738492000/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.test_classorg.apache.jmeter.threads.ThreadGroup/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=ThreadGroup.delay/ property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=ThreadGroup.duration/ property xml:space=preserve propType=org.apache.jmeter.testelement.property.BooleanProperty name=TestElement.enabledtrue/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=ThreadGroup.num_threads5/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.BooleanProperty name=ThreadGroup.schedulerfalse/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.gui_classorg.apache.jmeter.threads.gui.ThreadGroupGui/property testelement class=org.apache.jmeter.control.LoopController name=ThreadGroup.main_controller property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty name=TestElement.gui_classorg.apache.jmeter.control.gui.LoopControlPanel/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.IntegerProperty name=LoopController.loops-1/property property xml:space=preserve propType=org.apache.jmeter.testelement.property.StringProperty
Re: major deadlock issues (JDBC store with MySQL)
I'll take a look at your test suite and see if I can adapt it. My test requires JMeter. In case you want to try to run it, you should be able to load the test case as it is. It hits http://localhost:8080/jmeter_slide/slide.jsp;, which is where my slide.jsp is deployed (this URL can be changed in the test case's HTTP Request node). This web app has to have all the webdavclient JAR files. I would post the WAR file, but it's too large for the mailing list. But I'll check out your test suite as well. -Mirko On Tue, 2004-11-23 at 09:59, Oliver Zeigermann wrote: Attachments made it to the list. Would be great if you could provide a test case for our test suite as I have no idea how to let your test run. Anyone else? Oliver On Tue, 23 Nov 2004 09:21:06 -0800, Mirko Froehlich [EMAIL PROTECTED] wrote: I have attached my JMeter test case, as well as my test JSPs. populate.jsp is used to populate the repository before running the test. It assumes that the /slide/db/load_test/ folder exists and creates 100 subfolders called user_[i] with 10 documents each. slide.jsp is the page that my JMeter test case is hitting. JMeter passes the folder name as a parameter, and the test then iterates over the documents in the folder, retrieves their content, creates a new document, retrieves its content, and deletes it. The test case uses 5 concurrent threads, and each thread pauses for 800ms between requests. Hope the attachments make it through... :) -Mirko On Sat, 2004-11-20 at 12:35, Oliver Zeigermann wrote: This should not be caused by using MySQL 4 as the Slide code for both is identical when it comes to inserting content. Additionally, serilzability of requests is handled in the WebDAV layer, so there really should be no deadlocks in the store except there are programming errors (in the store implementation). You do not use externally controlled transactions, do you? Also make sure that there are not open connections with pending transactions from other tools like e.g. an SQL command line tool or a visualizer or anything. Anyway, looking forward to your test case :) Oliver - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
RE: major deadlock issues (JDBC store with MySQL)
I'm not explicitly using any transactions, unless the webdav client library transparently uses transactions. -Mirko On Tue, 2004-11-23 at 16:06, Warwick Burrows wrote: Actually I haven't committed the latest transaction deadlock fixes I made to get the enlistment of slide server transactions into the client's transaction working. If Mirko is using client side transactions then this may fix it. And even if he's not it still may fix it :-) But I'm still waiting on a comitter account from Apache to commit this fix. What I found particularly interesting about the exception stack that accompanies the deadlock is that it is in the thread of execution for a commit which is exactly where this latest problem was. The defect for this problem is: http://issues.apache.org/bugzilla/show_bug.cgi?id=32250 If you think the problem may be security related then this is the defect I opened for some other potentially problematic areas in the security impl that could suffer the same problem that I fixed in 31907. eg. http://issues.apache.org/bugzilla/show_bug.cgi?id=31908 Though the fact that the stack indicates its occurring during the commit would make me think it is defect 32250. Warwick
RE: write privileges for owner
Hi Chris, The Wiki is your best bet: http://wiki.apache.org/jakarta-slide The following page describes how to obtain a WebdavResource: http://wiki.apache.org/jakarta-slide/CreateWebDavResource Once you have this, the Javadocs should help you access the repository through the WebdavResource. One thing I found very confusing at first is that the responsibility of the WebdavResource is not quite clear. On the one hand, it acts as an entity that represents an actual resource (document or folder) in the repository. Unfortunately, it also acts as a general facade into the repository, for example by providing methods that take a path as a parameter and act on the resource corresponding to that path. If you keep this in mind, you should be able to get everything done, though. -Mirko On Fri, 2004-11-19 at 13:02, Chris O'Connell wrote: Sorry for what may be a newbie question, but can someone point me at a 'getting started' link. I've downloaded the server and client and the documentation and I'm trying to go through it, but I think I'm just missing something real basic. For example, I think I need to use the 'WebdavResource' class in my client to access my store. But I can't figure out the big picture of how to use this class. Am I just simple? Any help would be appreciated. Thanks in advance, Chris
major deadlock issues (JDBC store with MySQL)
I did some basic JMeter concurrency testing to validate if Slide meets our concurrency requirements. Unfortunately, the results were not very promising. As I mentioned, we are planning on using Slide as a repository for application data. We expect to have a few hundred concurrent users of our application who would be reading from as well as (although less frequently) writing to the repository. In case it matters, most of the read and write access would be to a dedicated folder per user, rather than a shared folder. I realize that this use case is probably very different from the way most people use Slide, which I assume is mostly for web publishing. My test mainly consists of a JSP page that uses the WebDAV client library to access a folder, iterate over the 10 contained documents and retrieve their contents (about 2k each), and create a new document, retrieve it, and then delete it. I have 100 different folders, all populated with the same 10 documents. My JMeter test consists of 5 concurrent threads that each access a different one of the 100 folders, with 800ms between requests. After only a few seconds, Slide completely deadlocks with various exceptions to that effect in the Tomcat logs. I have tried increasing my JDBC store's MySQL connection pool from 10 to 30, without any improvements. It seems like creating documents is responsible for the deadlocks, as the test behaved fine when it was limited to read-only access. Can anyone think of a way for me to tune the system in order to prevent the deadlocks from occurring? -Mirko
Re: major deadlock issues (JDBC store with MySQL)
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-modeoff/parameter parameter name=enable-content-cachingfalse/parameter parameter name=content-cache-size1000/parameter parameter name=object-cache-size1000/parameter parameter name=tlock-timeout120/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-savingtrue/parameter parameter name=timeout120/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-savingtrue/parameter parameter name=timeout120/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-modeoff/parameter parameter name=enable-content-cachingfalse/parameter parameter name=content-cache-size1000/parameter parameter name=object-cache-size1000/parameter nodestore classname=org.apache.slide.store.impl.rdbms.JDBCStore parameter name=adapterorg.apache.slide.store.impl.rdbms.MySqlRDBMSAdapter/parameter parameter name=drivercom.mysql.jdbc.Driver/parameter parameter name=urljdbc:mysql://localhost/slide/parameter parameter name=userslide/parameter parameter name=passwordslide/parameter parameter name=dbcpPoolingtrue/parameter parameter name=maxPooledConnections30/parameter parameter name=isolationSERIALIZABLE/parameter parameter name=compressfalse/parameter /nodestore contentstore reference
Re: Indexing / DASL without Lucene
Thanks for the info. Could you elaborate a little on the JDBC store? Does it automatically take advantage of the database's indexing and search capabilities, or do I have to configure something to enable this? -Mirko On Wed, 2004-11-17 at 20:42, James Mason wrote: Umm... yes ;). By default Slide does no indexing, but rather crawls your entire store for each search request. Obvious, this is horribly inefficient. If you're using a JDBC store you can take advantage of the database's capabilities for indexing, and Slide 2.2 will add a much more powerful indexing system with Lucene. -James On Wed, 2004-11-17 at 11:25 -0800, Mirko Froehlich wrote: I am slightly confused about Slide's search implementation. It appears that Slide supports Lucene for indexing documents. I am using a file and a JDBC store, neither of which defines an indexer (i.e. the contentindexer element is commented out in my Domain.xml). Still, performing a DASL search using the WebDAV client API works fine in both of my stores. Does Slide fall back to a default search implementation if no contentindexer is defined? In this case I assume that using Lucene would result in more efficient search queries? -Mirko - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Indexing / DASL without Lucene
Thanks, that's good to know. For content searches, is there any way to leverage MySQL's fulltext capabilities? Or are searches simply performed using a like clause? If not, is it already possible in 2.1b2 to configure a JDBC/J2EE store to use the Lucene indexer? -Mirko On Thu, 2004-11-18 at 11:51, Guido Casper wrote: Mirko Froehlich wrote: Thanks for the info. Could you elaborate a little on the JDBC store? Does it automatically take advantage of the database's indexing and search capabilities, or do I have to configure something to enable this? You have to configure your JDBCStore with: parameter name=use-rdbms-expression-factorytrue/parameter Be aware that this leverages database indexes only for searches on properties but not for content searches. Guido - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Indexing / DASL without Lucene
I am slightly confused about Slide's search implementation. It appears that Slide supports Lucene for indexing documents. I am using a file and a JDBC store, neither of which defines an indexer (i.e. the contentindexer element is commented out in my Domain.xml). Still, performing a DASL search using the WebDAV client API works fine in both of my stores. Does Slide fall back to a default search implementation if no contentindexer is defined? In this case I assume that using Lucene would result in more efficient search queries? -Mirko
multiple stores vs. multiple namespaces
We will likely need to use several JDBC (or rather J2EE) stores. The main reason is that each of these will fall under a slightly different publishing workflow, and we want to be able to independently publish them by copying the appropriate database from staging to production, etc. It seems like I could either set up multiple namespaces, with a single store for each namespace, or I could set up a single namespace with multiple stores. In both cases, the resulting folder hierarchy would look the same (assuming I configure the mappings appropriately in Domain.xml). I don't really care too much about things like access control, as most of this will be handled by our business logic rather than by Slide. Which configuration would you recommend, and what are the trade-offs? -Mirko
Re: Opinions for Exposing XML from Methods
XML support sounds very useful for debugging. Speaking of the WebDAV client API: I have only recently started working with Slide and the WebDAV client API, and even though the client API is very powerful, I have to admit that I have mixed feelings about it. In particular, the WebdavResource does not have very clearly delineated responsibilities. It seems to act as a combination of a general facade into the API with many convenience methods, while also trying to act as an entity that represents a particular WebDAV resource. In my opinion, these responsibilities should be clearly split up, so that WebdavResource only acts as an entity and another class (maybe something like WebdavConnection, or maybe just the WebdavSession, which WebdavResource currently extends) could act as a more general facade into the API if necessary. Once created, a WebdavResource should only represent a particular folder or document, and all operations on it should use relative paths (based on the resource the instance represents), rather than allowing absolute paths. Anyway, just a side note. :) -Mirko On Mon, 2004-11-15 at 11:26, Tim Frank wrote: I have been working with the Webdav Client using the org.apache.webdav.lib.methods package directly to get the XML response from the slide server. I am using the XML results with XSLT to build web interfaces and reports. I noticed that the WebdavResource class seems to be the powerhouse of the client API, however, it does not seem to provide a way to extract the XML responses in any easy way. The best I have seen is a piece of code that walks through the nodelists to merely output the same XML that came from the server originally. This seems to be odd when the XML is available from most methods is available with getResponseDocument(). As a result, I was thinking of attempting to make the XML result available in the WebdavResource class for easy access to those needing the DOM representation of the result. My idea would be to store it as a w3c.dom variable in the class that would get set to something other than a default when a method was called that returns an XML response. This should also be useful for extracting error messages after methods are executed. I would appreciate ideas/opinions from others who may find this useful, or in some way problematic. Tim - To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
Re: Seeking java example querying slide
The Wiki is pretty helpful. This document explains how to create a WebdavResource, which represents a folder or document in your repository: http://wiki.apache.org/jakarta-slide/CreateWebDavResource Once you have this, you can do all kinds of things. Like I said, if all you wan to do is get the child resources, you can simply call listWebdavResources() on this object, which internally uses a PROPFIND. If you need to explicitly invoke a PROPFIND, for example in order to return non-standard properties or to return resources that are more than 1 level below your folder, you can call one of the propFind() methods on your WebdavResource. Alternatively, you can also bypass the WebdavResource entirely and manually create a PropFindMethod object with the appropriate properties. In this case, your code will look similar to: http://wiki.apache.org/jakarta-slide/DASLSearch This example is for a DASL search, but the way you invoke your method would be pretty much the same. Disregard the actual query syntax, of course. -Mirko On Mon, 2004-11-15 at 11:34, Phillip Rhodes wrote: That solution sounds like the best way to go. Is anyone anywhere of a example program that does a PROPFIND operation? Since I am new to this, it would be hard to pull a working program just using the javadocs. Thanks.