[ 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)