Problem/Motivation
I don't have great steps to reproduce this yet, but it's something like the following:
- update module can end up with items in the fetchTasks key/value store without equivalent queue items
- because there are items in fetchTasks, no new queue items get created for them, even when manually checking for updates.
- because no queue items are created or processed, the stale fetchqueue items never get cleared out
Therefore projects can get stuck with the 'no releases available' error and there's no way to reset things except to clear the k/v out manually.
In my case, the fetchtasks items were old enough that they were also different project versions (found this when updating to 8.4.0), so comparing the stored and current $project data and updating an item anyway if they didn't match broke the loop. This doesn't really feel like the right fix though but I'm uploading the patch for reference. However ensuring we always use the latest project info data seems like a small improvement too.
More appropriate might be to switch from key/value to keyvalueexpire, so that fetch tasks get discarded after an hour or day, which would be plenty of time for the queue to have finished processing.
Marking this major because though I wasn't able to find any other reports, it can mean update status not reporting updates at all.
Proposed resolution
Use temp key/value store, or fix #1548286: API for handling unique queue items properly and use that resultant API.