[
https://issues.apache.org/jira/browse/OAK-2808?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16005906#comment-16005906
]
Chetan Mehrotra commented on OAK-2808:
--------------------------------------
bq. store blob ids as Strings instead of as blob ids
Thats the issue with storing the blobIds in repository. The proposed approach
based on local file should work fine
{quote}
changes to the datastore GC are needed to collect some blobs
changed to the datastore GC are needed to retain other blobs
{quote}
No change in current datastore GC is to be done. You only need the last gc
details if you want to support rolling back to revisions which are older than
last valid checkpoint. Note that such a rollback is not supported per api.
bq. can not support rollback to an old revision
You can rollback to last checkpointed revision. We never supported the notion
that rollback to revisions prior to oldest checkpoint state can work properly.
Such a rollback can only possibly work for segment and would not work for
DocumentNodeStore. So not sure we would want to account for that
bq. "only persist the index (to the repository) every x minutes"
The problem there is complexity introduced in index logic to ensure that index
remains consistent wrt repository state in case of unclean shutdown, leader
node going away in a cluster setup etc. Lets take following timeline of events
# T1 - Last valid checkpoint = cp-t1. Indexes in repo are upto date till this
time
# T2 - Next indexing cycle happens.
#* checkpoint cp-t1 is released
#* last valid checkpoint is cp-t2
#* Local index on cluster node N1 are upto date till cp-t2
#* Index stored in repo are upto date till cp-t1
# T3 - Cluster node N1 dies and N2 becomes leader
#* It does indexing from [cp-t2, cp-t3] and
#* also updates the indexes present in repo to cp-t3
In above sequence the indexes would not have the data from [cp-t1, cp-t2] as
that data was stored locally on N1 which has gone away now.
Current approach ensures that checkpoint is only released and new one stored
only when all index data is safely stored in repository and even with lost of
Oak nodes in cluster the index data would remain safe. To handle that we would
need to
# Ensure that leader remain stable in topology i.e. does not change frequently
such that locally stored index data do gets added to repo
# Change the indexing logic to track 2 checkpoints and do reindexing from older
checkpoint for the case where leader node died
We can try doing that but need to be careful there that we never leave indexed
in inconsistent state and cover all failure aspects. Current indexing is
transactional/atomic and made reliable over period of time wrt checkpoint
handling.
Also even in that case active deletion would help as even with reduced
frequency the garbage would still be there and full blobgc cannot be run very
frequently. So active deletion would complement such an approach.
> Active deletion of 'deleted' Lucene index files from DataStore without
> relying on full scale Blob GC
> ----------------------------------------------------------------------------------------------------
>
> Key: OAK-2808
> URL: https://issues.apache.org/jira/browse/OAK-2808
> Project: Jackrabbit Oak
> Issue Type: Improvement
> Components: lucene
> Reporter: Chetan Mehrotra
> Assignee: Thomas Mueller
> Labels: datastore, performance
> Fix For: 1.8
>
> Attachments: copyonread-stats.png, OAK-2808-1.patch
>
>
> With storing of Lucene index files within DataStore our usage pattern
> of DataStore has changed between JR2 and Oak.
> With JR2 the writes were mostly application based i.e. if application
> stores a pdf/image file then that would be stored in DataStore. JR2 by
> default would not write stuff to DataStore. Further in deployment
> where large number of binary content is present then systems tend to
> share the DataStore to avoid duplication of storage. In such cases
> running Blob GC is a non trivial task as it involves a manual step and
> coordination across multiple deployments. Due to this systems tend to
> delay frequency of GC
> Now with Oak apart from application the Oak system itself *actively*
> uses the DataStore to store the index files for Lucene and there the
> churn might be much higher i.e. frequency of creation and deletion of
> index file is lot higher. This would accelerate the rate of garbage
> generation and thus put lot more pressure on the DataStore storage
> requirements.
> Discussion thread http://markmail.org/thread/iybd3eq2bh372zrl
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)