On Tue, Jun 5, 2018 at 3:15 PM, Eric Berryman <eric.berry...@gmail.com> wrote: > Again, thank you so much for walking me through this. > > Considering your comment that the Journal updates the cache too. > > Looking at the Journal table in more detail, I see something that at least > makes sense. > The last entry of meta data in the Journal table is the same as the last > image on node2. > So, it looks as if node2 is doing what it is suppose to do, but node1 has > stopped writing to the Journal. > (So the meta data must be in the cache of node1?) > > At this point, I'm a little worried that if I restart node1; I will lose > data, or it will fix everything.
What's the version of Jackrabbit exactly? Just as a wild guess (I'm not so sure), if there's a bug (such as dead lock), you might lose some data when restarted. If you're not with the latest of 2.6.x (http://jackrabbit.apache.org/jcr/downloads.html#v2.6), there's a chance of some known issues. But I'm not really sure whether or not it's caused by a bug. You can check JIRA board. e.g, https://issues.apache.org/jira/browse/JCR-3783 > > Is this recoverable? I'm guessing a restart of node1 will cause the > Journal to start getting updated again, but how do I get the missing > entries? Hmm. There's a standalone tool for backup (http://jackrabbit.apache.org/jcr/standalone-server.html#Backup_and_migration) but it's not an option for you unfortunately. Woonsan > And, am I sure after a restart node1 will still have all the entries for > the past two weeks (considering it wasn't making Journal entries). > > I don't see anything in the log that suggests that something died. I'm > also wondering how to monitor for this. > > Here is my repository.xml: > <Repository> > <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem"> > <param name="path" value="/tmp/jackrabbit-olog/repository"/> > </FileSystem> > <DataStore class="org.apache.jackrabbit.core.data.db.DbDataStore"> > <param name="driver" value="javax.naming.InitialContext"/> > <param name="url" value="jdbc/jcr"/> > <param name="databaseType" value="mysql"/> > <param name="schemaObjectPrefix" value="jcr_ds_" /> > </DataStore> > <Security appName="Jackrabbit"> > <SecurityManager > class="org.apache.jackrabbit.core.security.simple.SimpleSecurityManager" > workspaceName="security"> > </SecurityManager> > <AccessManager class="org.apache.jackrabbit.core.security.simple. > SimpleAccessManager"> > </AccessManager> > <LoginModule class="org.apache.jackrabbit.core.security.simple. > SimpleLoginModule"> > </LoginModule> > </Security> > <Workspaces rootPath="/tmp/jackrabbit-olog/workspaces" > defaultWorkspace="olog"/> > <Workspace name="${wsp.name}"> > <FileSystem class="org.apache.jackrabbit. > core.fs.local.LocalFileSystem"> > <param name="path" value="${wsp.home}"/> > </FileSystem> > <PersistenceManager class="org.apache.jackrabbit. > core.persistence.bundle.MySqlPersistenceManager"> > <param name="driver" value="javax.naming.InitialContext"/> > <param name="url" value="jdbc/jcr"/> > <param name="schema" value="mysql"/> > <param name="schemaObjectPrefix" value="jcr_${wsp.name}_pm_"/> > <param name="externalBLOBs" value="false"/> > </PersistenceManager> > <SearchIndex class="org.apache.jackrabbit. > core.query.lucene.SearchIndex"> > <param name="path" value="${wsp.home}/index"/> > <param name="supportHighlighting" value="true"/> > </SearchIndex> > </Workspace> > <Versioning rootPath="/tmp/jackrabbit-olog/version"> > <FileSystem class="org.apache.jackrabbit. > core.fs.local.LocalFileSystem"> > <param name="path" value="${rep.home}/version" /> > </FileSystem> > <PersistenceManager class="org.apache.jackrabbit.core.state.db. > SimpleDbPersistenceManager"> > <param name="driver" value="javax.naming.InitialContext"/> > <param name="url" value="jdbc/jcr"/> > <param name="schema" value="mysql"/> > <param name="schemaObjectPrefix" value="jcr_pmver_"/> > <param name="externalBLOBs" value="false"/> > </PersistenceManager> > </Versioning> > <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex" >> > <param name="path" value="/tmp/jackrabbit-olog/repository/index"/> > <param name="supportHighlighting" value="true"/> > </SearchIndex> > <Cluster id="node3" syncDelay="2000"> > <Journal class="org.apache.jackrabbit.core.journal.DatabaseJournal"> > <param name="revision" value="${rep.home}/revision.log" /> > <param name="driver" value="javax.naming.InitialContext"/> > <param name="url" value="jdbc/jcr"/> > <param name="databaseType" value="mysql"/> > </Journal> > </Cluster> > </Repository> > > Thank you again! > Eric > > On Mon, Jun 4, 2018 at 10:25 AM, Woonsan Ko <woon...@apache.org> wrote: > >> On Sat, Jun 2, 2018 at 8:39 AM, Eric Berryman <eric.berry...@gmail.com> >> wrote: >> > - Blob data in the table doesn't necessarily mean that the binary data >> > is stored >> > in a JCR node's binary property. >> > >> > - If you have a chance to use javax.jcr.Node#getNode(path) directly to >> > retrieve the specific node containing binary property, then I don't >> think that >> > will hit the Lucene index. >> > >> > Thank you, these are good bits of information. I just checked, and I do >> > have API endpoints that only use getNode. Node1 returns binary >> properties, >> > while node2 doesn't. So, from your comment the index has nothing to do >> > with my issue. But, it looks like your first comment puts me in the >> right >> > path. The table has the blob, but the binary property is probably >> missing >> > in the database. Is it possible this isn't flushed to the database by >> >> I don't think so. Any changes must be persisted. >> >> > node1? It seems to make sense that the large binary gets persisted, >> while >> > the small property might still be in memory? >> >> "the small property" can be persisted differently from "the larger >> binary", depending on "minRecordLength" parameter: >> - https://wiki.apache.org/jackrabbit/DataStore >> >> If the binary property data is not larger than minRecordLength, it's >> persisted to the PersistenceManager from the memory, not to the >> DataStore. >> By the way, do you know that the single DataStore is global across >> workspaces? If node1 uses a different workspace from what node1 uses >> and if the binary data was smaller than minRecordLength, then the >> binary from node1 is stored in its own database or table which might >> not be seen by node2 (due to different workspace / DB configuration >> possibly). >> Perhaps you can check the repository.xml file and workspace.xml >> file(s) on each node if there's anything different. >> >> > >> > Another question, is the journal only used for updating the index, or >> does >> > it do more than that? >> >> I think it should care of the caching node state manager as well. >> >> Woonsan >> >> > >> > Thank you again for your help! >> > Eric >> > >> > On Sat, Jun 2, 2018, 00:18 Woonsan Ko <woon...@apache.org> wrote: >> > >> >> On Fri, Jun 1, 2018 at 9:57 PM, Eric Berryman <eric.berry...@gmail.com> >> >> wrote: >> >> > Node1 looks completely fine, and the application that uses it is in >> >> > production. It's a simple java ee application that uses the jcr to >> >> upload >> >> > and list past images. >> >> >> >> Does the application use javax.jcr.query.Query first to retrieve the >> >> nodes containing binary properties? If so, it uses Lucene index for >> >> the query. >> >> If you have a chance to use javax.jcr.Node#getNode(path) directly to >> >> retrieve the specific node containing binary property, then I don't >> >> think that will hit the Lucene index. It just converts the path to >> >> node ids to retrieve node states from database. So, it is worth >> >> validating one of the recently added nodes by #getNode(path) on both >> >> Node1 and Node2, IMO. If it returns a node but fails to return it by >> >> Query, then it is a Lucene index issue. If it returns nothing in both >> >> ways on Node2 while it works fineon Node1, then perhaps is Node2 >> >> looking at a different database or tables? >> >> >> >> Regards, >> >> >> >> Woonsan >> >> >> >> > >> >> > I guess what I don't understand, is that they are looking at the exact >> >> same >> >> > database. It seems I should be able to have node2 see it the same >> way, >> >> and >> >> > the only difference would be the index, which is in a local file >> >> directory. >> >> > >> >> > So strange. >> >> > >> >> > Thank you! >> >> > >> >> > On Jun 1, 2018 21:44, "Woonsan Ko" <woon...@apache.org> wrote: >> >> > >> >> > Hi Eric, >> >> > >> >> > >> >> > On Fri, Jun 1, 2018 at 1:29 PM, Eric Berryman < >> eric.berry...@gmail.com> >> >> > wrote: >> >> >> Hello! >> >> >> >> >> >> I have an application that uses jackrabbit to save images, using the >> >> >> database filestore. >> >> >> I have jackrabbit clustered (node1, node2). >> >> >> This was working for me fine, but I started seeing an oddity. >> >> >> Node1 inserts an image, but node2 doesn't seem to see it when queried >> >> >> anymore. >> >> >> So, node2 is now missing about the last 2 weeks of images. >> >> >> I can see the correct image as a blob in the jcr_ds_DATASTORE table. >> >> > >> >> > Are you sure you are able to query or find the images in node1? >> >> > Blob data in the table doesn't necessarily mean that the binary data >> >> > is stored in a JCR node's binary property. The blob data could be >> >> > referred by another node or versioned frozen node or non-existing node >> >> > which can be caused by node deletion but the binary data wasn't >> >> > garbage-collected. >> >> > So, I'd traverse the nodes through simple JCR API and validate if the >> >> > nodes really exists even in node1. You might need to ask around about >> >> > the paths of the recently added nodes containing the binary data to do >> >> > that. >> >> > >> >> > >> >> >> >> >> >> And, node2 logged that the journal has been applied. >> >> >> The LOCAL_REVISIONS table shows both nodes have a revision id of 605 >> >> >> (although I do have 1364 images). >> >> >> >> >> >> I've tried adding enableConsistencyCheck=true and >> >> >> forceConsistencyCheck=true to the index part of the repository.xml >> file. >> >> >> But, I don't see any errors. Just, that the consistency check >> happened. >> >> >> >> >> >> I've also tried clearing the index directory of node2. Jackrabbit >> >> >> recreates the index, applies the 605 journal entries, then ends up in >> >> the >> >> >> same state without the last two weeks of images. >> >> >> >> >> >> Are there any ideas to fix what seems to be an index issue. >> >> > >> >> > I'm kind of suspicious that some of the new nodes in last two weeks >> >> > might have been removed for some reasons. You can perhaps rule out >> >> > this possibility by inspecting JCR nodes on node1 first. >> >> > >> >> > Regards, >> >> > >> >> > Woonsan >> >> > >> >> > >> >> >> >> >> >> Any help or ideas to troubleshoot are greatly appreciated. >> >> >> (jackrabbit 2.6) >> >> >> >> >> >> Thank you! >> >> >> Eric >> >> >>