﻿id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	launchpad_bug
547	mapupdate(MODE_WRITE) triggers on a false boundary	warner		"""problem 1"" in #546, is that the mapupdate code has a bug, in which it
triggers too early. The MODE_WRITE logic waits for the following conditions:

 1. for the highest sequence number we've ever seen, we can recover all
    versions that have that sequence number
 2. we've received responses from at least k+epsilon servers
 3. we've seen a contiguous range of epsilon servers who do not have a share

The last criteria is intended to help us find the edge of the ""active set"":
the boundary between servers who have shares (at the beginning of the
permuted list) and those who do not (at the end of the list). The bug is in
the way this last criteria is tested.

If we've queried 10 servers and received responses from 9 of them, in the
pattern ""00100010?1"", the logic that looks for ""1000"" will fire:

{{{
00100010?1
  1000
}}}

Instead, the logic should be more like ""1000$"". At least it should not be
allowed to fire if there are any share-holding servers beyond the match.

The consequence of this bug is to exacerbate the problems in #546: sending
shares to servers which already have other shares, triggering inappropriate
!UncoordinatedWriteErrors.
"	defect	new	major	soon	code-mutable	1.2.0		availability mutable mapupdate ucwe		
