sounds good to me. In place compress, at least currently is an ad-hoc
infrequent operation, and unlikely to be going on when a backup is
taking place.
Suresh Thalamati (JIRA) wrote:
[ http://issues.apache.org/jira/browse/DERBY-239?page=comments#action_12361686 ]
Suresh Thalamati commented on DERBY-239:
----------------------------------------
inplace-compress with online backup problem:
I was scanning through the code to find out any issues with online backup and in-place compress and came across the following code that does a checkpoint before truncating the container.
FileContainer.java:
protected void compressContainer(
....
// make sure we don't execute redo recovery on any page
// which is getting truncated. At this point we have an exclusive
// table lock on the table, so after checkpoint no page change
// can happen between checkpoint log record and compress of space.
dataFactory.getRawStoreFactory().checkpoint();
Above code assumes that redo will only start after the checkpoint
done by the compress, that is true in crash-recovery. But
restore from backup can start redo from a checkpoint that is taken when backup was started, which can be before the checkpoint done by compress. if compress is run in parallel to the backup, restore from the backup can FAIL because it can not find the pages needed by the redo if a container gets backed up after it is truncate by the compress.
I could not think of an easy way to avoid the need for the compress to perform checkpoint while truncating a container.
One way to make good online backup when in-place compress is
in progress seems to be by enforcing the following restrictions similar to the way unlogged operations are handled:
1) Block in-place compress operation if backup is in progress and
2) Make backup operation wait/fail until compress is done.
I don't like to add restrictions, but I guess compress is an infrequent operation, so it may be ok.
Any comments/suggestions ?
Thanks
-suresht
Need a online backup feature that does not block update operations when
online backup is in progress.
--------------------------------------------------------------------------------------------------------
Key: DERBY-239
URL: http://issues.apache.org/jira/browse/DERBY-239
Project: Derby
Type: New Feature
Components: Store
Versions: 10.1.1.0
Reporter: Suresh Thalamati
Assignee: Suresh Thalamati
Attachments: obtest_customer.jar, onlinebackup.html, onlinebackup1.html,
onlinebackup_1.diff, onlinebackup_2.diff, onlinebackup_3.diff,
onlinebackup_4.diff, onlinebackup_5.diff, onlinebackup_6.diff
Currently Derby allows users to perfoms online backups using
SYSCS_UTIL.SYSCS_BACKUP_DATABASE() procedure, but while the backup is in
progress, update operations are temporarily blocked, but read operations can
still proceed.
Blocking update operations can be real issue specifically in client server environments, because user requests will be blocked for a long time if a
backup is in the progress on the server.