- Feb 01, 2017
-
-
Richard Macklin authored
-
- Jan 30, 2017
-
-
Stan Hu authored
As described in #27443, the `project_authorizations` table is often used to retrieve all team members of this project. This can lead to a number of slow queries impacting load times. This MR adds an index for just `project_id`. Closes #27443
-
- Jan 25, 2017
-
-
Yorick Peterse authored
There were two cases that could be problematic: 1. Because sometimes AuthorizedProjectsWorker would be scheduled in a transaction it was possible for a job to run/complete before a COMMIT; resulting in it either producing an error, or producing no new data. 2. When scheduling jobs the code would not wait until completion. This could lead to a user creating a project and then immediately trying to push to it. Usually this will work fine, but given enough load it might take a few seconds before a user has access. The first one is problematic, the second one is mostly just annoying (but annoying enough to warrant a solution). This commit changes two things to deal with this: 1. Sidekiq scheduling now takes places after a COMMIT, this is ensured by scheduling using Rails' after_commit hook instead of doing so in an arbitrary method. 2. When scheduling jobs the calling thread now waits for all jobs to complete. Solution 2 requires tracking of job completions. Sidekiq provides a way to find a job by its ID, but this involves scanning over the entire queue; something that is very in-efficient for large queues. As such a more efficient solution is necessary. There are two main Gems that can do this in a more efficient manner: * sidekiq-status * sidekiq_status No, this is not a joke. Both Gems do a similar thing (but slightly different), and the only difference in their name is a dash vs an underscore. Both Gems however provide far more than just checking if a job has been completed, and both have their problems. sidekiq-status does not appear to be actively maintained, with the last release being in 2015. It also has some issues during testing as API calls are not stubbed in any way. sidekiq_status on the other hand does not appear to be very popular, and introduces a similar amount of code. Because of this I opted to write a simple home grown solution. After all, all we need is storing a job ID somewhere so we can efficiently look it up; we don't need extra web UIs (as provided by sidekiq-status) or complex APIs to update progress, etc. This is where Gitlab::SidekiqStatus comes in handy. This namespace contains some code used for tracking, removing, and looking up job IDs; all without having to scan over an entire queue. Data is removed explicitly, but also expires automatically just in case. Using this API we can now schedule jobs in a fork-join like manner: we schedule the jobs in Sidekiq, process them in parallel, then wait for completion. By using Sidekiq we can leverage all the benefits such as being able to scale across multiple cores and hosts, retrying failed jobs, etc. The one downside is that we need to make sure we can deal with unexpected increases in job processing timings. To deal with this the class Gitlab::JobWaiter (used for waiting for jobs to complete) will only wait a number of seconds (30 by default). Once this timeout is reached it will simply return. For GitLab.com almost all AuthorizedProjectWorker jobs complete in seconds, only very rarely do we spike to job timings of around a minute. These in turn seem to be the result of external factors (e.g. deploys), in which case a user is most likely not able to use the system anyway. In short, this new solution should ensure that jobs are processed properly and that in almost all cases a user has access to their resources whenever they need to have access.
-
- Jan 24, 2017
-
-
Rémy Coutable authored
Signed-off-by:
Rémy Coutable <remy@rymai.me>
-
Z.J. van de Weg authored
-
Zeger-Jan van de Weg authored
-
Z.J. van de Weg authored
There have been several bugs in the project deletion service and worker. Resulting in projects stuck in pending delete state, which limits users to create projects with the same name, keeps stale records in the database, and all kinds of other trouble. This post deployment migration requeues all these projects for deletion, in the hope that most of these could be removed by the updated code.
-
- Jan 23, 2017
-
-
Nick Thomas authored
-
- Jan 21, 2017
-
-
Kamil Trzciński authored
-
Kamil Trzciński authored
-
- Jan 19, 2017
-
-
Rémy Coutable authored
The time tracking feature was backported from EE to CE, thus the CE migrations should be uniquely named and should skip the actual migration content if the table/columns already exist (that means that the EE migrations were already performed). Signed-off-by:
Rémy Coutable <remy@rymai.me>
-
- Jan 16, 2017
-
-
James Lopez authored
-
James Lopez authored
-
James Lopez authored
-
James Lopez authored
-
James Lopez authored
-
James Lopez authored
-
James Lopez authored
-
James Lopez authored
- Fixed typo - Fixed migration when there are no projects and path is nil - Added path rollback that was missing if there was a SQL error
-
- Jan 15, 2017
-
-
Ruben Alexis authored
-
- Jan 13, 2017
-
-
James Lopez authored
-
- Jan 12, 2017
-
-
This MR enables rendering of PlantUML diagrams in Asciidoc documents. To add a PlantUML diagram all we need is to include a plantuml block like: ``` [plantuml, id="myDiagram", width="100px", height="100px"] -- bob -> alice : ping alice -> bob : pong -- ``` The plantuml block is substituted by an HTML img element with *src* pointing to an external PlantUML server. This MR also add a PlantUML integration section to the Administrator -> Settings page to configure the PlantUML rendering service and to enable/disable it. Closes: #17603
-
- Jan 11, 2017
-
-
Yorick Peterse authored
This ensures that the project_authorizations rows exist for all users for which this data has not yet been populated. Fixes #26194
-
- Jan 08, 2017
-
-
Vincent Wong authored
Addresses: Issue #13810 1. Adds a last_used_at attribute to the Key table/model 2. Update a key's last_used_at whenever it gets used 3. Display how long ago an ssh key was last used
-
Yorick Peterse authored
This column used to be a 32 bits integer, allowing for only a maximum of 2 147 483 647 rows. Given enough users one can hit this limit pretty quickly, as was the case for GitLab.com. Changing this type to bigint (= 64 bits) would give us more space, but we'd eventually hit the same limit given enough users and projects. A much more sustainable solution is to simply drop the "id" column. There were only 2 lines of code depending on this column being present, and neither truly required it to be present. Instead the code now uses the "project_id" column combined with the "user_id" column. This means that instead of something like this: DELETE FROM project_authorizations WHERE user_id = X AND id = Y; We now run the following when removing rows: DELETE FROM project_authorizations WHERE user_id = X AND project_id = Y; Since both user_id and project_id are indexed this should not slow down the DELETE query. This commit also removes the "dependent: destroy" clause from the "project_authorizations" relation in the User and Project models. Keeping this prevents Rails from being able to remove data as it relies on an "id" column being present. Since the "project_authorizations" table has proper foreign keys set up (with cascading removals) we don't need to depend on any Rails logic.
-
- Jan 06, 2017
-
-
Dmytro Zaporozhets (DZ) authored
Signed-off-by:
Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-
- Dec 28, 2016
-
-
Revert MattermostNotificationService and SlackNotificationService to MattermostService and SlackService
-
- Dec 27, 2016
-
-
Z.J. van de Weg authored
On GitLab.com this migration could take about 3 minutes. Disabling the statement we know we have enough time to complete this. Fixes #25976
-
- Dec 26, 2016
-
-
Dmytro Zaporozhets (DZ) authored
Signed-off-by:
Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-
- Dec 24, 2016
-
-
This return is redundant as the query now uses "WHERE EXISTS (...)" to filter out projects without a namespace.
-
This ensures threads don't re-use the same connection object, and use fewer queries to perform the work.
-
Dmytro Zaporozhets (DZ) authored
We cant have project with name 'project' or 'tree' anymore. This merge request containts a migration that will find and rename all projects using reserved names by adding N digit to the end of the name. Signed-off-by:
Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-
- Dec 22, 2016
-
-
Ruben Alexis authored
-
- Dec 21, 2016
-
-
Markus Koller authored
This adds counters for build artifacts and LFS objects, and moves the preexisting repository_size and commit_count from the projects table into a new project_statistics table. The counters are displayed in the administration area for projects and groups, and also available through the API for admins (on */all) and normal users (on */owned) The statistics are updated through ProjectCacheWorker, which can now do more granular updates with the new :statistics argument.
-
Z.J. van de Weg authored
This adds a migration to remove unused services, where the properties are empty. As the properties are empty, those do not contain any settings or other information. Fixes #25727
-
Dmytro Zaporozhets (DZ) authored
Signed-off-by:
Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
-
- Dec 20, 2016
-
-
Douglas Barbosa Alexandre authored
-
- Dec 16, 2016
-
-
Filipa Lacerda authored
-
Timothy Andrew authored
If we leave this as a regular migration, we could have the following flow: 1. Application knows nothing about scopes. 2. First migration runs, all existing personal access tokens have `api` scope 3. Application still knows nothing about scopes. 4. Second migration runs, all tokens created after this point have no scope 5. Application still knows nothing about scopes. 6. Tokens created at this time _should have the API scope, but instead have no scope_ 7. Application code is reloaded, application knows about scopes 8. Tokens created after this point only have no scope if the user deliberately chooses to have no scopes. Point #6 is the problem here. To avoid this, we move the second migration to a "post" migration, which runs after the application code is deployed/reloaded.
-