check mincopies is satisfied even when numcopies is known to be satisfied
I had been assuming that numcopies would be a larger or at most equal to mincopies, so no need to check both. But users get confused and use configs that don't really make sense, so make sure to handle mincopies being larger than numcopies. Also add something to the mincopies man page to discourage this misconfiguration. This commit was sponsored by Denis Dzyubenko on Patreon.
This commit is contained in:
parent
1c05194430
commit
a166d2520b
6 changed files with 48 additions and 10 deletions
|
@ -69,7 +69,7 @@ handleDropsFrom locs rs reason fromhere key afile si preverified runner = do
|
|||
else do
|
||||
l <- mapM getFileNumMinCopies fs
|
||||
return (maximum $ map fst l, maximum $ map snd l)
|
||||
return (NumCopies (length have), numcopies, mincopies, S.fromList untrusted)
|
||||
return (length have, numcopies, mincopies, S.fromList untrusted)
|
||||
|
||||
{- Check that we have enough copies still to drop the content.
|
||||
- When the remote being dropped from is untrusted, it was not
|
||||
|
@ -80,13 +80,14 @@ handleDropsFrom locs rs reason fromhere key afile si preverified runner = do
|
|||
- avoids doing extra work to do that check later in cases where it
|
||||
- will surely fail.
|
||||
-}
|
||||
checkcopies (have, numcopies, _mincopies, _untrusted) Nothing = have > numcopies
|
||||
checkcopies (have, numcopies, _mincopies, untrusted) (Just u)
|
||||
| S.member u untrusted = have >= numcopies
|
||||
| otherwise = have > numcopies
|
||||
checkcopies (have, numcopies, mincopies, _untrusted) Nothing =
|
||||
NumCopies have > numcopies && MinCopies have > mincopies
|
||||
checkcopies (have, numcopies, mincopies, untrusted) (Just u)
|
||||
| S.member u untrusted = NumCopies have >= numcopies && MinCopies have >= mincopies
|
||||
| otherwise = NumCopies have > numcopies && MinCopies have > mincopies
|
||||
|
||||
decrcopies (have, numcopies, mincopies, untrusted) Nothing =
|
||||
(NumCopies (fromNumCopies have - 1), numcopies, mincopies, untrusted)
|
||||
(have - 1, numcopies, mincopies, untrusted)
|
||||
decrcopies v@(_have, _numcopies, _mincopies, untrusted) (Just u)
|
||||
| S.member u untrusted = v
|
||||
| otherwise = decrcopies v Nothing
|
||||
|
@ -122,7 +123,7 @@ handleDropsFrom locs rs reason fromhere key afile si preverified runner = do
|
|||
AssociatedFile Nothing -> serializeKey key
|
||||
AssociatedFile (Just af) -> fromRawFilePath af
|
||||
, "(from " ++ maybe "here" show u ++ ")"
|
||||
, "(copies now " ++ show (fromNumCopies have - 1) ++ ")"
|
||||
, "(copies now " ++ show (have - 1) ++ ")"
|
||||
, ": " ++ reason
|
||||
]
|
||||
return $ decrcopies n u
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue