abort the summary early if we're over the full sync threshold

This commit is contained in:
Damien Elmes 2011-02-12 00:25:50 +09:00
parent d23a2bbe59
commit 1ddf1be747
2 changed files with 37 additions and 29 deletions

View file

@ -868,7 +868,7 @@ and type between 1 and 2""",
def _nextInterval(self, card, delay, ease): def _nextInterval(self, card, delay, ease):
interval = card.interval interval = card.interval
factor = card.factor factor = card.factor
# if shown early # if cramming / reviewing early
if delay < 0: if delay < 0:
# FIXME: this should recreate lastInterval from interval / # FIXME: this should recreate lastInterval from interval /
# lastFactor, or we lose delay information when reviewing early # lastFactor, or we lose delay information when reviewing early

View file

@ -87,6 +87,7 @@ class SyncTools(object):
self.diffs = {} self.diffs = {}
self.serverExcludedTags = [] self.serverExcludedTags = []
self.timediff = 0 self.timediff = 0
self.fullThreshold = 2000
# Control # Control
########################################################################## ##########################################################################
@ -99,7 +100,8 @@ class SyncTools(object):
if not self.prepareSync(0): if not self.prepareSync(0):
return return
lsum = self.summary(self.deck.lastSync) lsum = self.summary(self.deck.lastSync)
rsum = self.server.summary(self.deck.lastSync) if lsum:
rsum = self.server.summary(self.deck.lastSync)
if not lsum or not rsum: if not lsum or not rsum:
raise Exception("full sync required") raise Exception("full sync required")
payload = self.genPayload((lsum, rsum)) payload = self.genPayload((lsum, rsum))
@ -210,41 +212,47 @@ class SyncTools(object):
def summary(self, lastSync): def summary(self, lastSync):
"Generate a full summary of modtimes for two-way syncing." "Generate a full summary of modtimes for two-way syncing."
# if client may have selected an earlier sync time # client may have selected an earlier sync time
self.deck.lastSync = lastSync self.deck.lastSync = lastSync
# return early if there's been a schema change # return early if there's been a schema change
if self.deck.getFloat("schemaMod") > lastSync: if self.deck.getFloat("schemaMod") > lastSync:
return None return None
return { d = {}
cats = [
# cards # cards
"cards": self.realLists(self.deck.s.all( ("cards",
"select id, modified from cards where modified > :mod", "select id, modified from cards where modified > :m"),
mod=lastSync)), ("delcards",
"delcards": self.realLists(self.deck.s.all( "select cardId, deletedTime from cardsDeleted "
"select cardId, deletedTime from cardsDeleted " "where deletedTime > :m"),
"where deletedTime > :mod", mod=lastSync)),
# facts # facts
"facts": self.realLists(self.deck.s.all( ("facts",
"select id, modified from facts where modified > :mod", "select id, modified from facts where modified > :m"),
mod=lastSync)), ("delfacts",
"delfacts": self.realLists(self.deck.s.all( "select factId, deletedTime from factsDeleted "
"select factId, deletedTime from factsDeleted " "where deletedTime > :m"),
"where deletedTime > :mod", mod=lastSync)),
# models # models
"models": self.realLists(self.deck.s.all( ("models",
"select id, modified from models where modified > :mod", "select id, modified from models where modified > :m"),
mod=lastSync)), ("delmodels",
"delmodels": self.realLists(self.deck.s.all( "select modelId, deletedTime from modelsDeleted "
"select modelId, deletedTime from modelsDeleted " "where deletedTime > :m"),
"where deletedTime > :mod", mod=lastSync)),
# media # media
"media": self.realLists(self.deck.s.all( ("media",
"select id, created from media where created > :mod", "select id, created from media where created > :m"),
mod=lastSync)), ("delmedia",
"delmedia": self.realLists(self.deck.s.all( "select mediaId, deletedTime from mediaDeleted "
"select mediaId, deletedTime from mediaDeleted " "where deletedTime > :m")
"where deletedTime > :mod", mod=lastSync)), ]
} for (key, sql) in cats:
if self.fullThreshold:
sql += " limit %d" % self.fullThreshold
ret = self.deck.s.all(sql, m=lastSync)
if self.fullThreshold and self.fullThreshold == len(ret):
# theshold exceeded, abort early
return None
d[key] = self.realLists(ret)
return d
# Diffing # Diffing
########################################################################## ##########################################################################