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

Fred Krone updated GEODE-2654:
------------------------------
    Labels: storage_2  (was: )

> Backups can capture different members from different points in time
> -------------------------------------------------------------------
>
>                 Key: GEODE-2654
>                 URL: https://issues.apache.org/jira/browse/GEODE-2654
>             Project: Geode
>          Issue Type: Bug
>          Components: persistence
>            Reporter: Dan Smith
>              Labels: storage_2
>
> Geode backups should behave the same as recovering from disk after killing 
> all of the members.
> Unfortunately, the backups instead can backup data on different members at 
> different points in time, resulting in application level inconsistency. 
> Here's an example of what goes wrong:
> # Start a Backup
> # Do a put in region A
> # Do a put in region B
> # The backup finishes
> # Recover from the backup
> # You may see the put to region B, but not A, even if the data is colocated.
> We ran into this with with lucene indexes - see GEODE-2643. We've worked 
> around GEODE-2643 by putting all data into the same region, but we're worried 
> that we still have a problem with the async event queue. With an async event 
> listener that writes to another geode region, because it's possible to 
> recover different points in time for the async event queue and the region, 
> resulting in missed events. 
> The issue is that there is no locking or other mechanism to prevent different 
> members from backing up their data at different points in time. Colocating 
> data does not avoid this problem, because when we recover from disk we may 
> recover region A's bucket from one member and region B's bucket from another 
> member.
> The backup operation does have a mechanism for making sure that it gets a 
> point in time snapshot of *metadata*. It sends a PrepareBackupRequest to all 
> members which causes them to lock their init file. Then it sends a 
> FinishBackupRequest which tells all members to backup their data and release 
> the lock. This ensures that a backup doesn't completely miss a bucket or get 
> corrupt metadata about what members host as bucket. See the comments in 
> DiskStoreImpl.lockStoreBeforeBackup.
> We should extend this Prepare/Finish mechanism to make sure we get a point in 
> time snapshot of region data as well. One way to do this would be to get a 
> lock on the *oplog* in lockStoreBeforeBackup to prevent writes and hold it 
> until releaseBackupLock is called.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to