)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"249a1ce564084bc8fd9746c8a3587d47e00b9225","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"1684e571_36bacbaf","updated":"2022-03-10 16:29:19.000000000","message":"@Matt can you remind me why we need the new ACTIVATING state, vs. staying in CLEAVED and delaying moving to ACTIVE until a quorum of CleavingContexts reach \u0027done\u0027?","commit_id":"9b9c156d5a3372f4dc4827e677198eca36a54c35"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1b0990c3abb17924fec907e7387f2b0b0ed4bf0c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":14,"id":"72fc1fdc_992ede04","in_reply_to":"1684e571_36bacbaf","updated":"2022-03-15 05:04:05.000000000","message":"Now that is a good question.. in essence that is what I\u0027m doing with the ACTIVATING state.. what might be another question, does the follow up CLEAVING patch also kind of resolve this issue, because a shard wont reach a CLEAVED state until enough of the CleavingContexts reach get to the same ranges_done. So by deciding to \"oh I\u0027ll also fix the cleaving hole, might of actaully fixed both?\"","commit_id":"9b9c156d5a3372f4dc4827e677198eca36a54c35"}],"swift/common/utils.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7c7fed4f90b32f320dc9de1e0fd86aab412b181a","unresolved":true,"context_lines":[{"line_number":5053,"context_line":"              CREATED: \u0027created\u0027,"},{"line_number":5054,"context_line":"              CLEAVED: \u0027cleaved\u0027,"},{"line_number":5055,"context_line":"              ACTIVE_MINUS_MINUS: \u0027active--\u0027,"},{"line_number":5056,"context_line":"              ACTIVE_MINUS: \u0027active-\u0027,"},{"line_number":5057,"context_line":"              ACTIVE: \u0027active\u0027,"},{"line_number":5058,"context_line":"              SHRINKING: \u0027shrinking\u0027,"},{"line_number":5059,"context_line":"              SHARDING: \u0027sharding\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3bb106aa_4d3d433c","line":5056,"updated":"2021-03-28 21:56:29.000000000","message":"Turned it around to -- rather then ++ as it\u0027ll mean everything in a cluster that is already ACTIVE will be considered shrinking candidates (so no upgrade impact).","commit_id":"842ed59395bb9be9b767937dc23e283cff306fc6"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"7c7fed4f90b32f320dc9de1e0fd86aab412b181a","unresolved":true,"context_lines":[{"line_number":5642,"context_line":""},{"line_number":5643,"context_line":"    @property"},{"line_number":5644,"context_line":"    def states(self):"},{"line_number":5645,"context_line":"        return set(sr.state for sr in self)"},{"line_number":5646,"context_line":""},{"line_number":5647,"context_line":"    def includes(self, other):"},{"line_number":5648,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"8cc7c5d7_3c35c4ac","line":5645,"updated":"2021-03-28 21:56:29.000000000","message":"I stole this from Al\u0027s analyze and repair patch as I need it for audit. I probably should just rebase it ontop 😊","commit_id":"842ed59395bb9be9b767937dc23e283cff306fc6"}],"swift/container/backend.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"b1e8f71f6a00eb9de31e59faf909764ced46221d","unresolved":true,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"SHARD_STATS_ACTIVE \u003d [ShardRange.ACTIVE, ShardRange.ACTIVE_PLUS,"},{"line_number":53,"context_line":"                      ShardRange.ACTIVE_QUORUM]"},{"line_number":54,"context_line":"SHARD_STATS_STATES \u003d [ShardRange.SHARDING, ShardRange.SHRINKING] + \\"},{"line_number":55,"context_line":"                     SHARD_STATS_ACTIVE"},{"line_number":56,"context_line":"SHARD_LISTING_STATES \u003d SHARD_STATS_STATES + [ShardRange.CLEAVED]"}],"source_content_type":"text/x-python","patch_set":1,"id":"d055315e_82540365","line":53,"updated":"2021-03-25 06:24:54.000000000","message":"I added ShardRange.ACTIVE_STATES after this, so we can remove this and just use ShardRange.ACTIVE_STATES below now.","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"}],"swift/container/sharder.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5e5f4fe7084191a18a5b5c7ca718345e9a96ae6b","unresolved":true,"context_lines":[{"line_number":139,"context_line":"    # First cut is simple: assume root container shard usage stats are good"},{"line_number":140,"context_line":"    # enough to make decision."},{"line_number":141,"context_line":"    if shard_ranges is None:"},{"line_number":142,"context_line":"        shard_ranges \u003d broker.get_shard_ranges(states\u003dShardRange.ACTIVE_STATES)"},{"line_number":143,"context_line":"    candidates \u003d []"},{"line_number":144,"context_line":"    for shard_range in shard_ranges:"},{"line_number":145,"context_line":"        if not is_sharding_candidate(shard_range, threshold):"}],"source_content_type":"text/x-python","patch_set":1,"id":"c5b1745d_370de502","line":142,"updated":"2021-03-25 15:53:35.000000000","message":"we might want to modify this condition to active+/active++ just like shrinking candidates, but for now we should leave it as is (minimum change to existing behaviour)","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"f84ce1154e384023699549345b68b558cee4f51c","unresolved":true,"context_lines":[{"line_number":139,"context_line":"    # First cut is simple: assume root container shard usage stats are good"},{"line_number":140,"context_line":"    # enough to make decision."},{"line_number":141,"context_line":"    if shard_ranges is None:"},{"line_number":142,"context_line":"        shard_ranges \u003d broker.get_shard_ranges(states\u003dShardRange.ACTIVE_STATES)"},{"line_number":143,"context_line":"    candidates \u003d []"},{"line_number":144,"context_line":"    for shard_range in shard_ranges:"},{"line_number":145,"context_line":"        if not is_sharding_candidate(shard_range, threshold):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3aa3d354_6c251ef0","line":142,"in_reply_to":"c5b1745d_370de502","updated":"2021-03-25 22:38:14.000000000","message":"Yeah, this is just a start. First phase I wanted to just keep everything as it is (except for Shrinking) so in essence for everything else ACTIVE has become ACTIVE_STATES. But haven\u0027t really had much time to really consider.","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5e5f4fe7084191a18a5b5c7ca718345e9a96ae6b","unresolved":true,"context_lines":[{"line_number":336,"context_line":"            # Update the acceptor container with its expanded bounds to prevent"},{"line_number":337,"context_line":"            # it treating objects cleaved from the donor as misplaced."},{"line_number":338,"context_line":"            acceptor.timestamp \u003d timestamp"},{"line_number":339,"context_line":"        if acceptor.update_state(ShardRange.ACTIVE_PLUS):"},{"line_number":340,"context_line":"            # Ensure acceptor state is ACTIVE (when acceptor is root)"},{"line_number":341,"context_line":"            acceptor.state_timestamp \u003d timestamp"},{"line_number":342,"context_line":"        acceptor_ranges.append(acceptor)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1d71ad16_2e1f274a","line":339,"updated":"2021-03-25 15:53:35.000000000","message":"curious about this change - but i guess we want the root to be shardable, so maybe it makes sense?","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"f84ce1154e384023699549345b68b558cee4f51c","unresolved":true,"context_lines":[{"line_number":336,"context_line":"            # Update the acceptor container with its expanded bounds to prevent"},{"line_number":337,"context_line":"            # it treating objects cleaved from the donor as misplaced."},{"line_number":338,"context_line":"            acceptor.timestamp \u003d timestamp"},{"line_number":339,"context_line":"        if acceptor.update_state(ShardRange.ACTIVE_PLUS):"},{"line_number":340,"context_line":"            # Ensure acceptor state is ACTIVE (when acceptor is root)"},{"line_number":341,"context_line":"            acceptor.state_timestamp \u003d timestamp"},{"line_number":342,"context_line":"        acceptor_ranges.append(acceptor)"}],"source_content_type":"text/x-python","patch_set":1,"id":"04311b3d_40c68a5c","line":339,"in_reply_to":"1d71ad16_2e1f274a","updated":"2021-03-25 22:38:14.000000000","message":"Yeah.. I wasn\u0027t sure here either to be honest. I picked ACTIVE_PLUS incase the acceptor wouldnt be picked. This is still early days 😊","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"e6742bf61a00e0eee6888b335e4a90d2825b3122","unresolved":true,"context_lines":[{"line_number":1650,"context_line":"            num_done \u003d sum([1 for ctx, _ in CleavingContext.load_all(broker)"},{"line_number":1651,"context_line":"                           if ctx.done()])"},{"line_number":1652,"context_line":"            active_state \u003d ShardRange.ACTIVE"},{"line_number":1653,"context_line":"            if num_done \u003e\u003d quorum_size(self.ring.replica_count):"},{"line_number":1654,"context_line":"                active_state \u003d ShardRange.ACTIVE_QUORUM"},{"line_number":1655,"context_line":"            elif num_done \u003e 1:"},{"line_number":1656,"context_line":"                active_state \u003d ShardRange.ACTIVE_PLUS"}],"source_content_type":"text/x-python","patch_set":1,"id":"56405242_4ffff0e4","line":1653,"updated":"2021-03-25 17:48:27.000000000","message":"Since this is \u003e\u003d in a 3-replica system it\u0027ll look a lot like \"num_done \u003e 1\" (i.e. 2)\n\nAl had described the final state as ALL replicas being done, but I\u0027m nervous about even writing down the *idea* that an \"active++\" state exists to mean \"everyone\" has done whatever - with handoffs I\u0027m almost positive I could get all the replicas in primary locations reporting \"yup, all done with everything *I* have\" while there\u0027s still some db out there trying to cleave","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"e65900680c156ab572c7f26fe892b8459b47560a","unresolved":true,"context_lines":[{"line_number":1650,"context_line":"            num_done \u003d sum([1 for ctx, _ in CleavingContext.load_all(broker)"},{"line_number":1651,"context_line":"                           if ctx.done()])"},{"line_number":1652,"context_line":"            active_state \u003d ShardRange.ACTIVE"},{"line_number":1653,"context_line":"            if num_done \u003e\u003d quorum_size(self.ring.replica_count):"},{"line_number":1654,"context_line":"                active_state \u003d ShardRange.ACTIVE_QUORUM"},{"line_number":1655,"context_line":"            elif num_done \u003e 1:"},{"line_number":1656,"context_line":"                active_state \u003d ShardRange.ACTIVE_PLUS"}],"source_content_type":"text/x-python","patch_set":1,"id":"eb933763_b5109add","line":1653,"in_reply_to":"56405242_4ffff0e4","updated":"2021-03-25 22:42:45.000000000","message":"Yeah, everything done would be awesome, but I think hard to determine. That\u0027s why I decided to go with quorum. We make other decisions on it.. and really we just want to be sure this active shard is cleaved enough that it could now be a candidate. On a 3 replica that\u0027s 2, but at least scales to bigger replica counts.","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"5e5f4fe7084191a18a5b5c7ca718345e9a96ae6b","unresolved":true,"context_lines":[{"line_number":1653,"context_line":"            if num_done \u003e\u003d quorum_size(self.ring.replica_count):"},{"line_number":1654,"context_line":"                active_state \u003d ShardRange.ACTIVE_QUORUM"},{"line_number":1655,"context_line":"            elif num_done \u003e 1:"},{"line_number":1656,"context_line":"                active_state \u003d ShardRange.ACTIVE_PLUS"},{"line_number":1657,"context_line":"            modified_shard_ranges \u003d broker.get_shard_ranges("},{"line_number":1658,"context_line":"                states\u003dShardRange.CLEAVED)"},{"line_number":1659,"context_line":"            for sr in modified_shard_ranges:"}],"source_content_type":"text/x-python","patch_set":1,"id":"4fb16e6b_77383a05","line":1656,"updated":"2021-03-25 15:53:35.000000000","message":"need to think more about this - but IIRC this happens once for each replica - we may want the replicas to check cleaving contexts repeatedly (in audit?) and progress the state as they can. Otherwise might all replicas execute this while they have just their own cleaving context being \u0027done\u0027?","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"f84ce1154e384023699549345b68b558cee4f51c","unresolved":true,"context_lines":[{"line_number":1653,"context_line":"            if num_done \u003e\u003d quorum_size(self.ring.replica_count):"},{"line_number":1654,"context_line":"                active_state \u003d ShardRange.ACTIVE_QUORUM"},{"line_number":1655,"context_line":"            elif num_done \u003e 1:"},{"line_number":1656,"context_line":"                active_state \u003d ShardRange.ACTIVE_PLUS"},{"line_number":1657,"context_line":"            modified_shard_ranges \u003d broker.get_shard_ranges("},{"line_number":1658,"context_line":"                states\u003dShardRange.CLEAVED)"},{"line_number":1659,"context_line":"            for sr in modified_shard_ranges:"}],"source_content_type":"text/x-python","patch_set":1,"id":"6e222bcf_162d03a9","line":1656,"in_reply_to":"4fb16e6b_77383a05","updated":"2021-03-25 22:38:14.000000000","message":"Yes! I was thinking about an audit over night. Because there is no garantee that we\u0027d ever get see more then 1 or even a quorum, becasue they\u0027ll complete themselves and then replicated the contexts around.\n\nThough might also add, if the shardrange is already ACTIVE then choose ACTIVE+ Because we know someones done in this case right. In otherwords don\u0027t just rely on cleave contexts. And means ACTIVE+ is a safety need that we know at least more then 1 has merged which might be good enough.","commit_id":"afe00449b78ede9ec3fc6d1b20087546bb97f875"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"10b5a415c777732a6072a00086657565290b48ab","unresolved":true,"context_lines":[{"line_number":1111,"context_line":"        if (own_shard_range.state in deletable_states and"},{"line_number":1112,"context_line":"                own_shard_range.deleted and"},{"line_number":1113,"context_line":"                own_shard_range.timestamp \u003c delete_age and"},{"line_number":1114,"context_line":"                broker.empty() and not CleavingContext.count(broker)):"},{"line_number":1115,"context_line":"            broker.delete_db(Timestamp.now().internal)"},{"line_number":1116,"context_line":"            self.logger.debug(\u0027Deleted shard container %s (%s)\u0027,"},{"line_number":1117,"context_line":"                              broker.db_file, quote(broker.path))"}],"source_content_type":"text/x-python","patch_set":4,"id":"d622c951_eee55626","line":1114,"updated":"2021-04-01 05:48:56.000000000","message":"Adding this so the sharded container cannot be deleted unless all the contexts have been cleaned up. This will be done, even if there are stale contexts in audit contexts. So contexts can\u0027t magically be cleaned out if something is delayed for some reason.","commit_id":"8284fc9716cb5187bbe8b699332d6c3f0a419e44"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a7b25e8395bcd98a11ea0897644be58f3a81f289","unresolved":true,"context_lines":[{"line_number":546,"context_line":"    @classmethod"},{"line_number":547,"context_line":"    def done_count(cls, broker):"},{"line_number":548,"context_line":"        return sum([1 for ctx, _ in cls.load_all(broker)"},{"line_number":549,"context_line":"                    if ctx.done()])"},{"line_number":550,"context_line":""},{"line_number":551,"context_line":"    @classmethod"},{"line_number":552,"context_line":"    def count(cls, broker):"}],"source_content_type":"text/x-python","patch_set":6,"id":"8724f0fc_1bf3ea9e","line":549,"updated":"2021-05-04 07:33:55.000000000","message":"There is only one usage of this now, so may not need it anymore.","commit_id":"f3aa2aeb19f8d259c26da0eebde1f28cb0c23f01"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a7b25e8395bcd98a11ea0897644be58f3a81f289","unresolved":true,"context_lines":[{"line_number":1807,"context_line":"                         if ctx.ranges_done \u003e\u003d local_context.ranges_done]"},{"line_number":1808,"context_line":"        if len(upto_contexts) \u003e\u003d quorum_size(self.ring.replica_count):"},{"line_number":1809,"context_line":"            return ShardRange.CLEAVED"},{"line_number":1810,"context_line":"        return ShardRange.CLEAVED_MINUS"},{"line_number":1811,"context_line":""},{"line_number":1812,"context_line":"    def _get_active_state_from_quorum(self, broker, current_states\u003dNone):"},{"line_number":1813,"context_line":"        local_context \u003d CleavingContext.load(broker)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f2dbe198_e139cc81","line":1810,"updated":"2021-05-04 07:33:55.000000000","message":"As this currently stands it means we wont ever move into the CLEAVED state until we have a qaurum at the same spot. And CLEAVED_MINUS isn\u0027t in the LIST_STATES so means we\u0027d be relying on the old shard for longer.. but should plug the hole.. maybe?","commit_id":"f3aa2aeb19f8d259c26da0eebde1f28cb0c23f01"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d02b847d08eda574c76ae62625d0eb1b03990468","unresolved":true,"context_lines":[{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"    def _get_active_state_from_quorum(self, broker):"},{"line_number":1799,"context_line":"        local_context \u003d CleavingContext.load(broker)"},{"line_number":1800,"context_line":"        if local_context.rows_cleaved \u003e self.shrink_size:"},{"line_number":1801,"context_line":"            return ShardRange.ACTIVE"},{"line_number":1802,"context_line":"        # this is a list of completed contexts rows_cleaved. We can use it"},{"line_number":1803,"context_line":"        # in the max, but also it\u0027s length will give us the total done we can"}],"source_content_type":"text/x-python","patch_set":11,"id":"0c7cc08e_8862264f","line":1800,"updated":"2021-05-06 23:54:10.000000000","message":"Not sure if this is the right number. Because it\u0027s context wide not just a single cleave.. but it could be a single cleave. I assume really fast ones are just a few objects so maybe the number (default 10% so shard_threshold) is big enough.\n\nThe other option is to not use a number at all and always fall back to ACTIVE_MINUS until there is a quorum. In which case the parent patch of this isn\u0027t required.","commit_id":"d0b40b35d6521e74b50e863a6cc5c3e0648c1de0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"064ce16f7f17881de9eae037402289e9bb0636ed","unresolved":true,"context_lines":[{"line_number":1797,"context_line":""},{"line_number":1798,"context_line":"    def _get_active_state_from_quorum(self, broker):"},{"line_number":1799,"context_line":"        local_context \u003d CleavingContext.load(broker)"},{"line_number":1800,"context_line":"        if local_context.rows_cleaved \u003e self.shrink_size:"},{"line_number":1801,"context_line":"            return ShardRange.ACTIVE"},{"line_number":1802,"context_line":"        # this is a list of completed contexts rows_cleaved. We can use it"},{"line_number":1803,"context_line":"        # in the max, but also it\u0027s length will give us the total done we can"}],"source_content_type":"text/x-python","patch_set":11,"id":"90d7dc47_e0b466e8","line":1800,"in_reply_to":"0c7cc08e_8862264f","updated":"2022-03-14 16:28:29.000000000","message":"Agree, this is probably not the right number - if the whole parent only cleaved shrink_size rows then there\u0027s almost certainly a brand new shard with less than shrink_size rows. Plus, if shrink_size is set low then \u0027fast handoff\u0027 cleave could satisfy this condition.","commit_id":"d0b40b35d6521e74b50e863a6cc5c3e0648c1de0"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"064ce16f7f17881de9eae037402289e9bb0636ed","unresolved":true,"context_lines":[{"line_number":1895,"context_line":"            if ctx.done()]"},{"line_number":1896,"context_line":"        if max(all_rows_cleaved or [0]) \u003e self.shrink_size:"},{"line_number":1897,"context_line":"            return ShardRange.ACTIVE"},{"line_number":1898,"context_line":"        if len(all_rows_cleaved) \u003e\u003d quorum_size(self.ring.replica_count):"},{"line_number":1899,"context_line":"            return ShardRange.ACTIVE"},{"line_number":1900,"context_line":""},{"line_number":1901,"context_line":"        return ShardRange.ACTIVATING"}],"source_content_type":"text/x-python","patch_set":14,"id":"16a87514_58f6e52a","line":1898,"updated":"2022-03-14 16:28:29.000000000","message":"doesn\u0027t this allow two \u0027fast handoffs\u0027 to create a quorum?","commit_id":"9b9c156d5a3372f4dc4827e677198eca36a54c35"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1b0990c3abb17924fec907e7387f2b0b0ed4bf0c","unresolved":true,"context_lines":[{"line_number":1895,"context_line":"            if ctx.done()]"},{"line_number":1896,"context_line":"        if max(all_rows_cleaved or [0]) \u003e self.shrink_size:"},{"line_number":1897,"context_line":"            return ShardRange.ACTIVE"},{"line_number":1898,"context_line":"        if len(all_rows_cleaved) \u003e\u003d quorum_size(self.ring.replica_count):"},{"line_number":1899,"context_line":"            return ShardRange.ACTIVE"},{"line_number":1900,"context_line":""},{"line_number":1901,"context_line":"        return ShardRange.ACTIVATING"}],"source_content_type":"text/x-python","patch_set":14,"id":"3ddcd395_49671b30","line":1898,"in_reply_to":"16a87514_58f6e52a","updated":"2022-03-15 05:04:05.000000000","message":"Yes it does.. this is my biggest worry. quorum is great.. unless something can reach it incorrectly.\n\nI guess the more replicas the less likely though :shrug:\n\nWe could have a configuration:\n  ALL: Where there needs to num-replicas CleavingContext dones. Although when taking handoffs into account we may need to not be a number of dones but rather only when all current primaries have cleaved. And use this to only to make progress slowly.\n  QUORUM: Only when we get a quorum CleavingContexts (this patches behaviour).\n  ALWAYS: Always move to ACTIVE and/or CLEAVED. Todays behaviour.\n\nALL - would require being able to identify the primary CleavingContexts. Oh or would we only see current primaries? because a handoff wouldn\u0027t replicate it\u0027s cleavecontext to primaries as it\u0027ll only shard to shards.\n\nSo how many fast handoffs could we expect to have? if handoffs CleaveContexts dont propergate, they can\u0027t mark things as ACTIVE (unless there the container ring has a replica count of 2 I guess), so post patch, can it only happen if there is a small primary. Would we ever get 2 of those?","commit_id":"9b9c156d5a3372f4dc4827e677198eca36a54c35"}]}
