storj/satellite
paul cannon 1b8bd6c082 satellite/repair: unify repair logic
The repair checker and repair worker both need to determine which pieces
are healthy, which are retrievable, and which should be replaced, but
they have been doing it in different ways in different code, which has
been the cause of bugs. The same term could have very similar but subtly
different meanings between the two, causing much confusion.

With this change, the piece- and node-classification logic is
consolidated into one place within the satellite/repair package, so that
both subsystems can use it. This ought to make decision-making code more
concise and more readable.

The consolidated classification logic has been expanded to create more
sets, so that the decision-making code does not need to do as much
precalculation. It should now be clearer in comments and code that a
piece can belong to multiple sets arbitrarily (except where the
definition of the sets makes this logically impossible), and what the
precise meaning of each set is. These sets include Missing, Suspended,
Clumped, OutOfPlacement, InExcludedCountry, ForcingRepair,
UnhealthyRetrievable, Unhealthy, Retrievable, and Healthy.

Some other side effects of this change:

* CreatePutRepairOrderLimits no longer needs to special-case excluded
  countries; it can just create as many order limits as requested (by
  way of len(newNodes)).
* The repair checker will now queue a segment for repair when there are
  any pieces out of placement. The code calls this "forcing a repair".
* The checker.ReliabilityCache is now accessed by way of a GetNodes()
  function similar to the one on the overlay. The classification methods
  like MissingPieces(), OutOfPlacementPieces(), and
  PiecesNodesLastNetsInOrder() are removed in favor of the
  classification logic in satellite/repair/classification.go. This
  means the reliability cache no longer needs access to the placement
  rules or excluded countries list.

Change-Id: I105109fb94ee126952f07d747c6e11131164fadb
2023-09-25 09:42:08 -05:00
..
abtesting console/abTesting: add support for AB testing 2022-10-27 10:57:12 +00:00
accounting satellite/accounting/live: ensure we don't panic when we get nil 2023-08-10 19:41:57 +03:00
admin satellite/admin: Add back-office UI sources 2023-09-22 18:02:55 +02:00
analytics {satellite/console, web/satellite}: send analytics if invitee signs up 2023-09-19 14:50:44 +00:00
attribution satellite/{db, admin}: added endpoints to update user's and project's user_agent 2023-06-16 19:41:05 +00:00
audit satellite/repair: unify repair logic 2023-09-25 09:42:08 -05:00
buckets satellite/buckets: handle bucket exists better 2023-08-23 14:40:31 +00:00
compensation payments: don't redefine compensation rates twice 2023-06-10 12:40:43 +00:00
console satellite/console: add more cross-user api tests 2023-09-19 16:50:31 +00:00
contact go.mod: bump lang to 1.19 and common 2023-08-10 18:41:15 +03:00
gc satellite/metainfo: remove ServerSideCopyDuplicateMetadata 2023-08-08 12:15:10 +00:00
geoip satellite/geoip: exclude nodes with represented_contry from geofencing 2023-08-14 12:36:33 +00:00
gracefulexit satellite: don't use fmt.Print in tests 2023-09-12 15:11:02 +03:00
internalpb satellite/metabase: adjust BeginObjectNextVersion to use pending_objects 2023-08-02 14:42:26 +00:00
mailservice satellite/consoleweb: fix flaky TestAuth tests 2022-08-04 19:06:07 +00:00
metabase satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
metainfo satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
metrics satellite/metabase/rangedloop: move Segment definition 2023-05-16 12:37:17 +00:00
nodeapiversion satellite/nodeapiversion: new table for tracking node api usage 2020-07-09 15:02:25 +00:00
nodeevents satellite/satellitedb/dbx: document node tables 2023-02-24 14:05:55 +00:00
nodeselection satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
nodestats payments: don't redefine compensation rates twice 2023-06-10 12:40:43 +00:00
oidc satellite/console: prefix oidc paths with /api/v0/ 2023-09-11 18:12:39 +00:00
orders satellite/repair: unify repair logic 2023-09-25 09:42:08 -05:00
overlay satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
payments satellite/console: add more cross-user api tests 2023-09-19 16:50:31 +00:00
repair satellite/repair: unify repair logic 2023-09-25 09:42:08 -05:00
reputation satellite/audit: remove pieces when audits fail 2023-06-22 14:19:00 +00:00
revocation satellite/satellitedb: move tests to their domains 2021-02-19 17:29:15 +02:00
satellitedb satellite/satellitedb: repairqueue.Select uses placement constraints 2023-09-25 10:14:25 +00:00
snopayouts all: fix error naming 2021-04-29 15:38:21 +03:00
admin.go satellite/payments: Remove expired package credits 2023-05-22 11:58:37 +00:00
api_test.go satellite/api: configuration option to set additional node tag authorities 2023-08-03 08:34:02 +00:00
api.go satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
auditor.go satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
configlock_test.go all: fix deprecated ioutil commands 2022-10-11 15:27:29 +00:00
core.go satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
gc-bf_test.go satellite/gc/bloomfilter: remove segments loop parts 2023-05-15 11:46:26 +00:00
gc-bf.go satellite/metabase: remove segmentsloop package 2023-05-18 19:08:29 +00:00
gc.go gc: remove segment loop dependency 2023-02-03 10:31:16 +00:00
peer.go satellite/api: configuration option to set additional node tag authorities 2023-08-03 08:34:02 +00:00
rangedloop.go satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
repairer.go satellite/overlay: fix placement selection config parsing 2023-09-21 14:31:41 +00:00
ui.go satellite/console: optional separate web app server 2023-07-11 12:17:35 -04:00