Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Boxiang Sun
gitlab-ce
Commits
81f7adf0
Commit
81f7adf0
authored
Sep 19, 2019
by
GitLab Bot
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add latest changes from gitlab-org/gitlab@master
parent
383daa12
Changes
33
Hide whitespace changes
Inline
Side-by-side
Showing
33 changed files
with
360 additions
and
138 deletions
+360
-138
.gitlab/ci/frontend.gitlab-ci.yml
.gitlab/ci/frontend.gitlab-ci.yml
+1
-1
.gitlab/ci/global.gitlab-ci.yml
.gitlab/ci/global.gitlab-ci.yml
+1
-0
.gitlab/ci/qa.gitlab-ci.yml
.gitlab/ci/qa.gitlab-ci.yml
+1
-1
CHANGELOG-EE.md
CHANGELOG-EE.md
+4
-0
CHANGELOG.md
CHANGELOG.md
+0
-4
README.md
README.md
+2
-2
app/assets/javascripts/jobs/components/log/collapsible_section.vue
...s/javascripts/jobs/components/log/collapsible_section.vue
+55
-0
app/assets/javascripts/jobs/components/log/log.vue
app/assets/javascripts/jobs/components/log/log.vue
+9
-20
app/assets/stylesheets/framework.scss
app/assets/stylesheets/framework.scss
+1
-0
app/views/projects/settings/ci_cd/_autodevops_form.html.haml
app/views/projects/settings/ci_cd/_autodevops_form.html.haml
+2
-2
changelogs/unreleased/zj-timeouts-gitaly-rpcs.yml
changelogs/unreleased/zj-timeouts-gitaly-rpcs.yml
+5
-0
db/post_migrate/20190918104222_schedule_productivity_analytics_backfill.rb
...0190918104222_schedule_productivity_analytics_backfill.rb
+1
-17
doc/user/packages/npm_registry/index.md
doc/user/packages/npm_registry/index.md
+48
-0
lib/gitlab/gitaly_client.rb
lib/gitlab/gitaly_client.rb
+10
-15
lib/gitlab/gitaly_client/cleanup_service.rb
lib/gitlab/gitaly_client/cleanup_service.rb
+1
-1
lib/gitlab/gitaly_client/commit_service.rb
lib/gitlab/gitaly_client/commit_service.rb
+2
-2
lib/gitlab/gitaly_client/conflicts_service.rb
lib/gitlab/gitaly_client/conflicts_service.rb
+1
-1
lib/gitlab/gitaly_client/namespace_service.rb
lib/gitlab/gitaly_client/namespace_service.rb
+1
-1
lib/gitlab/gitaly_client/object_pool_service.rb
lib/gitlab/gitaly_client/object_pool_service.rb
+6
-3
lib/gitlab/gitaly_client/operation_service.rb
lib/gitlab/gitaly_client/operation_service.rb
+24
-13
lib/gitlab/gitaly_client/ref_service.rb
lib/gitlab/gitaly_client/ref_service.rb
+5
-5
lib/gitlab/gitaly_client/remote_service.rb
lib/gitlab/gitaly_client/remote_service.rb
+4
-5
lib/gitlab/gitaly_client/repository_service.rb
lib/gitlab/gitaly_client/repository_service.rb
+12
-11
lib/gitlab/gitaly_client/storage_service.rb
lib/gitlab/gitaly_client/storage_service.rb
+2
-2
lib/gitlab/gitaly_client/wiki_service.rb
lib/gitlab/gitaly_client/wiki_service.rb
+3
-3
lib/gitlab/sidekiq_daemon/memory_killer.rb
lib/gitlab/sidekiq_daemon/memory_killer.rb
+9
-6
lib/gitlab/sidekiq_daemon/monitor.rb
lib/gitlab/sidekiq_daemon/monitor.rb
+1
-1
qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
...a/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
+1
-0
spec/frontend/jobs/components/log/collapsible_section_spec.js
.../frontend/jobs/components/log/collapsible_section_spec.js
+60
-0
spec/frontend/jobs/components/log/mock_data.js
spec/frontend/jobs/components/log/mock_data.js
+70
-0
spec/lib/gitlab/gitaly_client_spec.rb
spec/lib/gitlab/gitaly_client_spec.rb
+5
-5
spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb
spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb
+10
-16
spec/workers/object_pool/destroy_worker_spec.rb
spec/workers/object_pool/destroy_worker_spec.rb
+3
-1
No files found.
.gitlab/ci/frontend.gitlab-ci.yml
View file @
81f7adf0
...
...
@@ -47,7 +47,7 @@
-
rm -f /etc/apt/sources.list.d/google*.list
# We don't need to update Chrome here
only
:
variables
:
-
$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =
= "gitlab-org"
-
$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =
~ /^gitlab-org($|\/)/
# Matches the gitlab-org group and its subgroups
-
$CI_SERVER_HOST == "dev.gitlab.org"
tags
:
-
gitlab-org
...
...
.gitlab/ci/global.gitlab-ci.yml
View file @
81f7adf0
...
...
@@ -33,6 +33,7 @@
-
master
-
/^[\d-]+-stable(-ee)?$/
-
/^\d+-\d+-auto-deploy-\d+$/
-
/^security\//
-
merge_requests
-
tags
...
...
.gitlab/ci/qa.gitlab-ci.yml
View file @
81f7adf0
...
...
@@ -12,7 +12,7 @@
-
./scripts/trigger-build omnibus
only
:
variables
:
-
$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =
= "gitlab-org"
-
$CI_SERVER_HOST == "gitlab.com" && $CI_PROJECT_NAMESPACE =
~ /^gitlab-org($|\/)/
# Matches the gitlab-org group or its subgroups
package-and-qa-manual
:
extends
:
...
...
CHANGELOG-EE.md
View file @
81f7adf0
...
...
@@ -252,6 +252,10 @@ Please view this file on the master branch, on stable branches it's out of date.
-
Fix alignment of activity dropdown in epic tabs; add counter to discussion tab.
## 12.1.10
-
No changes.
## 12.1.5
-
No changes.
...
...
CHANGELOG.md
View file @
81f7adf0
...
...
@@ -320,10 +320,6 @@ entry.
-
Update Packer.gitlab-ci.yml to use latest image. (Kelly Hair)
## 12.1.11
-
No changes.
## 12.1.10
-
No changes.
...
...
README.md
View file @
81f7adf0
...
...
@@ -2,9 +2,9 @@
## Canonical source
The canonical source of GitLab
Community Edition is
[
hosted on GitLab.com
](
https://gitlab.com/gitlab-org/gitlab-ce/
)
.
The canonical source of GitLab
where development takes place is
[
hosted on GitLab.com
](
https://gitlab.com/gitlab-org/gitlab
)
.
The source of GitLab Enterprise Edition is
[
hosted on GitLab.com
](
https://gitlab.com/gitlab-org/gitlab-ee
)
.
A FOSS source of GitLab is hosted on a
[
mirrored, read-only project on GitLab.com
](
https://gitlab.com/gitlab-org/gitlab-foss/
)
.
## Free trial
...
...
app/assets/javascripts/jobs/components/log/collapsible_section.vue
0 → 100644
View file @
81f7adf0
<
script
>
import
LogLine
from
'
./line.vue
'
;
import
LogLineHeader
from
'
./line_header.vue
'
;
export
default
{
name
:
'
CollpasibleLogSection
'
,
components
:
{
LogLine
,
LogLineHeader
,
},
props
:
{
section
:
{
type
:
Object
,
required
:
true
,
},
traceEndpoint
:
{
type
:
String
,
required
:
true
,
},
},
computed
:
{
badgeDuration
()
{
return
this
.
section
.
line
&&
this
.
section
.
line
.
section_duration
;
},
},
methods
:
{
handleOnClickCollapsibleLine
(
section
)
{
this
.
$emit
(
'
onClickCollapsibleLine
'
,
section
);
},
},
};
</
script
>
<
template
>
<div>
<log-line-header
:line=
"section.line"
:duration=
"badgeDuration"
:path=
"traceEndpoint"
:is-closed=
"section.isClosed"
@
toggleLine=
"handleOnClickCollapsibleLine(section)"
/>
<template
v-if=
"!section.isClosed"
>
<template
v-for=
"line in section.lines"
>
<collpasible-log-section
v-if=
"line.isHeader"
:key=
"`collapsible-nested-$
{line.offset}`"
:section="line"
:trace-endpoint="traceEndpoint"
@toggleLine="handleOnClickCollapsibleLine"
/>
<log-line
v-else
:key=
"line.offset"
:line=
"line"
:path=
"traceEndpoint"
/>
</
template
>
</template>
</div>
</template>
app/assets/javascripts/jobs/components/log/log.vue
View file @
81f7adf0
<
script
>
import
{
mapState
,
mapActions
}
from
'
vuex
'
;
import
CollpasibleLogSection
from
'
./collapsible_section.vue
'
;
import
LogLine
from
'
./line.vue
'
;
import
LogLineHeader
from
'
./line_header.vue
'
;
export
default
{
components
:
{
CollpasibleLogSection
,
LogLine
,
LogLineHeader
,
},
computed
:
{
...
mapState
([
'
traceEndpoint
'
,
'
trace
'
,
'
isTraceComplete
'
]),
...
...
@@ -22,24 +22,13 @@ export default {
<
template
>
<code
class=
"job-log d-block"
>
<template
v-for=
"(section, index) in trace"
>
<template
v-if=
"section.isHeader"
>
<log-line-header
:key=
"`collapsible-$
{index}`"
:line="section.line"
:duration="section.section_duration"
:path="traceEndpoint"
:is-closed="section.isClosed"
@toggleLine="handleOnClickCollapsibleLine(section)"
/>
<template
v-if=
"!section.isClosed"
>
<log-line
v-for=
"line in section.lines"
:key=
"line.offset"
:line=
"line"
:path=
"traceEndpoint"
/>
</
template
>
</template>
<collpasible-log-section
v-if=
"section.isHeader"
:key=
"`collapsible-$
{index}`"
:section="section"
:trace-endpoint="traceEndpoint"
@onClickCollapsibleLine="handleOnClickCollapsibleLine"
/>
<log-line
v-else
:key=
"section.offset"
:line=
"section"
:path=
"traceEndpoint"
/>
</
template
>
...
...
app/assets/stylesheets/framework.scss
View file @
81f7adf0
...
...
@@ -28,6 +28,7 @@
@import
'framework/issue_box'
;
@import
'framework/lists'
;
@import
'framework/logo'
;
@import
'framework/job_log'
;
@import
'framework/markdown_area'
;
@import
'framework/media_object'
;
@import
'framework/modal'
;
...
...
app/views/projects/settings/ci_cd/_autodevops_form.html.haml
View file @
81f7adf0
...
...
@@ -46,12 +46,12 @@
=
form
.
radio_button
:deploy_strategy
,
'timed_incremental'
,
class:
'form-check-input'
=
form
.
label
:deploy_strategy_timed_incremental
,
class:
'form-check-label'
do
=
s_
(
'CICD|Continuous deployment to production using timed incremental rollout'
)
=
link_to
icon
(
'question-circle'
),
help_page_path
(
'topics/autodevops/index.md'
,
anchor:
'timed-incremental-rollout-to-production'
),
target:
'_blank'
=
link_to
icon
(
'question-circle'
),
help_page_path
(
'topics/autodevops/index.md'
,
anchor:
'timed-incremental-rollout-to-production
-premium
'
),
target:
'_blank'
.form-check
=
form
.
radio_button
:deploy_strategy
,
'manual'
,
class:
'form-check-input'
=
form
.
label
:deploy_strategy_manual
,
class:
'form-check-label'
do
=
s_
(
'CICD|Automatic deployment to staging, manual deployment to production'
)
=
link_to
icon
(
'question-circle'
),
help_page_path
(
'topics/autodevops/index.md'
,
anchor:
'incremental-rollout-to-production'
),
target:
'_blank'
=
link_to
icon
(
'question-circle'
),
help_page_path
(
'topics/autodevops/index.md'
,
anchor:
'incremental-rollout-to-production
-premium
'
),
target:
'_blank'
=
f
.
submit
_
(
'Save changes'
),
class:
"btn btn-success prepend-top-15"
,
data:
{
qa_selector:
'save_changes_button'
}
changelogs/unreleased/zj-timeouts-gitaly-rpcs.yml
0 → 100644
View file @
81f7adf0
---
title
:
Add timeouts for each RPC call
merge_request
:
31766
author
:
type
:
changed
db/post_migrate/20190918104222_schedule_productivity_analytics_backfill.rb
View file @
81f7adf0
...
...
@@ -5,24 +5,8 @@ class ScheduleProductivityAnalyticsBackfill < ActiveRecord::Migration[5.2]
DOWNTIME
=
false
BATCH_SIZE
=
10_000
INTERVAL
=
3
.
minutes
MIGRATION
=
'Gitlab::BackgroundMigration::RecalculateProductivityAnalytics'
.
freeze
disable_ddl_transaction!
def
up
return
unless
Gitlab
.
ee?
metrics_model
=
Class
.
new
(
ActiveRecord
::
Base
)
do
self
.
table_name
=
'merge_request_metrics'
include
::
EachBatch
end
scope
=
metrics_model
.
where
(
"merged_at >= ?"
,
3
.
months
.
ago
)
queue_background_migration_jobs_by_range_at_intervals
(
scope
,
MIGRATION
,
INTERVAL
,
batch_size:
BATCH_SIZE
)
# no-op since the scheduling times out on GitLab.com
end
def
down
...
...
doc/user/packages/npm_registry/index.md
View file @
81f7adf0
...
...
@@ -84,6 +84,28 @@ NOTE: **Note:**
If you encounter an error message with
[
Yarn
](
https://yarnpkg.com/en/
)
, see the
[
troubleshooting section
](
#troubleshooting
)
.
### Using variables to avoid hard-coding auth token values
To avoid hard-coding the
`authToken`
value, you may use a variables in its place.
In your
`.npmrc`
file, you would add:
```
ini
@foo:
registry
=
https://gitlab.com/api/v4/packages/npm/
//gitlab.com/api/v4/packages/npm/:
_authToken
=
${NPM_TOKEN}
//gitlab.com/api/v4/projects/<your_project_id>/packages/npm/:
_authToken
=
${NPM_TOKEN}
```
Then, you could run
`npm publish`
either locally or via GitLab CI/CD:
-
**Locally:**
Export
`NPM_TOKEN`
before publishing:
```
sh
NPM_TOKEN
=
<your_token> npm publish
```
-
**GitLab CI/CD:**
Set an
`NPM_TOKEN`
[
variable
](
../../../ci/variables/README.md
)
under your project's
**Settings > CI/CD > Variables**
.
## Uploading packages
Before you will be able to upload a package, you need to specify the registry
...
...
@@ -145,3 +167,29 @@ with your with your OAuth or personal access token):
```
text
//gitlab.com/api/v4/projects/:_authToken=<your_oauth_token>
```
### `npm publish` targets default NPM registry (`registry.npmjs.org`)
Ensure that your package scope is set consistently in your
`package.json`
and
`.npmrc`
files.
For example, if your project name in GitLab is
`foo/my-package`
, then your
`package.json`
file
should look like:
```
json
{
"name"
:
"@foo/my-package"
,
"version"
:
"1.0.0"
,
"description"
:
"Example package for GitLab NPM registry"
,
"publishConfig"
:
{
"@foo:registry"
:
"https://gitlab.com/api/v4/projects/<your_project_id>/packages/npm/"
}
}
```
And the
`.npmrc`
file should look like:
```
ini
//gitlab.com/api/v4/projects/<your_project_id>/packages/npm/:
_authToken
=
<your_oauth_token>
//gitlab.com/api/v4/packages/npm/:
_authToken
=
<your_oauth_token>
@foo:
registry
=
https://gitlab.com/api/v4/packages/npm/
```
lib/gitlab/gitaly_client.rb
View file @
81f7adf0
...
...
@@ -142,13 +142,13 @@ module Gitlab
# kwargs.merge(deadline: Time.now + 10)
# end
#
def
self
.
call
(
storage
,
service
,
rpc
,
request
,
remote_storage:
nil
,
timeout:
nil
)
def
self
.
call
(
storage
,
service
,
rpc
,
request
,
remote_storage:
nil
,
timeout:
default_timeout
)
start
=
Gitlab
::
Metrics
::
System
.
monotonic_time
request_hash
=
request
.
is_a?
(
Google
::
Protobuf
::
MessageExts
)
?
request
.
to_h
:
{}
enforce_gitaly_request_limits
(
:call
)
kwargs
=
request_kwargs
(
storage
,
timeout
,
remote_storage:
remote_storage
)
kwargs
=
request_kwargs
(
storage
,
timeout
:
timeout
.
to_f
,
remote_storage:
remote_storage
)
kwargs
=
yield
(
kwargs
)
if
block_given?
stub
(
service
,
storage
).
__send__
(
rpc
,
request
,
kwargs
)
# rubocop:disable GitlabSecurity/PublicSend
...
...
@@ -200,7 +200,7 @@ module Gitlab
end
private_class_method
:authorization_token
def
self
.
request_kwargs
(
storage
,
timeout
,
remote_storage:
nil
)
def
self
.
request_kwargs
(
storage
,
timeout
:
,
remote_storage:
nil
)
metadata
=
{
'authorization'
=>
"Bearer
#{
authorization_token
(
storage
)
}
"
,
'client_name'
=>
CLIENT_NAME
...
...
@@ -216,14 +216,7 @@ module Gitlab
result
=
{
metadata:
metadata
}
# nil timeout indicates that we should use the default
timeout
=
default_timeout
if
timeout
.
nil?
return
result
unless
timeout
>
0
deadline
=
real_time
+
timeout
result
[
:deadline
]
=
deadline
result
[
:deadline
]
=
real_time
+
timeout
if
timeout
>
0
result
end
...
...
@@ -357,8 +350,6 @@ module Gitlab
# The default timeout on all Gitaly calls
def
self
.
default_timeout
return
no_timeout
if
Sidekiq
.
server?
timeout
(
:gitaly_timeout_default
)
end
...
...
@@ -370,8 +361,12 @@ module Gitlab
timeout
(
:gitaly_timeout_medium
)
end
def
self
.
no_timeout
0
def
self
.
long_timeout
if
Sidekiq
.
server?
6
.
hours
else
55
.
seconds
end
end
def
self
.
storage_metadata_file_path
(
storage
)
...
...
lib/gitlab/gitaly_client/cleanup_service.rb
View file @
81f7adf0
...
...
@@ -18,7 +18,7 @@ module Gitlab
:cleanup_service
,
:apply_bfg_object_map_stream
,
build_object_map_enum
(
io
),
timeout:
GitalyClient
.
no
_timeout
timeout:
GitalyClient
.
long
_timeout
)
responses
.
each
(
&
blk
)
...
...
lib/gitlab/gitaly_client/commit_service.rb
View file @
81f7adf0
...
...
@@ -254,7 +254,7 @@ module Gitlab
def
languages
(
ref
=
nil
)
request
=
Gitaly
::
CommitLanguagesRequest
.
new
(
repository:
@gitaly_repo
,
revision:
ref
||
''
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:commit_service
,
:commit_languages
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:commit_service
,
:commit_languages
,
request
,
timeout:
GitalyClient
.
long_timeout
)
response
.
languages
.
map
{
|
l
|
{
value:
l
.
share
.
round
(
2
),
label:
l
.
name
,
color:
l
.
color
,
highlight:
l
.
color
}
}
end
...
...
@@ -360,7 +360,7 @@ module Gitlab
def
extract_signature
(
commit_id
)
request
=
Gitaly
::
ExtractCommitSignatureRequest
.
new
(
repository:
@gitaly_repo
,
commit_id:
commit_id
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:commit_service
,
:extract_commit_signature
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:commit_service
,
:extract_commit_signature
,
request
,
timeout:
GitalyClient
.
fast_timeout
)
signature
=
+
''
.
b
signed_text
=
+
''
.
b
...
...
lib/gitlab/gitaly_client/conflicts_service.rb
View file @
81f7adf0
...
...
@@ -20,7 +20,7 @@ module Gitlab
our_commit_oid:
@our_commit_oid
,
their_commit_oid:
@their_commit_oid
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:conflicts_service
,
:list_conflict_files
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:conflicts_service
,
:list_conflict_files
,
request
,
timeout:
GitalyClient
.
long_timeout
)
GitalyClient
::
ConflictFilesStitcher
.
new
(
response
)
end
...
...
lib/gitlab/gitaly_client/namespace_service.rb
View file @
81f7adf0
...
...
@@ -22,7 +22,7 @@ module Gitlab
def
remove
(
name
)
request
=
Gitaly
::
RemoveNamespaceRequest
.
new
(
storage_name:
@storage
,
name:
name
)
gitaly_client_call
(
:remove_namespace
,
request
,
timeout:
nil
)
gitaly_client_call
(
:remove_namespace
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
def
rename
(
from
,
to
)
...
...
lib/gitlab/gitaly_client/object_pool_service.rb
View file @
81f7adf0
...
...
@@ -15,13 +15,15 @@ module Gitlab
object_pool:
object_pool
,
origin:
repository
.
gitaly_repository
)
GitalyClient
.
call
(
storage
,
:object_pool_service
,
:create_object_pool
,
request
)
GitalyClient
.
call
(
storage
,
:object_pool_service
,
:create_object_pool
,
request
,
timeout:
GitalyClient
.
medium_timeout
)
end
def
delete
request
=
Gitaly
::
DeleteObjectPoolRequest
.
new
(
object_pool:
object_pool
)
GitalyClient
.
call
(
storage
,
:object_pool_service
,
:delete_object_pool
,
request
)
GitalyClient
.
call
(
storage
,
:object_pool_service
,
:delete_object_pool
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
def
link_repository
(
repository
)
...
...
@@ -40,7 +42,8 @@ module Gitlab
origin:
repository
.
gitaly_repository
)
GitalyClient
.
call
(
storage
,
:object_pool_service
,
:fetch_into_object_pool
,
request
)
GitalyClient
.
call
(
storage
,
:object_pool_service
,
:fetch_into_object_pool
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
end
end
...
...
lib/gitlab/gitaly_client/operation_service.rb
View file @
81f7adf0
...
...
@@ -19,7 +19,7 @@ module Gitlab
user:
Gitlab
::
Git
::
User
.
from_gitlab
(
user
).
to_gitaly
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_delete_tag
,
request
,
timeout:
GitalyClient
.
medium
_timeout
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_delete_tag
,
request
,
timeout:
GitalyClient
.
long
_timeout
)
if
pre_receive_error
=
response
.
pre_receive_error
.
presence
raise
Gitlab
::
Git
::
PreReceiveError
,
pre_receive_error
...
...
@@ -35,7 +35,7 @@ module Gitlab
message:
encode_binary
(
message
.
to_s
)
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_create_tag
,
request
,
timeout:
GitalyClient
.
medium
_timeout
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_create_tag
,
request
,
timeout:
GitalyClient
.
long
_timeout
)
if
pre_receive_error
=
response
.
pre_receive_error
.
presence
raise
Gitlab
::
Git
::
PreReceiveError
,
pre_receive_error
elsif
response
.
exists
...
...
@@ -55,7 +55,7 @@ module Gitlab
start_point:
encode_binary
(
start_point
)
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_create_branch
,
reques
t
)
:user_create_branch
,
request
,
timeout:
GitalyClient
.
long_timeou
t
)
if
response
.
pre_receive_error
.
present?
raise
Gitlab
::
Git
::
PreReceiveError
.
new
(
response
.
pre_receive_error
)
...
...
@@ -79,7 +79,8 @@ module Gitlab
oldrev:
encode_binary
(
oldrev
)
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_update_branch
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_update_branch
,
request
,
timeout:
GitalyClient
.
long_timeout
)
if
pre_receive_error
=
response
.
pre_receive_error
.
presence
raise
Gitlab
::
Git
::
PreReceiveError
,
pre_receive_error
...
...
@@ -93,7 +94,8 @@ module Gitlab
user:
Gitlab
::
Git
::
User
.
from_gitlab
(
user
).
to_gitaly
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_delete_branch
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_delete_branch
,
request
,
timeout:
GitalyClient
.
long_timeout
)
if
pre_receive_error
=
response
.
pre_receive_error
.
presence
raise
Gitlab
::
Git
::
PreReceiveError
,
pre_receive_error
...
...
@@ -111,7 +113,8 @@ module Gitlab
first_parent_ref:
encode_binary
(
first_parent_ref
)
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_merge_to_ref
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_merge_to_ref
,
request
,
timeout:
GitalyClient
.
long_timeout
)
if
pre_receive_error
=
response
.
pre_receive_error
.
presence
raise
Gitlab
::
Git
::
PreReceiveError
,
pre_receive_error
...
...
@@ -126,7 +129,8 @@ module Gitlab
@repository
.
storage
,
:operation_service
,
:user_merge_branch
,
request_enum
.
each
request_enum
.
each
,
timeout:
GitalyClient
.
long_timeout
)
request_enum
.
push
(
...
...
@@ -170,7 +174,8 @@ module Gitlab
@repository
.
storage
,
:operation_service
,
:user_ff_branch
,
request
request
,
timeout:
GitalyClient
.
long_timeout
)
Gitlab
::
Git
::
OperationService
::
BranchUpdate
.
from_gitaly
(
response
.
branch_update
)
...
...
@@ -215,6 +220,7 @@ module Gitlab
:operation_service
,
:user_rebase
,
request
,
timeout:
GitalyClient
.
long_timeout
,
remote_storage:
remote_repository
.
storage
)
...
...
@@ -236,6 +242,7 @@ module Gitlab
:operation_service
,
:user_rebase_confirmable
,
request_enum
.
each
,
timeout:
GitalyClient
.
long_timeout
,
remote_storage:
remote_repository
.
storage
)
...
...
@@ -286,7 +293,8 @@ module Gitlab
@repository
.
storage
,
:operation_service
,
:user_squash
,
request
request
,
timeout:
GitalyClient
.
long_timeout
)
if
response
.
git_error
.
presence
...
...
@@ -310,7 +318,8 @@ module Gitlab
@repository
.
storage
,
:operation_service
,
:user_update_submodule
,
request
request
,
timeout:
GitalyClient
.
long_timeout
)
if
response
.
pre_receive_error
.
present?
...
...
@@ -352,7 +361,8 @@ module Gitlab
end
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_commit_files
,
req_enum
,
remote_storage:
start_repository
.
storage
)
:user_commit_files
,
req_enum
,
timeout:
GitalyClient
.
long_timeout
,
remote_storage:
start_repository
.
storage
)
if
(
pre_receive_error
=
response
.
pre_receive_error
.
presence
)
raise
Gitlab
::
Git
::
PreReceiveError
,
pre_receive_error
...
...
@@ -384,7 +394,8 @@ module Gitlab
end
end
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_apply_patch
,
chunks
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:operation_service
,
:user_apply_patch
,
chunks
,
timeout:
GitalyClient
.
long_timeout
)
Gitlab
::
Git
::
OperationService
::
BranchUpdate
.
from_gitaly
(
response
.
branch_update
)
end
...
...
@@ -424,7 +435,7 @@ module Gitlab
:"user_
#{
rpc
}
"
,
request
,
remote_storage:
start_repository
.
storage
,
timeout:
GitalyClient
.
medium
_timeout
timeout:
GitalyClient
.
long
_timeout
)
handle_cherry_pick_or_revert_response
(
response
)
...
...
lib/gitlab/gitaly_client/ref_service.rb
View file @
81f7adf0
...
...
@@ -21,7 +21,7 @@ module Gitlab
def
remote_branches
(
remote_name
)
request
=
Gitaly
::
FindAllRemoteBranchesRequest
.
new
(
repository:
@gitaly_repo
,
remote_name:
remote_name
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:find_all_remote_branches
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:find_all_remote_branches
,
request
,
timeout:
GitalyClient
.
medium_timeout
)
consume_find_all_remote_branches_response
(
remote_name
,
response
)
end
...
...
@@ -158,7 +158,7 @@ module Gitlab
start_point:
encode_binary
(
start_point
)
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:create_branch
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:create_branch
,
request
,
timeout:
GitalyClient
.
medium_timeout
)
case
response
.
status
when
:OK
...
...
@@ -182,7 +182,7 @@ module Gitlab
name:
encode_binary
(
branch_name
)
)
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:delete_branch
,
request
)
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:delete_branch
,
request
,
timeout:
GitalyClient
.
medium_timeout
)
end
def
delete_refs
(
refs:
[],
except_with_prefixes:
[])
...
...
@@ -192,7 +192,7 @@ module Gitlab
except_with_prefix:
except_with_prefixes
.
map
{
|
r
|
encode_binary
(
r
)
}
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:delete_refs
,
request
,
timeout:
GitalyClient
.
default
_timeout
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:ref_service
,
:delete_refs
,
request
,
timeout:
GitalyClient
.
medium
_timeout
)
raise
Gitlab
::
Git
::
Repository
::
GitError
,
response
.
git_error
if
response
.
git_error
.
present?
end
...
...
@@ -242,7 +242,7 @@ module Gitlab
def
pack_refs
request
=
Gitaly
::
PackRefsRequest
.
new
(
repository:
@gitaly_repo
)
GitalyClient
.
call
(
@storage
,
:ref_service
,
:pack_refs
,
request
)
GitalyClient
.
call
(
@storage
,
:ref_service
,
:pack_refs
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
private
...
...
lib/gitlab/gitaly_client/remote_service.rb
View file @
81f7adf0
...
...
@@ -38,9 +38,7 @@ module Gitlab
def
remove_remote
(
name
)
request
=
Gitaly
::
RemoveRemoteRequest
.
new
(
repository:
@gitaly_repo
,
name:
name
)
response
=
GitalyClient
.
call
(
@storage
,
:remote_service
,
:remove_remote
,
request
)
response
.
result
GitalyClient
.
call
(
@storage
,
:remote_service
,
:remove_remote
,
request
,
timeout:
GitalyClient
.
long_timeout
).
result
end
def
fetch_internal_remote
(
repository
)
...
...
@@ -51,6 +49,7 @@ module Gitlab
response
=
GitalyClient
.
call
(
@storage
,
:remote_service
,
:fetch_internal_remote
,
request
,
timeout:
GitalyClient
.
medium_timeout
,
remote_storage:
repository
.
storage
)
response
.
result
...
...
@@ -63,7 +62,7 @@ module Gitlab
)
response
=
GitalyClient
.
call
(
@storage
,
:remote_service
,
:find_remote_root_ref
,
request
)
:find_remote_root_ref
,
request
,
timeout:
GitalyClient
.
medium_timeout
)
encode_utf8
(
response
.
ref
)
end
...
...
@@ -95,7 +94,7 @@ module Gitlab
end
end
GitalyClient
.
call
(
@storage
,
:remote_service
,
:update_remote_mirror
,
req_enum
)
GitalyClient
.
call
(
@storage
,
:remote_service
,
:update_remote_mirror
,
req_enum
,
timeout:
GitalyClient
.
long_timeout
)
end
end
end
...
...
lib/gitlab/gitaly_client/repository_service.rb
View file @
81f7adf0
...
...
@@ -28,17 +28,17 @@ module Gitlab
def
garbage_collect
(
create_bitmap
)
request
=
Gitaly
::
GarbageCollectRequest
.
new
(
repository:
@gitaly_repo
,
create_bitmap:
create_bitmap
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:garbage_collect
,
request
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:garbage_collect
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
def
repack_full
(
create_bitmap
)
request
=
Gitaly
::
RepackFullRequest
.
new
(
repository:
@gitaly_repo
,
create_bitmap:
create_bitmap
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:repack_full
,
request
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:repack_full
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
def
repack_incremental
request
=
Gitaly
::
RepackIncrementalRequest
.
new
(
repository:
@gitaly_repo
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:repack_incremental
,
request
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:repack_incremental
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
def
repository_size
...
...
@@ -86,12 +86,12 @@ module Gitlab
end
end
GitalyClient
.
call
(
@storage
,
:repository_service
,
:fetch_remote
,
request
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:fetch_remote
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
def
create_repository
request
=
Gitaly
::
CreateRepositoryRequest
.
new
(
repository:
@gitaly_repo
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:create_repository
,
request
,
timeout:
GitalyClient
.
medium
_timeout
)
GitalyClient
.
call
(
@storage
,
:repository_service
,
:create_repository
,
request
,
timeout:
GitalyClient
.
fast
_timeout
)
end
def
has_local_branches?
...
...
@@ -189,6 +189,7 @@ module Gitlab
:repository_service
,
:fetch_source_branch
,
request
,
timeout:
GitalyClient
.
default_timeout
,
remote_storage:
source_repository
.
storage
)
...
...
@@ -197,7 +198,7 @@ module Gitlab
def
fsck
request
=
Gitaly
::
FsckRequest
.
new
(
repository:
@gitaly_repo
)
response
=
GitalyClient
.
call
(
@storage
,
:repository_service
,
:fsck
,
request
,
timeout:
GitalyClient
.
no
_timeout
)
response
=
GitalyClient
.
call
(
@storage
,
:repository_service
,
:fsck
,
request
,
timeout:
GitalyClient
.
long
_timeout
)
if
response
.
error
.
empty?
return
""
,
0
...
...
@@ -211,7 +212,7 @@ module Gitlab
save_path
,
:create_bundle
,
Gitaly
::
CreateBundleRequest
,
GitalyClient
.
no
_timeout
GitalyClient
.
long
_timeout
)
end
...
...
@@ -229,7 +230,7 @@ module Gitlab
bundle_path
,
:create_repository_from_bundle
,
Gitaly
::
CreateRepositoryFromBundleRequest
,
GitalyClient
.
no
_timeout
GitalyClient
.
long
_timeout
)
end
...
...
@@ -254,7 +255,7 @@ module Gitlab
:repository_service
,
:create_repository_from_snapshot
,
request
,
timeout:
GitalyClient
.
no
_timeout
timeout:
GitalyClient
.
long
_timeout
)
end
...
...
@@ -333,7 +334,7 @@ module Gitlab
def
search_files_by_content
(
ref
,
query
)
request
=
Gitaly
::
SearchFilesByContentRequest
.
new
(
repository:
@gitaly_repo
,
ref:
ref
,
query:
query
)
response
=
GitalyClient
.
call
(
@storage
,
:repository_service
,
:search_files_by_content
,
request
)
response
=
GitalyClient
.
call
(
@storage
,
:repository_service
,
:search_files_by_content
,
request
,
timeout:
GitalyClient
.
default_timeout
)
search_results_from_response
(
response
)
end
...
...
@@ -343,7 +344,7 @@ module Gitlab
repository:
@gitaly_repo
)
GitalyClient
.
call
(
@storage
,
:object_pool_service
,
:disconnect_git_alternates
,
request
)
GitalyClient
.
call
(
@storage
,
:object_pool_service
,
:disconnect_git_alternates
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
private
...
...
lib/gitlab/gitaly_client/storage_service.rb
View file @
81f7adf0
...
...
@@ -11,14 +11,14 @@ module Gitlab
def
list_directories
(
depth:
1
)
request
=
Gitaly
::
ListDirectoriesRequest
.
new
(
storage_name:
@storage
,
depth:
depth
)
GitalyClient
.
call
(
@storage
,
:storage_service
,
:list_directories
,
request
)
GitalyClient
.
call
(
@storage
,
:storage_service
,
:list_directories
,
request
,
timeout:
GitalyClient
.
medium_timeout
)
.
flat_map
(
&
:paths
)
end
# Delete all repositories in the storage. This is a slow and VERY DESTRUCTIVE operation.
def
delete_all_repositories
request
=
Gitaly
::
DeleteAllRepositoriesRequest
.
new
(
storage_name:
@storage
)
GitalyClient
.
call
(
@storage
,
:storage_service
,
:delete_all_repositories
,
request
)
GitalyClient
.
call
(
@storage
,
:storage_service
,
:delete_all_repositories
,
request
,
timeout:
GitalyClient
.
long_timeout
)
end
end
end
...
...
lib/gitlab/gitaly_client/wiki_service.rb
View file @
81f7adf0
...
...
@@ -34,7 +34,7 @@ module Gitlab
end
end
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:wiki_service
,
:wiki_write_page
,
enum
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:wiki_service
,
:wiki_write_page
,
enum
,
timeout:
GitalyClient
.
medium_timeout
)
if
error
=
response
.
duplicate_error
.
presence
raise
Gitlab
::
Git
::
Wiki
::
DuplicatePageError
,
error
end
...
...
@@ -61,7 +61,7 @@ module Gitlab
end
end
GitalyClient
.
call
(
@repository
.
storage
,
:wiki_service
,
:wiki_update_page
,
enum
)
GitalyClient
.
call
(
@repository
.
storage
,
:wiki_service
,
:wiki_update_page
,
enum
,
timeout:
GitalyClient
.
medium_timeout
)
end
def
delete_page
(
page_path
,
commit_details
)
...
...
@@ -187,7 +187,7 @@ module Gitlab
directory:
encode_binary
(
dir
)
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:wiki_service
,
:wiki_get_formatted_data
,
request
)
response
=
GitalyClient
.
call
(
@repository
.
storage
,
:wiki_service
,
:wiki_get_formatted_data
,
request
,
timeout:
GitalyClient
.
medium_timeout
)
response
.
reduce
([])
{
|
memo
,
msg
|
memo
<<
msg
.
data
}.
join
end
...
...
lib/gitlab/sidekiq_daemon/memory_killer.rb
View file @
81f7adf0
...
...
@@ -17,6 +17,9 @@ module Gitlab
CHECK_INTERVAL_SECONDS
=
[
ENV
.
fetch
(
'SIDEKIQ_MEMORY_KILLER_CHECK_INTERVAL'
,
3
).
to_i
,
2
].
max
# Give Sidekiq up to 30 seconds to allow existing jobs to finish after exceeding the limit
SHUTDOWN_TIMEOUT_SECONDS
=
ENV
.
fetch
(
'SIDEKIQ_MEMORY_KILLER_SHUTDOWN_WAIT'
,
30
).
to_i
# Developer/admin should always set `memory_killer_max_memory_growth_kb` explicitly
# In case not set, default to 300M. This is for extra-safe.
DEFAULT_MAX_MEMORY_GROWTH_KB
=
300_000
def
initialize
super
...
...
@@ -90,7 +93,7 @@ module Gitlab
def
rss_within_range?
current_rss
=
nil
deadline
=
Time
.
now
+
GRACE_BALLOON_SECONDS
.
seconds
deadline
=
Gitlab
::
Metrics
::
System
.
monotonic_time
+
GRACE_BALLOON_SECONDS
.
seconds
loop
do
return
true
unless
enabled?
...
...
@@ -103,7 +106,7 @@ module Gitlab
return
true
if
current_rss
<
soft_limit_rss
# RSS did not go below the soft limit within deadline, restart
break
if
Time
.
now
>
deadline
break
if
Gitlab
::
Metrics
::
System
.
monotonic_time
>
deadline
sleep
(
CHECK_INTERVAL_SECONDS
)
end
...
...
@@ -159,11 +162,11 @@ module Gitlab
)
Process
.
kill
(
signal
,
pid
)
deadline
=
Time
.
now
+
time
deadline
=
Gitlab
::
Metrics
::
System
.
monotonic_time
+
time
# we try to finish as early as all jobs finished
# so we retest that in loop
sleep
(
CHECK_INTERVAL_SECONDS
)
while
enabled?
&&
any_jobs?
&&
Time
.
now
<
deadline
sleep
(
CHECK_INTERVAL_SECONDS
)
while
enabled?
&&
any_jobs?
&&
Gitlab
::
Metrics
::
System
.
monotonic_time
<
deadline
end
def
signal_pgroup
(
signal
,
explanation
)
...
...
@@ -192,11 +195,11 @@ module Gitlab
def
rss_increase_by_job
(
job
)
memory_growth_kb
=
get_job_options
(
job
,
'memory_killer_memory_growth_kb'
,
0
).
to_i
max_memory_growth_kb
=
get_job_options
(
job
,
'memory_killer_max_memory_growth_kb'
,
MAX_MEMORY
_KB
).
to_i
max_memory_growth_kb
=
get_job_options
(
job
,
'memory_killer_max_memory_growth_kb'
,
DEFAULT_MAX_MEMORY_GROWTH
_KB
).
to_i
return
0
if
memory_growth_kb
.
zero?
time_elapsed
=
Time
.
now
.
to_i
-
job
[
:started_at
]
time_elapsed
=
[
Gitlab
::
Metrics
::
System
.
monotonic_time
-
job
[
:started_at
],
0
].
max
[
memory_growth_kb
*
time_elapsed
,
max_memory_growth_kb
].
min
end
...
...
lib/gitlab/sidekiq_daemon/monitor.rb
View file @
81f7adf0
...
...
@@ -26,7 +26,7 @@ module Gitlab
def
within_job
(
worker_class
,
jid
,
queue
)
jobs_mutex
.
synchronize
do
jobs
[
jid
]
=
{
worker_class:
worker_class
,
thread:
Thread
.
current
,
started_at:
Time
.
now
.
to_i
}
jobs
[
jid
]
=
{
worker_class:
worker_class
,
thread:
Thread
.
current
,
started_at:
Gitlab
::
Metrics
::
System
.
monotonic_time
}
end
if
cancelled?
(
jid
)
...
...
qa/qa/specs/features/browser_ui/2_plan/issue/mentions_spec.rb
View file @
81f7adf0
...
...
@@ -11,6 +11,7 @@ module QA
project
=
Resource
::
Project
.
fabricate_via_api!
do
|
resource
|
resource
.
name
=
'project-to-test-mention'
resource
.
visibility
=
'private'
end
project
.
visit!
...
...
spec/frontend/jobs/components/log/collapsible_section_spec.js
0 → 100644
View file @
81f7adf0
import
{
mount
}
from
'
@vue/test-utils
'
;
import
CollpasibleSection
from
'
~/jobs/components/log/collapsible_section.vue
'
;
import
{
nestedSectionOpened
,
nestedSectionClosed
}
from
'
./mock_data
'
;
describe
(
'
Job Log Collapsible Section
'
,
()
=>
{
let
wrapper
;
const
traceEndpoint
=
'
jobs/335
'
;
const
findCollapsibleLine
=
()
=>
wrapper
.
find
(
'
.collapsible-line
'
);
const
createComponent
=
(
props
=
{})
=>
{
wrapper
=
mount
(
CollpasibleSection
,
{
sync
:
true
,
propsData
:
{
...
props
,
},
});
};
afterEach
(()
=>
{
wrapper
.
destroy
();
});
describe
(
'
with closed nested section
'
,
()
=>
{
beforeEach
(()
=>
{
createComponent
({
section
:
nestedSectionClosed
,
traceEndpoint
,
});
});
it
(
'
renders clickable header line
'
,
()
=>
{
expect
(
findCollapsibleLine
().
attributes
(
'
role
'
)).
toBe
(
'
button
'
);
});
});
describe
(
'
with opened nested section
'
,
()
=>
{
beforeEach
(()
=>
{
createComponent
({
section
:
nestedSectionOpened
,
traceEndpoint
,
});
});
it
(
'
renders all sections opened
'
,
()
=>
{
expect
(
wrapper
.
findAll
(
'
.collapsible-line
'
).
length
).
toBe
(
2
);
});
});
it
(
'
emits onClickCollapsibleLine on click
'
,
()
=>
{
createComponent
({
section
:
nestedSectionOpened
,
traceEndpoint
,
});
findCollapsibleLine
().
trigger
(
'
click
'
);
expect
(
wrapper
.
emitted
(
'
onClickCollapsibleLine
'
).
length
).
toBe
(
1
);
});
});
spec/frontend/jobs/components/log/mock_data.js
View file @
81f7adf0
...
...
@@ -150,3 +150,73 @@ export const collapsibleTraceIncremental = [
sections
:
[
'
section
'
],
},
];
export
const
nestedSectionClosed
=
{
offset
:
5
,
section_header
:
true
,
isHeader
:
true
,
isClosed
:
true
,
line
:
{
content
:
[{
text
:
'
foo
'
}],
sections
:
[
'
prepare-script
'
],
lineNumber
:
1
,
},
section_duration
:
'
00:03
'
,
lines
:
[
{
section_header
:
true
,
section_duration
:
'
00:02
'
,
isHeader
:
true
,
isClosed
:
true
,
line
:
{
offset
:
52
,
content
:
[{
text
:
'
bar
'
}],
sections
:
[
'
prepare-script
'
,
'
prepare-script-nested
'
],
lineNumber
:
2
,
},
lines
:
[
{
offset
:
80
,
content
:
[{
text
:
'
this is a collapsible nested section
'
}],
sections
:
[
'
prepare-script
'
,
'
prepare-script-nested
'
],
lineNumber
:
3
,
},
],
},
],
};
export
const
nestedSectionOpened
=
{
offset
:
5
,
section_header
:
true
,
isHeader
:
true
,
isClosed
:
false
,
line
:
{
content
:
[{
text
:
'
foo
'
}],
sections
:
[
'
prepare-script
'
],
lineNumber
:
1
,
},
section_duration
:
'
00:03
'
,
lines
:
[
{
section_header
:
true
,
section_duration
:
'
00:02
'
,
isHeader
:
true
,
isClosed
:
false
,
line
:
{
offset
:
52
,
content
:
[{
text
:
'
bar
'
}],
sections
:
[
'
prepare-script
'
,
'
prepare-script-nested
'
],
lineNumber
:
2
,
},
lines
:
[
{
offset
:
80
,
content
:
[{
text
:
'
this is a collapsible nested section
'
}],
sections
:
[
'
prepare-script
'
,
'
prepare-script-nested
'
],
lineNumber
:
3
,
},
],
},
],
};
spec/lib/gitlab/gitaly_client_spec.rb
View file @
81f7adf0
...
...
@@ -182,24 +182,24 @@ describe Gitlab::GitalyClient do
end
it
'sets the gitaly-session-id in the metadata'
do
results
=
described_class
.
request_kwargs
(
'default'
,
nil
)
results
=
described_class
.
request_kwargs
(
'default'
,
timeout:
1
)
expect
(
results
[
:metadata
]).
to
include
(
'gitaly-session-id'
)
end
context
'when RequestStore is not enabled'
do
it
'sets a different gitaly-session-id per request'
do
gitaly_session_id
=
described_class
.
request_kwargs
(
'default'
,
nil
)[
:metadata
][
'gitaly-session-id'
]
gitaly_session_id
=
described_class
.
request_kwargs
(
'default'
,
timeout:
1
)[
:metadata
][
'gitaly-session-id'
]
expect
(
described_class
.
request_kwargs
(
'default'
,
nil
)[
:metadata
][
'gitaly-session-id'
]).
not_to
eq
(
gitaly_session_id
)
expect
(
described_class
.
request_kwargs
(
'default'
,
timeout:
1
)[
:metadata
][
'gitaly-session-id'
]).
not_to
eq
(
gitaly_session_id
)
end
end
context
'when RequestStore is enabled'
,
:request_store
do
it
'sets the same gitaly-session-id on every outgoing request metadata'
do
gitaly_session_id
=
described_class
.
request_kwargs
(
'default'
,
nil
)[
:metadata
][
'gitaly-session-id'
]
gitaly_session_id
=
described_class
.
request_kwargs
(
'default'
,
timeout:
1
)[
:metadata
][
'gitaly-session-id'
]
3
.
times
do
expect
(
described_class
.
request_kwargs
(
'default'
,
nil
)[
:metadata
][
'gitaly-session-id'
]).
to
eq
(
gitaly_session_id
)
expect
(
described_class
.
request_kwargs
(
'default'
,
timeout:
1
)[
:metadata
][
'gitaly-session-id'
]).
to
eq
(
gitaly_session_id
)
end
end
end
...
...
spec/lib/gitlab/sidekiq_daemon/memory_killer_spec.rb
View file @
81f7adf0
...
...
@@ -75,12 +75,6 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
end
end
it
'invoke rss_within_range? twice'
do
expect
(
memory_killer
).
to
receive
(
:rss_within_range?
).
twice
subject
end
it
'not invoke restart_sidekiq when rss in range'
do
expect
(
memory_killer
).
to
receive
(
:rss_within_range?
).
twice
.
and_return
(
true
)
...
...
@@ -128,7 +122,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
expect
(
memory_killer
).
to
receive
(
:soft_limit_rss
).
and_return
(
200
)
expect
(
memory_killer
).
to
receive
(
:hard_limit_rss
).
and_return
(
300
)
expect
(
Time
).
to
receive
(
:now
).
and_call_original
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
and_call_original
expect
(
memory_killer
).
not_to
receive
(
:log_rss_out_of_range
)
expect
(
subject
).
to
be
true
...
...
@@ -139,7 +133,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
expect
(
memory_killer
).
to
receive
(
:soft_limit_rss
).
at_least
(
:once
).
and_return
(
200
)
expect
(
memory_killer
).
to
receive
(
:hard_limit_rss
).
at_least
(
:once
).
and_return
(
300
)
expect
(
Time
).
to
receive
(
:now
).
and_call_original
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
and_call_original
expect
(
memory_killer
).
to
receive
(
:log_rss_out_of_range
).
with
(
400
,
300
,
200
)
...
...
@@ -151,7 +145,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
expect
(
memory_killer
).
to
receive
(
:soft_limit_rss
).
at_least
(
:once
).
and_return
(
200
)
expect
(
memory_killer
).
to
receive
(
:hard_limit_rss
).
at_least
(
:once
).
and_return
(
300
)
expect
(
Time
).
to
receive
(
:now
).
twice
.
and_call_original
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
twice
.
and_call_original
expect
(
memory_killer
).
to
receive
(
:sleep
).
with
(
check_interval_seconds
)
expect
(
memory_killer
).
to
receive
(
:log_rss_out_of_range
).
with
(
400
,
300
,
200
)
...
...
@@ -164,7 +158,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
expect
(
memory_killer
).
to
receive
(
:soft_limit_rss
).
and_return
(
200
,
200
)
expect
(
memory_killer
).
to
receive
(
:hard_limit_rss
).
and_return
(
300
,
300
)
expect
(
Time
).
to
receive
(
:now
).
twice
.
and_call_original
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
twice
.
and_call_original
expect
(
memory_killer
).
to
receive
(
:sleep
).
with
(
check_interval_seconds
)
expect
(
memory_killer
).
not_to
receive
(
:log_rss_out_of_range
)
...
...
@@ -177,7 +171,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
expect
(
memory_killer
).
to
receive
(
:soft_limit_rss
).
exactly
(
5
).
times
.
and_return
(
200
)
expect
(
memory_killer
).
to
receive
(
:hard_limit_rss
).
exactly
(
5
).
times
.
and_return
(
300
)
expect
(
Time
).
to
receive
(
:now
).
exactly
(
5
).
times
.
and_call_original
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
exactly
(
5
).
times
.
and_call_original
expect
(
memory_killer
).
to
receive
(
:sleep
).
exactly
(
3
).
times
.
with
(
check_interval_seconds
).
and_call_original
expect
(
memory_killer
).
to
receive
(
:log_rss_out_of_range
).
with
(
250
,
300
,
200
)
...
...
@@ -219,7 +213,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
it
'send signal and return when all jobs finished'
do
expect
(
Process
).
to
receive
(
:kill
).
with
(
signal
,
pid
).
ordered
expect
(
Time
).
to
receive
(
:now
).
and_call_original
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
and_call_original
expect
(
memory_killer
).
to
receive
(
:enabled?
).
and_return
(
true
)
expect
(
memory_killer
).
to
receive
(
:any_jobs?
).
and_return
(
false
)
...
...
@@ -231,7 +225,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
it
'send signal and wait till deadline if any job not finished'
do
expect
(
Process
).
to
receive
(
:kill
).
with
(
signal
,
pid
).
ordered
expect
(
Time
).
to
receive
(
:now
).
and_call_original
.
at_least
(
:once
)
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
and_call_original
.
at_least
(
:once
)
expect
(
memory_killer
).
to
receive
(
:enabled?
).
and_return
(
true
).
at_least
(
:once
)
expect
(
memory_killer
).
to
receive
(
:any_jobs?
).
and_return
(
true
).
at_least
(
:once
)
...
...
@@ -351,7 +345,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
subject
{
memory_killer
.
send
(
:rss_increase_by_job
,
job
)
}
before
do
stub_const
(
"
#{
described_class
}
::
MAX_MEMORY
_KB"
,
max_memory_kb
)
stub_const
(
"
#{
described_class
}
::
DEFAULT_MAX_MEMORY_GROWTH
_KB"
,
max_memory_kb
)
end
it
'return 0 if memory_growth_kb return 0'
do
...
...
@@ -366,7 +360,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
expect
(
memory_killer
).
to
receive
(
:get_job_options
).
with
(
job
,
'memory_killer_memory_growth_kb'
,
0
).
and_return
(
10
)
expect
(
memory_killer
).
to
receive
(
:get_job_options
).
with
(
job
,
'memory_killer_max_memory_growth_kb'
,
max_memory_kb
).
and_return
(
100
)
expect
(
Time
).
to
receive
(
:now
).
and_return
(
323
)
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
and_return
(
323
)
expect
(
subject
).
to
eq
(
20
)
end
...
...
@@ -374,7 +368,7 @@ describe Gitlab::SidekiqDaemon::MemoryKiller do
expect
(
memory_killer
).
to
receive
(
:get_job_options
).
with
(
job
,
'memory_killer_memory_growth_kb'
,
0
).
and_return
(
10
)
expect
(
memory_killer
).
to
receive
(
:get_job_options
).
with
(
job
,
'memory_killer_max_memory_growth_kb'
,
max_memory_kb
).
and_return
(
100
)
expect
(
Time
).
to
receive
(
:now
).
and_return
(
332
)
expect
(
Gitlab
::
Metrics
::
System
).
to
receive
(
:monotonic_time
).
and_return
(
332
)
expect
(
subject
).
to
eq
(
100
)
end
end
...
...
spec/workers/object_pool/destroy_worker_spec.rb
View file @
81f7adf0
...
...
@@ -16,7 +16,9 @@ describe ObjectPool::DestroyWorker do
subject
{
described_class
.
new
}
it
'requests Gitaly to remove the object pool'
do
expect
(
Gitlab
::
GitalyClient
).
to
receive
(
:call
).
with
(
pool
.
shard_name
,
:object_pool_service
,
:delete_object_pool
,
Object
)
expect
(
Gitlab
::
GitalyClient
).
to
receive
(
:call
)
.
with
(
pool
.
shard_name
,
:object_pool_service
,
:delete_object_pool
,
Object
,
timeout:
Gitlab
::
GitalyClient
.
long_timeout
)
subject
.
perform
(
pool
.
id
)
end
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment