summaryrefslogtreecommitdiffstats
path: root/sync/syncable/syncable_write_transaction.h
diff options
context:
space:
mode:
Diffstat (limited to 'sync/syncable/syncable_write_transaction.h')
-rw-r--r--sync/syncable/syncable_write_transaction.h68
1 files changed, 68 insertions, 0 deletions
diff --git a/sync/syncable/syncable_write_transaction.h b/sync/syncable/syncable_write_transaction.h
new file mode 100644
index 0000000..d45ee5f
--- /dev/null
+++ b/sync/syncable/syncable_write_transaction.h
@@ -0,0 +1,68 @@
+// Copyright 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef SYNC_SYNCABLE_SYNCABLE_WRITE_TRANSACTION_H_
+#define SYNC_SYNCABLE_SYNCABLE_WRITE_TRANSACTION_H_
+
+#include "sync/base/sync_export.h"
+#include "sync/syncable/entry_kernel.h"
+#include "sync/syncable/syncable_base_transaction.h"
+
+namespace syncer {
+namespace syncable {
+
+SYNC_EXPORT extern const int64 kInvalidTransactionVersion;
+
+// Locks db in constructor, unlocks in destructor.
+class WriteTransaction : public BaseTransaction {
+ public:
+ WriteTransaction(const tracked_objects::Location& from_here,
+ WriterTag writer, Directory* directory);
+
+ // Constructor used for getting back transaction version after making sync
+ // API changes to one model. If model is changed by the transaction,
+ // the new transaction version of the model and modified nodes will be saved
+ // in |transaction_version| upon destruction of the transaction. If model is
+ // not changed, |transaction_version| will be kInvalidTransactionVersion.
+ WriteTransaction(const tracked_objects::Location& from_here,
+ Directory* directory, int64* transaction_version);
+
+ virtual ~WriteTransaction();
+
+ void SaveOriginal(const EntryKernel* entry);
+
+ protected:
+ // Overridden by tests.
+ virtual void NotifyTransactionComplete(ModelTypeSet models_with_changes);
+
+ private:
+ friend class MutableEntry;
+
+ // Clears |mutations_|.
+ ImmutableEntryKernelMutationMap RecordMutations();
+
+ void UnlockAndNotify(const ImmutableEntryKernelMutationMap& mutations);
+
+ ModelTypeSet NotifyTransactionChangingAndEnding(
+ const ImmutableEntryKernelMutationMap& mutations);
+
+ // Increment versions of the models whose entries are modified and set the
+ // version on the changed entries.
+ void UpdateTransactionVersion(const std::vector<int64>& entry_changed);
+
+ // Only the original fields are filled in until |RecordMutations()|.
+ // We use a mutation map instead of a kernel set to avoid copying.
+ EntryKernelMutationMap mutations_;
+
+ // Stores new transaction version of changed model and nodes if model is
+ // indeed changed. kInvalidTransactionVersion otherwise. Not owned.
+ int64* transaction_version_;
+
+ DISALLOW_COPY_AND_ASSIGN(WriteTransaction);
+};
+
+} // namespace syncable
+} // namespace syncer
+
+#endif // SYNC_SYNCABLE_SYNCABLE_WRITE_TRANSACTION_H_