Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{info}[https://jira.kuali.org/browse/OLE-3160]{info}

h2. RequirementRequirements
for
OLE DocStore

{color:#000000}Requirement for OLE DocStore/Discovery system based on IU's current{color}
{color:#000000}library system:{color}
{color:#000000}Store up to 25-50M records, but more close to 25M (currently IU library{color}
{color:#000000}has less than 25M records){color}
{color:#000000}Incremental loading: 10K records{color}
{color:#000000}Concurrent reads: 500{color}
{color:#000000}Concurrent writes: 20 per minute (or 1 per 1-3 second){color}

h4. Search Samples: 

This [search sample file|^Search Samples for John.docx] is that John collects for the testing, which will give an idea for the normal searches in library. 

h4. Testing use case:

Normally we test non-staff user searching on our systems since that accounts for about 80% to 90% of the load.  That is out of scope here since OLE does not provide a non-staff search.  So based on our highest load days, approximately 10,000 records are added are updated on our system.  Over an 8 hour day, that is about .5 per second.  I would round up to 1 create/update per second.  Reads are higher so I would place at 5 per second.  This is from the docstore.  For the Solr index, I would say the searching would be heavier IF some of the display data is stored in the index.  This is a question for the Peri and Nianli.  I would say the Solr index would be hit at the about 10 searches/second at peak rate.  In the middle of all this, a batch load of 10,000 records would not be unusual.

So summarizing

Create/Update Rate on Docstore:&nbsp; 1-2 transactions/second <\- this would also update the solr indexes

Read Rate on Docstore: 5 transactions/second

Read Rate on Solr Indexes:&nbsp; 10 transactions/second.&nbsp; If the display data is coming from Docstore then Docstore read = Solr Read i.e. 10 transactions/second

Batch load of 10,000 records in the midst of testing.
\\

h2. Evaluation Plan

{color:#000000}1) Build and install the app{color}
{color:#000000}2) Use debuggers and profilers to analyze the running app (locally){color}
{color:#000000}3) Build profiling scripts to push the app to the failure point (locally){color}
{color:#000000}4) Run the profiling scripts against the test server and develop an app profile{color}
{color:#000000}5) Check the code in the areas where performance issues are identified{color}
{color:#000000}6) Write up overall recommendations around setup, architecture,&nbsp;performance, and code practices{color}
{color:#000000}7) If time remains, add aspects in the code to do method profiling and&nbsp;generate a report of method performance under load{color}

h2. Problems found by Unicon


h3. DocStore Shutdown Issues:

{color:#000000}These are all memory cleanup issues. If the app is shutdown or{color}
{color:#000000}redeployed without shutting down the server then these will cause the{color}
{color:#000000}server to eventually run out of memory and crash.{color}
{color:#000000}SEVERE: The web application \[/oledocstore\] registered the JDBC driver{color}
{color:#000000}\[org.apache.derby.jdbc.AutoloadedDriver\] but failed to unregister it{color}
{color:#000000}when the web application was stopped. To prevent a memory leak, the{color}
{color:#000000}JDBC Driver has been forcibly unregistered.{color}
{color:#000000}May 21, 2012 2:54:56 PM org.apache.catalina.loader.WebappClassLoader{color}
{color:#000000}clearReferencesThreads{color}
{color:#000000}SEVERE: The web application \[/oledocstore\] appears to have started a{color}
{color:#000000}thread named \[Timer-3\] but has failed to stop it. This is very likely{color}
{color:#000000}to create a memory leak.{color}
{color:#000000}May 21, 2012 2:54:56 PM org.apache.catalina.loader.WebappClassLoader{color}
{color:#000000}clearReferencesThreads{color}
{color:#000000}SEVERE: The web application \[/oledocstore\] appears to have started a{color}
{color:#000000}thread named \[DynamicPooledExecutor\] but has failed to stop it. This{color}
{color:#000000}is very likely to create a memory leak.{color}
{color:#000000}May 21, 2012 2:54:56 PM org.apache.catalina.loader.WebappClassLoader{color}
{color:#000000}clearThreadLocalMap{color}
{color:#000000}SEVERE: The web application \[/oledocstore\] created a ThreadLocal with{color}
{color:#000000}key of type \[org.apache.derby.iapi.sql.dictionary.TableDescriptor$1\]{color}
{color:#000000}(value \[org.apache.derby.iapi.sql.dictionary.TableDescriptor$1@5dbdedf8\]){color}
{color:#000000}and a value of type \[java.util.WeakHashMap\] (value \[{=null, =null,{color}
{color:#000000}={color}

{1, 2, 3}{color:#000000}, =null, =null, =null, ={color}{1, 2, 3}{color:#000000}, =null, =null}\]) but{color}
{color:#000000}failed to remove it when the web application was stopped. This is very{color}
{color:#000000}likely to create a memory leak.{color}
{color:#000000}May 21, 2012 2:54:56 PM org.apache.catalina.loader.WebappClassLoader{color}
{color:#000000}clearThreadLocalMap{color}
{color:#000000}SEVERE: The web application \[/oledocstore\] created a ThreadLocal with{color}
{color:#000000}key of type \[java.lang.ThreadLocal\] (value{color}
{color:#000000}\[java.lang.ThreadLocal@605264dc\]) and a value of type{color}
{color:#000000}\[org.apache.derby.iapi.services.context.ContextManager\] (value{color}
{color:#000000}\[org.apache.derby.iapi.services.context.ContextManager@3499c4cc\]) but{color}
{color:#000000}failed to remove it when the web application was stopped. This is very{color}
{color:#000000}likely to create a memory leak.{color}



h3. {color:#000000}Warnings{color}





{color:#000000}WARN&nbsp;&nbsp;org.apache.jackrabbit.core.query.lucene.SearchIndex.setTextFilterClasses():Line{color}
{color:#000000}2087: The textFilterClasses configuration parameter has been{color}
{color:#000000}deprecated, and the configured value will be ignored:{color}


h3. {color:#000000}Strange dir in tomcat_home (or whatever dir that tomcat is started from){color}

{color:#000000}It looks like someone is trying to create a windows directory path{color}
{color:#000000}(\OLE-SOLR\Indexes). I don't think this is causing a problem but it{color}
{color:#000000}indicates some bad code exists.{color}
{color:#000000}AZMBP:tomcat6 azeckoski$ ls \-al{color}
{color:#000000}total 136{color}
{color:#000000}drwxr-xr-x&nbsp;&nbsp;15 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;510 21 May 14:50 .{color}
{color:#000000}drwxr-xr-x&nbsp;&nbsp; 7 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;238 21 May 09:47 ..{color}
{color:#000000}\-rw-r\-{color}{color:#000000}{-}r{-}{color}{color:#000000}\-@&nbsp;&nbsp;1 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;37951 20 Feb 17:23 LICENSE{color}
{color:#000000}\-rw-r\-{color}{color:#000000}{-}r{-}{color}{color:#000000}\-@&nbsp;&nbsp;1 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;558 20 Feb 17:23 NOTICE{color}
{color:#000000}\-rw-r\-{color}{color:#000000}{-}r{-}{color}{color:#000000}\-@&nbsp;&nbsp;1 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp; 8680 20 Feb 17:23 RELEASE-NOTES{color}
{color:#000000}\-rw-r\-{color}{color:#000000}{-}r{-}{color}{color:#000000}\-@&nbsp;&nbsp;1 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp; 6670 20 Feb 17:23 RUNNING.txt{color}
{color:#000000}drwxr-xr-x&nbsp;&nbsp; 6 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;204 21 May 14:50 \OLE-SOLR\Indexes\auth{color}
{color:#000000}drwxr-xr-x@ 25 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;850 21 May 10:00 bin{color}
{color:#000000}drwxr-xr-x@&nbsp;&nbsp;9 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;306 20 Feb 17:23 conf{color}
{color:#000000}\-rw-r\-{color}{color:#000000}{-}r{-}{color}{color:#000000}\-&nbsp;&nbsp; 1 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp; 1565 21 May 14:54 derby.log{color}
{color:#000000}drwxr-xr-x@ 18 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;612 20 Feb 17:23 lib{color}
{color:#000000}drwxr-xr-x@ 11 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;374 21 May 14:50 logs{color}
{color:#000000}drwxr-xr-x@&nbsp;&nbsp;4 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;136 21 May 14:50 temp{color}
{color:#000000}drwxr-xr-x@&nbsp;&nbsp;6 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;204 21 May 14:26 webapps{color}
{color:#000000}drwxr-xr-x@&nbsp;&nbsp;3 azeckoski&nbsp;&nbsp;admin&nbsp;&nbsp;&nbsp;&nbsp;102 21 May 14:50 work{color}
{color:#000000}AZMBP:tomcat6 azeckoski$ find "\OLE-SOLR\Indexes\auth"{color}
{color:#000000}\OLE-SOLR\Indexes\auth{color}
{color:#000000}\OLE-SOLR\Indexes\auth/index{color}
{color:#000000}\OLE-SOLR\Indexes\auth/index/segments.gen{color}
{color:#000000}\OLE-SOLR\Indexes\auth/index/segments_1{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellchecker1{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellchecker1/segments.gen{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellchecker1/segments_1{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellchecker2{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellchecker2/segments.gen{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellchecker2/segments_1{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellcheckerFile{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellcheckerFile/segments.gen{color}
{color:#000000}\OLE-SOLR\Indexes\auth/spellcheckerFile/segments_1{color}


h3. {color:#000000}println in log ("in aadvancedSearch.jsp"){color}

{color:#000000}Looks like someone left in a println statement by accident. Should use{color}
{color:#000000}log.debug instead.{color}
{color:#000000}May 21, 2012 2:50:51 PM org.apache.jk.server.JkMain start{color}
{color:#000000}INFO: Jk running ID=0 time=0/12&nbsp;&nbsp;config=null{color}
{color:#000000}May 21, 2012 2:50:51 PM org.apache.catalina.startup.Catalina start{color}
{color:#000000}INFO: Server startup in 6749 ms{color}
{color:#000000}in aadvancedSearch.jsp{color}
{color:#000000}in aadvancedSearch.jsp{color}
{color:#000000}May 21, 2012 2:54:54 PM org.apache.coyote.http11.Http11Protocol pause{color}
{color:#000000}INFO: Pausing Coyote HTTP/1.1 on http-8080{color}


h3. Session closing issue:

{color:#000000}2012-05-21 15:36:13,886 \[Finalizer\] WARN{color}
{color:#000000}org.apache.jackrabbit.core.SessionImpl.finalize():Line 1326: Unclosed{color}
{color:#000000}session detected. The session was opened here:{color}
{color:#000000}java.lang.Exception: Stack Trace{color} {color:#000000}at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:222){color} {color:#000000}at org.apache.jackrabbit.core.SessionImpl.<init>(SessionImpl.java:239){color} {color:#000000}at org.apache.jackrabbit.core.XASessionImpl.<init>(XASessionImpl.java:99){color} {color:#000000}at org.apache.jackrabbit.core.RepositoryImpl.createSessionInstance(RepositoryImpl.java:1573){color} {color:#000000}at org.apache.jackrabbit.core.RepositoryImpl.createSession(RepositoryImpl.java:923){color} {color:#000000}at org.apache.jackrabbit.core.RepositoryImpl.login(RepositoryImpl.java:1461){color} {color:#000000}at org.apache.jackrabbit.core.TransientRepository.login(TransientRepository.java:381){color} {color:#000000}at org.apache.jackrabbit.commons.AbstractRepository.login(AbstractRepository.java:123){color} {color:#000000}at org.kuali.ole.RepositoryManager.getSession(RepositoryManager.java:71){color} {color:#000000}at org.kuali.ole.RepositoryBrowser.generateNodeCount(RepositoryBrowser.java:488){color} {color:#000000}at org.apache.jsp.nodeCount_jsp._jspService(nodeCount_jsp.java:96){color} {color:#000000}at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70){color} {color:#000000}at javax.servlet.http.HttpServlet.service(HttpServlet.java:717){color} {color:#000000}at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388){color} {color:#000000}at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313){color} {color:#000000}at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260){color} {color:#000000}at javax.servlet.http.HttpServlet.service(HttpServlet.java:717){color} {color:#000000}at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290){color} {color:#000000}at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206){color} {color:#000000}at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:185){color} {color:#000000}at net.bull.javamelody.MonitoringFilter.doFilter(MonitoringFilter.java:159){color} {color:#000000}at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235){color} {color:#000000}at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206){color} {color:#000000}at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233){color} {color:#000000}at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191){color} {color:#000000}at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127){color} {color:#000000}at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102){color} {color:#000000}at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109){color} {color:#000000}at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293){color} {color:#000000}at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859){color} {color:#000000}at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602){color} {color:#000000}at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489){color} {color:#000000}at java.lang.Thread.run(Thread.java:680){color}
{color:#000000}2012-05-21 15:36:13,888 \[Finalizer\] INFO{color}
{color:#000000}org.apache.jackrabbit.core.TransientRepository.loggedOut():Line 424:{color}
{color:#000000}Session closed{color}


{color:#ff0000}HTC has patched the code at&nbsp;{color}[https://svn.kuali.org/repos/ole/tags/OLE-0.6-1/DocumentStore|https://svn.kuali.org/repos/ole/tags/OLE-0.6-1/DocumentStore]{color:#ff0000}. There are{color}{color:#ff0000}&nbsp;2 files have&nbsp;{color}{color:#ff0000}changed, RepositoryManager and RepositoryBrowser.{color}