Skip to content
Snippets Groups Projects
Commit 3f08dc74 authored by Jan Provaznik's avatar Jan Provaznik
Browse files

Merge branch '11-4-stable-prepare-rc2' into 11-4-stable-ee-prepare-rc2

parents e55ef834 f08bb39d
No related merge requests found
......@@ -67,7 +67,6 @@ class ApplicationController < ActionController::Base
end
rescue_from Gitlab::Git::Storage::Inaccessible, GRPC::Unavailable, Gitlab::Git::CommandError do |exception|
Raven.capture_exception(exception) if sentry_enabled?
log_exception(exception)
headers['Retry-After'] = exception.retry_after if exception.respond_to?(:retry_after)
......
......@@ -6,14 +6,13 @@ class PruneOldEventsWorker
# rubocop: disable CodeReuse/ActiveRecord
def perform
# Contribution calendar shows maximum 12 months of events.
# Double nested query is used because MySQL doesn't allow DELETE subqueries
# on the same table.
# Contribution calendar shows maximum 12 months of events, we retain 2 years for data integrity.
# Double nested query is used because MySQL doesn't allow DELETE subqueries on the same table.
Event.unscoped.where(
'(id IN (SELECT id FROM (?) ids_to_remove))',
Event.unscoped.where(
'created_at < ?',
(12.months + 1.day).ago)
(2.years + 1.day).ago)
.select(:id)
.limit(10_000))
.delete_all
......
---
title: Increased retained event data by extending events pruner timeframe to 2 years
merge_request: 22145
author:
type: changed
......@@ -44,7 +44,7 @@ YYYY-MM-DD
### Event Time Period Limit
GitLab removes events older than 1 year from the events table for performance reasons. The range of 1 year was chosen because user contribution calendars only show contributions of the past year.
GitLab removes events older than 2 years from the events table for performance reasons.
## List currently authenticated user's events
......
......@@ -4,23 +4,29 @@
describe '#perform' do
let(:user) { create(:user) }
let!(:expired_event) { create(:event, :closed, author: user, created_at: 13.months.ago) }
let!(:not_expired_event) { create(:event, :closed, author: user, created_at: 1.day.ago) }
let!(:exactly_12_months_event) { create(:event, :closed, author: user, created_at: 12.months.ago) }
let!(:expired_event) { create(:event, :closed, author: user, created_at: 25.months.ago) }
let!(:not_expired_1_day_event) { create(:event, :closed, author: user, created_at: 1.day.ago) }
let!(:not_expired_13_month_event) { create(:event, :closed, author: user, created_at: 13.months.ago) }
let!(:not_expired_2_years_event) { create(:event, :closed, author: user, created_at: 2.years.ago) }
it 'prunes events older than 12 months' do
it 'prunes events older than 2 years' do
expect { subject.perform }.to change { Event.count }.by(-1)
expect(Event.find_by(id: expired_event.id)).to be_nil
end
it 'leaves fresh events' do
subject.perform
expect(not_expired_event.reload).to be_present
expect(not_expired_1_day_event.reload).to be_present
end
it 'leaves events from exactly 12 months ago' do
it 'leaves events from 13 months ago' do
subject.perform
expect(exactly_12_months_event).to be_present
expect(not_expired_13_month_event.reload).to be_present
end
it 'leaves events from 2 years ago' do
subject.perform
expect(not_expired_2_years_event).to be_present
end
end
end
......@@ -61,3 +61,6 @@ fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
......@@ -20,7 +20,7 @@ coverage
# nyc test coverage
.nyc_output
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
......
......@@ -64,6 +64,9 @@ acs-*.bib
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
......@@ -205,6 +208,9 @@ pythontex-files-*/
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
......
......@@ -4,6 +4,7 @@
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
......@@ -76,6 +77,7 @@ StyleCopReport.xml
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
......@@ -290,8 +292,8 @@ paket-files/
.idea/
*.sln.iml
# CodeRush
.cr/
# CodeRush personal settings
.cr/personal
# Python Tools for Visual Studio (PTVS)
__pycache__/
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment