#117 Greenwave times out for large bodhi update
Closed: Fixed 5 years ago Opened 6 years ago by ralph.

See this bodhi update: https://bodhi.fedoraproject.org/updates/FEDORA-2018-5a6cc3f4a2

Bodhi fails to get a decision from greenwave due to timeout. Here is a curl command that can duplicate the query:

curl 'https://greenwave-web-greenwave.app.os.fedoraproject.org/api/v1.0/decision' -H 'Origin: https://bodhi.fedoraproject.org' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9' -H 'User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36' -H 'Content-Type: application/json' -H 'Accept: */*' -H 'Connection: keep-alive' --data-binary '{"product_version":"fedora-27","decision_context":"bodhi_update_push_stable","subject":[{"item":"akonadi-calendar-tools-17.12.1-1.fc27","type":"koji_build"},{"item":"akonadiconsole-17.12.1-1.fc27","type":"koji_build"},{"item":"akonadi-import-wizard-17.12.1-1.fc27","type":"koji_build"},{"item":"akregator-17.12.1-1.fc27","type":"koji_build"},{"item":"grantlee-editor-17.12.1-1.fc27","type":"koji_build"},{"item":"kaddressbook-17.12.1-1.fc27","type":"koji_build"},{"item":"kalarm-17.12.1-1.fc27","type":"koji_build"},{"item":"kdepim-addons-17.12.1-2.fc27","type":"koji_build"},{"item":"kdepim-apps-libs-17.12.1-1.fc27","type":"koji_build"},{"item":"kdepim-runtime-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-akonadi-calendar-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-akonadi-contacts-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-akonadi-mime-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-akonadi-notes-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-akonadi-search-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-akonadi-server-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-calendarsupport-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-eventviews-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-grantleetheme-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-incidenceeditor-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kalarmcal-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kblog-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kcalendarcore-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kcalendarutils-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kcontacts-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kdav-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kholidays-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kidentitymanagement-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kimap-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kldap-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kmailtransport-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kmbox-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kmime-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kontactinterface-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-kpimtextedit-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-ksmtp-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-ktnef-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-libgravatar-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-libkdepim-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-libkleo-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-libksieve-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-mailcommon-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-mailimporter-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-messagelib-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-pimcommon-17.12.1-1.fc27","type":"koji_build"},{"item":"kf5-syndication-17.12.1-1.fc27","type":"koji_build"},{"item":"kleopatra-17.12.1-1.fc27","type":"koji_build"},{"item":"kmail-17.12.1-1.fc27","type":"koji_build"},{"item":"kmail-account-wizard-17.12.1-1.fc27","type":"koji_build"},{"item":"knotes-17.12.1-1.fc27","type":"koji_build"},{"item":"kontact-17.12.1-1.fc27","type":"koji_build"},{"item":"korganizer-17.12.1-1.fc27","type":"koji_build"},{"item":"libkgapi-17.12.1-1.fc27","type":"koji_build"},{"item":"mbox-importer-17.12.1-1.fc27","type":"koji_build"},{"item":"pim-data-exporter-17.12.1-1.fc27","type":"koji_build"},{"item":"pim-sieve-editor-17.12.1-1.fc27","type":"koji_build"},{"original_spec_nvr":"akonadi-calendar-tools-17.12.1-1.fc27"},{"original_spec_nvr":"akonadiconsole-17.12.1-1.fc27"},{"original_spec_nvr":"akonadi-import-wizard-17.12.1-1.fc27"},{"original_spec_nvr":"akregator-17.12.1-1.fc27"},{"original_spec_nvr":"grantlee-editor-17.12.1-1.fc27"},{"original_spec_nvr":"kaddressbook-17.12.1-1.fc27"},{"original_spec_nvr":"kalarm-17.12.1-1.fc27"},{"original_spec_nvr":"kdepim-addons-17.12.1-2.fc27"},{"original_spec_nvr":"kdepim-apps-libs-17.12.1-1.fc27"},{"original_spec_nvr":"kdepim-runtime-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-akonadi-calendar-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-akonadi-contacts-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-akonadi-mime-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-akonadi-notes-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-akonadi-search-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-akonadi-server-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-calendarsupport-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-eventviews-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-grantleetheme-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-incidenceeditor-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kalarmcal-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kblog-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kcalendarcore-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kcalendarutils-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kcontacts-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kdav-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kholidays-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kidentitymanagement-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kimap-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kldap-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kmailtransport-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kmbox-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kmime-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kontactinterface-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-kpimtextedit-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-ksmtp-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-ktnef-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-libgravatar-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-libkdepim-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-libkleo-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-libksieve-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-mailcommon-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-mailimporter-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-messagelib-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-pimcommon-17.12.1-1.fc27"},{"original_spec_nvr":"kf5-syndication-17.12.1-1.fc27"},{"original_spec_nvr":"kleopatra-17.12.1-1.fc27"},{"original_spec_nvr":"kmail-17.12.1-1.fc27"},{"original_spec_nvr":"kmail-account-wizard-17.12.1-1.fc27"},{"original_spec_nvr":"knotes-17.12.1-1.fc27"},{"original_spec_nvr":"kontact-17.12.1-1.fc27"},{"original_spec_nvr":"korganizer-17.12.1-1.fc27"},{"original_spec_nvr":"libkgapi-17.12.1-1.fc27"},{"original_spec_nvr":"mbox-importer-17.12.1-1.fc27"},{"original_spec_nvr":"pim-data-exporter-17.12.1-1.fc27"},{"original_spec_nvr":"pim-sieve-editor-17.12.1-1.fc27"},{"item":"FEDORA-2018-5a6cc3f4a2","type":"bodhi_update"}]}' --compressed

One idea, we could parallelize the for item in subjects: loop in api_v1.py.

For 52 builds, we're asking a lot of that serial loop.

Metadata Update from @dcallagh:
- Issue assigned to dcallagh

6 years ago

Yeah doing 52 HTTP requests to resultsdb and waiverdb in series seems likely to be the culprit.

asyncio.gather would be helpful here... Time to port Greenwave to asyncio? :-P

We can replace the N waiverdb calls with 1. But we can't do that with resultsdb. Its API does not let us filter by multiple sets of key-value pairs. So we could reduce the 2×N serialised HTTP requests down to 1×N but I don't expect that will be enough to avoid this problem.

We can replace the N waiverdb calls with 1. But we can't do that with resultsdb. Its API does not let us filter by multiple sets of key-value pairs. So we could reduce the 2×N serialised HTTP requests down to 1×N but I don't expect that will be enough to avoid this problem.

Perhaps you could submit a patch to ResultsDB to allow this? They've been receptive to adding API features in the past.

Good idea. It would certainly be nicer to make 1 resultsdb request instead of smashing it with 52 requests in parallel.

Metadata Update from @lholecek:
- Issue assigned to lholecek (was: dcallagh)

5 years ago

The performance was improved in PR#231.

Metadata Update from @lholecek:
- Issue close_status updated to: Fixed
- Issue set to the milestone: 0.9
- Issue status updated to: Closed (was: Open)
- Issue tagged with: enhancement

5 years ago

Login to comment on this ticket.

Metadata