[ 
https://issues.apache.org/jira/browse/OAK-4180?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Chetan Mehrotra updated OAK-4180:
---------------------------------
    Description: 
DocumentNodeStore makes use of persistent cache to speed up its processing and 
save on making remote calls for data already present in cache

In addition to that we can look into make use of Segment NodeStore as kind of 
"local copy" for certain paths in repository and route calls to it if possible. 
As part of this task I would like to prototype such an approach. At high level 
it would work as below

# At start bootstrap the setup and shutdown it down
# Use a modified "sidegrade" and copy over the NodeStats from Document store to 
Segment store. In such a copy we also store some Document specific properties 
like {{readRevision}} and {{lastRevision}} as hidden property in Segment 
NodeStates
# In DocumentNodeStore we refactor the current code to extract a 
## {{AbstractDocumentNodeState}} - Abase class which has some logic move out 
from {{DocumentNodeState}}
## {{SegmentDocumentNodeState}} extends above and delegate calls to a wrapped 
{{SegmentNodeState}}
## {{DocumentNodeState}} would also extend {{AbstractDocumentNodeState}} and 
hence delegate to some calls to parent. In this when a call comes for 
{{getChildNode}} it can check if that can be served by a local copy of 
{{SegmentNodeStore}} for given {{rootRevision}} then it delegates to that
# For update plan is to make use of {{Observer}} which listens to changes and 
updates the local copy for certain configured paths. 
## Key aspect to address here is handle the restart case where in a cluster a 
specific node restarts after some time then how it refreshes itself there

*Currently its in a prototype phase*

*Usage*
Following 2 OSGi configs would need to be seed

* org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService.config
{noformat}
secondary=B"true"
{noformat}
* 
org.apache.jackrabbit.oak.plugins.document.secondary.SecondaryStoreCacheService.config
{noformat}
includedPaths=[ \
  "/",
  ]
{noformat}

With these settings if DocumentNodeStoreService gets started it would pickup 
the cache and use it. Change {{includedPaths}} depending on paths in repository 
which you want to include in secondary store t

  was:
DocumentNodeStore makes use of persistent cache to speed up its processing and 
save on making remote calls for data already present in cache

In addition to that we can look into make use of Segment NodeStore as kind of 
"local copy" for certain paths in repository and route calls to it if possible. 
As part of this task I would like to prototype such an approach. At high level 
it would work as below

# At start bootstrap the setup and shutdown it down
# Use a modified "sidegrade" and copy over the NodeStats from Document store to 
Segment store. In such a copy we also store some Document specific properties 
like {{readRevision}} and {{lastRevision}} as hidden property in Segment 
NodeStates
# In DocumentNodeStore we refactor the current code to extract a 
## {{AbstractDocumentNodeState}} - Abase class which has some logic move out 
from {{DocumentNodeState}}
## {{SegmentDocumentNodeState}} extends above and delegate calls to a wrapped 
{{SegmentNodeState}}
## {{DocumentNodeState}} would also extend {{AbstractDocumentNodeState}} and 
hence delegate to some calls to parent. In this when a call comes for 
{{getChildNode}} it can check if that can be served by a local copy of 
{{SegmentNodeStore}} for given {{rootRevision}} then it delegates to that
# For update plan is to make use of {{Observer}} which listens to changes and 
updates the local copy for certain configured paths. 
## Key aspect to address here is handle the restart case where in a cluster a 
specific node restarts after some time then how it refreshes itself there

*Currently its in a prototype phase*


> Use another NodeStore as a local cache for a remote Document store
> ------------------------------------------------------------------
>
>                 Key: OAK-4180
>                 URL: https://issues.apache.org/jira/browse/OAK-4180
>             Project: Jackrabbit Oak
>          Issue Type: New Feature
>          Components: documentmk
>            Reporter: Chetan Mehrotra
>            Assignee: Chetan Mehrotra
>             Fix For: 1.6
>
>         Attachments: OAK-4180-v1.patch
>
>
> DocumentNodeStore makes use of persistent cache to speed up its processing 
> and save on making remote calls for data already present in cache
> In addition to that we can look into make use of Segment NodeStore as kind of 
> "local copy" for certain paths in repository and route calls to it if 
> possible. As part of this task I would like to prototype such an approach. At 
> high level it would work as below
> # At start bootstrap the setup and shutdown it down
> # Use a modified "sidegrade" and copy over the NodeStats from Document store 
> to Segment store. In such a copy we also store some Document specific 
> properties like {{readRevision}} and {{lastRevision}} as hidden property in 
> Segment NodeStates
> # In DocumentNodeStore we refactor the current code to extract a 
> ## {{AbstractDocumentNodeState}} - Abase class which has some logic move out 
> from {{DocumentNodeState}}
> ## {{SegmentDocumentNodeState}} extends above and delegate calls to a wrapped 
> {{SegmentNodeState}}
> ## {{DocumentNodeState}} would also extend {{AbstractDocumentNodeState}} and 
> hence delegate to some calls to parent. In this when a call comes for 
> {{getChildNode}} it can check if that can be served by a local copy of 
> {{SegmentNodeStore}} for given {{rootRevision}} then it delegates to that
> # For update plan is to make use of {{Observer}} which listens to changes and 
> updates the local copy for certain configured paths. 
> ## Key aspect to address here is handle the restart case where in a cluster a 
> specific node restarts after some time then how it refreshes itself there
> *Currently its in a prototype phase*
> *Usage*
> Following 2 OSGi configs would need to be seed
> * org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStoreService.config
> {noformat}
> secondary=B"true"
> {noformat}
> * 
> org.apache.jackrabbit.oak.plugins.document.secondary.SecondaryStoreCacheService.config
> {noformat}
> includedPaths=[ \
>   "/",
>   ]
> {noformat}
> With these settings if DocumentNodeStoreService gets started it would pickup 
> the cache and use it. Change {{includedPaths}} depending on paths in 
> repository which you want to include in secondary store t



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to