| Index: sync/syncable/directory_backing_store.h
|
| diff --git a/sync/syncable/directory_backing_store.h b/sync/syncable/directory_backing_store.h
|
| index 81add28ec358e2c4523b22584a44ccd9e3be0a45..bb3641f49c876e1bd80f1170e7ec15fffa3956cb 100644
|
| --- a/sync/syncable/directory_backing_store.h
|
| +++ b/sync/syncable/directory_backing_store.h
|
| @@ -47,6 +47,10 @@ class SYNC_EXPORT_PRIVATE DirectoryBackingStore : public base::NonThreadSafe {
|
| friend class DirectoryBackingStoreTest;
|
| FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest,
|
| IncreaseDatabasePageSizeFrom4KTo32K);
|
| + FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest,
|
| + CatastrophicErrorHandler_KeptAcrossReset);
|
| + FRIEND_TEST_ALL_PREFIXES(DirectoryBackingStoreTest,
|
| + CatastrophicErrorHandler_Invocation);
|
|
|
| public:
|
| explicit DirectoryBackingStore(const std::string& dir_name);
|
| @@ -72,8 +76,31 @@ class SYNC_EXPORT_PRIVATE DirectoryBackingStore : public base::NonThreadSafe {
|
| // opening transactions elsewhere to block on synchronous I/O.
|
| // DO NOT CALL THIS FROM MORE THAN ONE THREAD EVER. Also, whichever thread
|
| // calls SaveChanges *must* be the thread that owns/destroys |this|.
|
| + //
|
| + // Returns true if the changes were saved successfully. Returns false if an
|
| + // error (of any kind) occurred. See also |SetCatastrophicErrorHandler| for a
|
| + // systematic way of handling underlying DB errors.
|
| virtual bool SaveChanges(const Directory::SaveChangesSnapshot& snapshot);
|
|
|
| + // Set the catastrophic error handler.
|
| + //
|
| + // When a catastrophic error is encountered while accessing the underlying DB,
|
| + // |catastrophic_error_handler| will be invoked (via PostTask) on the thread
|
| + // on which this DirectoryBackingStore object lives.
|
| + //
|
| + // For a definition of what's catastrophic, see sql::IsErrorCatastrophic.
|
| + //
|
| + // |catastrophic_error_handler| must be initialized (i.e. !is_null()).
|
| + //
|
| + // A single operation (like Load or SaveChanges) may result in the
|
| + // |catastrophic_error_handler| being invoked several times.
|
| + //
|
| + // There can be at most one handler. If this method is invoked when there is
|
| + // already a handler, the existing handler is overwritten with
|
| + // |catastrophic_error_handler|.
|
| + virtual void SetCatastrophicErrorHandler(
|
| + const base::Closure& catastrophic_error_handler);
|
| +
|
| protected:
|
| // For test classes.
|
| DirectoryBackingStore(const std::string& dir_name,
|
| @@ -206,6 +233,10 @@ class SYNC_EXPORT_PRIVATE DirectoryBackingStore : public base::NonThreadSafe {
|
| // discarded.
|
| bool needs_column_refresh_;
|
|
|
| + // We keep a copy of the Closure so we reinstall it when the underlying
|
| + // sql::Connection is destroyed/recreated.
|
| + base::Closure catastrophic_error_handler_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(DirectoryBackingStore);
|
| };
|
|
|
|
|