gecko/mobile/android/base/sync/repositories/StoreTracker.java
Richard Newman 54e32a96c1 Bug 720934 - Part 2: Collected Android Sync 0.4 code drop (Bug 722945, Bug 709348). a=mobile
Includes:
Bug 722945 - Transactional behavior for store (don't return stored records in subsequent fetch).
Bug 709348 - Refactor and improve reconciling and storing of records.
2012-02-03 13:09:29 -08:00

79 lines
2.4 KiB
Java

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
* You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.sync.repositories;
/**
* Our hacky version of transactional semantics. The goal is to prevent
* the following situation:
*
* * AAA is not modified locally.
* * A modified AAA is downloaded during the storing phase. Its local
* timestamp is advanced.
* * The direction of syncing changes, and AAA is now uploaded to the server.
*
* The following situation should still be supported:
*
* * AAA is not modified locally.
* * A modified AAA is downloaded and merged with the local AAA.
* * The merged AAA is uploaded to the server.
*
* As should:
*
* * AAA is modified locally.
* * A modified AAA is downloaded, and discarded or merged.
* * The current version of AAA is uploaded to the server.
*
* We achieve this by tracking GUIDs during the storing phase. If we
* apply a record such that the local copy is substantially the same
* as the record we just downloaded, we add it to a list of records
* to avoid uploading. The definition of "substantially the same"
* depends on the particular repository. The only consideration is "do we
* want to upload this record in this sync?".
*
* Note that items are removed from this list when a fetch that
* considers them for upload completes successfully. The entire list
* is discarded when the session is completed.
*
* This interface exposes methods to:
*
* * During a store, recording that a record has been stored, and should
* thus not be returned in subsequent fetches;
* * During a fetch, checking whether a record should be returned.
*
* In the future this might also grow self-persistence.
*
* See also RepositorySession.trackRecord.
*
* @author rnewman
*
*/
public interface StoreTracker {
/**
* @param guid
* The GUID of the item to track.
* @return
* Whether the GUID was a newly tracked value.
*/
public boolean trackRecordForExclusion(String guid);
/**
* @param guid
* The GUID of the item to check.
* @return
* true if the item is already tracked.
*/
public boolean isTrackedForExclusion(String guid);
/**
*
* @param guid
* @return true if the specified GUID was removed from the tracked set.
*/
public boolean untrackStoredForExclusion(String guid);
public RecordFilter getFilter();
}