summaryrefslogtreecommitdiff
path: root/lib/api/v3
Commit message (Collapse)AuthorAgeFilesLines
* Track and act upon the number of executed queriesquery-countsYorick Peterse2018-02-015-0/+16
| | | | | | | | | | | This ensures that we have more visibility in the number of SQL queries that are executed in web requests. The current threshold is hardcoded to 100 as we will rarely (maybe once or twice) change it. In production and development we use Sentry if enabled, in the test environment we raise an error. This feature is also only enabled in production/staging when running on GitLab.com as it's not very useful to other users.
* Enable RuboCop Style/RegexpLiteralTakuya Noguchi2018-02-012-5/+5
|
* Remove N+1 queries with /projects/:project_id/{access_requests,members} API ↵sh-fix-project-members-api-perfStan Hu2018-01-301-7/+8
| | | | | | | | | | | endpoints We can simplify the code quite a bit and improve performance by using grape-entity merge fields: https://github.com/ruby-grape/grape-entity/tree/v0.6.0#merge-fields Relates to #42030
* Use limit for search count queriessearch-100Jan Provaznik2018-01-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | Search query is especially slow if a user searches a generic string which matches many records, in such case search can take tens of seconds or time out. To speed up the search query, we search only for first 1000 records, if there is >1000 matching records we just display "1000+" instead of precise total count supposing that with such amount the exact count is not so important for the user. Because for issues even limited search was not fast enough, 2-phase approach is used for issues: first we use simpler/faster query to get all public issues, if this exceeds the limit, we just return the limit. If the amount of matching results is lower than limit, we re-run more complex search query (which includes also confidential issues). Re-running the complex query should be fast enough in such case because the amount of matching issues is lower than limit. Because exact total_count is now limited, this patch also switches to to "prev/next" pagination. Related #40540
* Fix error on empty query for Members APIMark Fletcher2018-01-211-1/+1
|
* Merge branch 'sh-migrate-can-push-to-deploy-keys-projects-10-3' into ↵Douwe Maan2018-01-161-13/+33
| | | | | | | | | | | | 'security-10-3' [10.3] Migrate `can_push` column from `keys` to `deploy_keys_project` See merge request gitlab/gitlabhq!2276 (cherry picked from commit f6ca52d31bac350a23938e0aebf717c767b4710c) 1f2bd3c0 Backport to 10.3
* Merge branch ↵Stan Hu2018-01-162-5/+2
| | | | | | | | | | | | 'security-10-3-do-not-expose-passwords-or-tokens-in-service-integrations-api' into 'security-10-3' Filter out sensitive fields from the project services API See merge request gitlab/gitlabhq!2281 (cherry picked from commit 476f2576444632f2a9a61b4cead9c1077f2c81d7) 2bcbbda0 Filter out sensitive fields from the project services API
* Use preload instead of includes to avoid joinsbuilds-api-nplusoneMatija Čupić2018-01-151-1/+1
|
* Eager load user, runner, pipeline and its creatorMatija Čupić2018-01-141-1/+3
|
* Fix N+1 in v3 builds APIMatija Čupić2018-01-131-2/+1
| | | | | | The N+1 issue was caused by loading the job_artifacts_archive for each job (build) individually. Including that in the builds AssociationRelation fixed the issue.
* Adds Rubocop rule for line break around conditionals🙈 jacopo beschi 🙉2018-01-116-0/+7
|
* Merge branch 'remove-soft-removals' into 'master'Douwe Maan2018-01-111-1/+1
|\ | | | | | | | | | | | | Remove soft removals related code Closes #37447 See merge request gitlab-org/gitlab-ce!15789
| * Remove soft removals related codeYorick Peterse2018-01-081-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This removes all usage of soft removals except for the "pending delete" system implemented for projects. This in turn simplifies all the query plans of the models that used soft removals. Since we don't really use soft removals for anything useful there's no point in keeping it around. This _does_ mean that hard removals of issues (which only admins can do if I'm not mistaken) can influence the "iid" values, but that code is broken to begin with. More on this (and how to fix it) can be found in https://gitlab.com/gitlab-org/gitlab-ce/issues/31114. Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/37447
* | Add option to disable commit stats to commit APIFrancisco Javier López2018-01-091-1/+2
|/
* EE-BACKPORT group boardsFelipe Artur2018-01-041-1/+1
|
* Only include the user's ID in the time_spent command's update hashRobert Speicher2017-12-191-2/+2
| | | | | | | | | Previously, this would include the entire User record in the update hash, which was rendered in the response using `to_json`, erroneously exposing every attribute of that record, including their (now removed) private token. Now we only include the user ID, and perform the lookup on-demand.
* Allow password authentication to be disabled entirelyMarkus Koller2017-11-232-5/+7
|
* Adds Rubocop rule for line break after guard clauseJacopo2017-11-163-0/+5
| | | | Adds a rubocop rule (with autocorrect) to ensure line break after guard clauses.
* Merge branch 'fix/sm/31771-do-not-allow-jobs-to-be-erased-new' into 'master'Kamil Trzciński2017-11-141-1/+1
|\ | | | | | | | | | | | | Do not allow jobs to be erased Closes #31771 See merge request gitlab-org/gitlab-ce!15216
| * Merge branch 'master' into fix/sm/31771-do-not-allow-jobs-to-be-erased-newShinya Maeda2017-11-071-2/+4
| |\
| * | Add doc. Fix spec. Add erase_build in protected_ref ruleShinya Maeda2017-11-071-1/+0
| | |
| * | Fix spec. Revert update check.Shinya Maeda2017-11-061-0/+1
| | |
| * | Do not allow jobs to be erasedShinya Maeda2017-11-061-1/+1
| | |
* | | Use Commit#notes and Note.for_commit_id when possible to make sure we use ↵dm-notes-for-commit-idDouwe Maan2017-11-081-1/+1
| |/ |/| | | | | all the indexes available to us
* | Improve performance of the /projects/:id/repository/branches API endpointRémy Coutable2017-11-061-2/+4
|/ | | | | | Mitigate a N+1 requests to Gitaly problem. Still one left. Signed-off-by: Rémy Coutable <remy@rymai.me>
* Merge branch 'add-packagist-project-service' into 'master'Kamil Trzciński2017-10-311-0/+20
|\ | | | | | | | | Add Packagist project service See merge request gitlab-org/gitlab-ce!14493
| * Add Packagist project serviceMatt Coleman2017-10-131-0/+20
| |
* | Merge branch 'sha-handling' into 'master'Douwe Maan2017-10-163-10/+10
|\ \ | | | | | | | | | | | | | | | | | | Adds requirements that supports anything in sha params Closes #26561 and #2709 See merge request gitlab-org/gitlab-ce!14462
| * | Adds requirements that supports anything in sha paramsGuilherme Vieira2017-10-123-10/+10
| | |
* | | Move line code generation into Gitlab::Gitconflict-resolution-refactorAlejandro Rodríguez2017-10-121-1/+1
| | | | | | | | | | | | Having a distinct class just for that was a bit overkill
* | | Create a Gitlab::Git submodule for conlict-related filesAlejandro Rodríguez2017-10-121-1/+1
| | | | | | | | | | | | Rename classes to (hopefully) clearer names while we're doing that.
* | | Move Gitlab::Diff::LineCode to module Gitlab::GitAlejandro Rodríguez2017-10-121-1/+1
| |/ |/|
* | Remove 'Repo' prefix from API entitesVitaliy @blackst0ne Klachkov2017-10-057-24/+24
|/
* Merge branch '23079-remove-default-scope-in-sortable' into 'master'Douwe Maan2017-09-073-2/+3
|\ | | | | | | | | | | | | Removes default scope from sortable Closes #23079 See merge request !13558
| * Removes default scope from sortable23079-remove-default-scope-in-sortableTiago Botelho2017-09-073-2/+3
| |
* | Merge branch 'events-migration-cleanup' into 'master'Sean McGivern2017-09-071-1/+1
|\ \ | | | | | | | | | | | | | | | | | | Finish migration to the new events setup Closes #37241 See merge request !13932
| * | Finish migration to the new events setupevents-migration-cleanupYorick Peterse2017-09-061-1/+1
| |/ | | | | | | | | | | | | | | | | | | | | | | | | This finishes the procedure for migrating events from the old format into the new format. Code no longer uses the old setup and the database tables used during the migration process are swapped, with the old table being dropped. While the database migration can be reversed this will 1) take a lot of time as data has to be coped around 2) won't restore data in the "events.data" column as we have no way of restoring this. Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/37241
* | change collapse to resolve and comments to discussionsAshley Dumaine2017-09-062-3/+3
| |
* | Add functionality to collapse outdated diff comments regardless of ↵Ashley Dumaine2017-09-062-3/+5
|/ | | | discussion resolution
* Use pipeline.trigger_requests.lastfix/sm/35650-remove-createtriggerrequestservice-and-forbid-to-persist-variables-on-ci-triggerrequestShinya Maeda2017-09-051-1/+1
|
* Fix trigger_request.variablesShinya Maeda2017-09-041-4/+2
|
* Fix specShinya Maeda2017-09-041-2/+3
|
* Revert autheticate! in Trigger APIShinya Maeda2017-09-041-4/+4
|
* Remove CreateTriggerRequestService and forbit to save variables on ↵Shinya Maeda2017-09-041-12/+19
| | | | Ci::TriggerRequest
* Upgrade grape to 1.0Zeger-Jan van de Weg2017-08-162-4/+4
| | | | | Main feature was the deprication of the Hashie stuff, so the access by calling keys as method is gone now.
* Merge branch 'rs-more-public-send-whitelists' into 'master'Rémy Coutable2017-08-161-3/+3
|\ | | | | | | | | Whitelist or fix additional `Gitlab/PublicSend` cop violations See merge request !13467
| * Whitelist or fix additional `Gitlab/PublicSend` cop violationsrs-more-public-send-whitelistsRobert Speicher2017-08-141-3/+3
| | | | | | | | | | An upcoming update to rubocop-gitlab-security added additional violations.
* | Cache the number of forks of a projectforks-count-cacheYorick Peterse2017-08-141-0/+2
|/ | | | | | | | | | | The number of forks of a project doesn't change very frequently and running a COUNT(*) every time this information is requested can be quite expensive. We also end up running such a COUNT(*) query at least twice on the homepage of a project. By caching this data and refreshing it when necessary we can reduce project homepage loading times by around 60 milliseconds (based on the timings of https://gitlab.com/gitlab-org/gitlab-ce).
* Migrate events into a new formatYorick Peterse2017-08-101-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit migrates events data in such a way that push events are stored much more efficiently. This is done by creating a shadow table called "events_for_migration", and a table called "push_event_payloads" which is used for storing push data of push events. The background migration in this commit will copy events from the "events" table into the "events_for_migration" table, push events in will also have a row created in "push_event_payloads". This approach allows us to reclaim space in the next release by simply swapping the "events" and "events_for_migration" tables, then dropping the old events (now "events_for_migration") table. The new table structure is also optimised for storage space, and does not include the unused "title" column nor the "data" column (since this data is moved to "push_event_payloads"). == Newly Created Events Newly created events are inserted into both "events" and "events_for_migration", both using the exact same primary key value. The table "push_event_payloads" in turn has a foreign key to the _shadow_ table. This removes the need for recreating and validating the foreign key after swapping the tables. Since the shadow table also has a foreign key to "projects.id" we also don't have to worry about orphaned rows. This approach however does require some additional storage as we're duplicating a portion of the events data for at least 1 release. The exact amount is hard to estimate, but for GitLab.com this is expected to be between 10 and 20 GB at most. The background migration in this commit deliberately does _not_ update the "events" table as doing so would put a lot of pressure on PostgreSQL's auto vacuuming system. == Supporting Both Old And New Events Application code has also been adjusted to support push events using both the old and new data formats. This is done by creating a PushEvent class which extends the regular Event class. Using Rails' Single Table Inheritance system we can ensure the right class is used for the right data, which in this case is based on the value of `events.action`. To support displaying old and new data at the same time the PushEvent class re-defines a few methods of the Event class, falling back to their original implementations for push events in the old format. Once all existing events have been migrated the various push event related methods can be removed from the Event model, and the calls to `super` can be removed from the methods in the PushEvent model. The UI and event atom feed have also been slightly changed to better handle this new setup, fortunately only a few changes were necessary to make this work. == API Changes The API only displays push data of events in the new format. Supporting both formats in the API is a bit more difficult compared to the UI. Since the old push data was not really well documented (apart from one example that used an incorrect "action" nmae) I decided that supporting both was not worth the effort, especially since events will be migrated in a few days _and_ new events are created in the correct format.
* Enable the Layout/SpaceBeforeBlockBraces coprc/enable-the-Layout/SpaceBeforeBlockBraces-copRémy Coutable2017-08-091-1/+1
| | | | Signed-off-by: Rémy Coutable <remy@rymai.me>