-read_only_help_text=readonly?s_("Profiles|Your email address was automatically set based on your %{provider_label} account")%{provider_label: attribute_provider_label(:email)}:user_email_help_text(@user)
-read_only_help_text=readonly?s_("Profiles|Your email address was automatically set based on your %{provider_label} account")%{provider_label: attribute_provider_label(:email)}:user_email_help_text(@user)
-help_text=email_change_disabled?s_("Your account uses dedicated credentials for the \"%{group_name}\" group and can only be updated through SSO.")%{group_name: @user.managing_group.name}:read_only_help_text
-help_text=email_change_disabled?s_("Your account uses dedicated credentials for the \"%{group_name}\" group and can only be updated through SSO.")%{group_name: @user.managing_group.name}:read_only_help_text
help: s_("Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you")%{provider_label: attribute_provider_label(:name)}
help: s_("Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you")%{provider_label: attribute_provider_label(:name)}
-else
-else
=form.text_field:name,label: s_('Profiles|Full name'),required: true,title: s_("Profiles|Using emojis in names seems fun, but please try to set a status message instead"),wrapper: {class: 'col-md-9 qa-full-name rspec-full-name'},help: s_("Profiles|Enter your name, so people you know can recognize you")
=form.text_field:name,class: 'gl-form-input',label: s_('Profiles|Full name'),required: true,title: s_("Profiles|Using emojis in names seems fun, but please try to set a status message instead"),wrapper: {class: 'col-md-9 qa-full-name rspec-full-name'},help: s_("Profiles|Enter your name, so people you know can recognize you")
=f.text_field:location,readonly: true,help: s_("Profiles|Your location was automatically set based on your %{provider_label} account")%{provider_label: attribute_provider_label(:location)}
=f.text_field:location,class: 'gl-form-input',readonly: true,help: s_("Profiles|Your location was automatically set based on your %{provider_label} account")%{provider_label: attribute_provider_label(:location)}
=f.text_field:organization,label: s_('Profiles|Organization'),class: 'input-md',help: s_("Profiles|Who you represent or work for")
=f.text_field:organization,label: s_('Profiles|Organization'),class: 'input-md gl-form-input',help: s_("Profiles|Who you represent or work for")
=f.text_area:bio,label: s_('Profiles|Bio'),rows: 4,maxlength: 250,help: s_("Profiles|Tell us about yourself in fewer than 250 characters")
=f.text_area:bio,class: 'gl-form-input',label: s_('Profiles|Bio'),rows: 4,maxlength: 250,help: s_("Profiles|Tell us about yourself in fewer than 250 characters")
@@ -69,7 +69,7 @@ The `whitespace` tokenizer was selected in order to have more control over how t
...
@@ -69,7 +69,7 @@ The `whitespace` tokenizer was selected in order to have more control over how t
Please see the `code` filter for an explanation on how tokens are split.
Please see the `code` filter for an explanation on how tokens are split.
NOTE:
NOTE:
Currently the [Elasticsearch code_analyzer doesn't account for all code cases](../integration/elasticsearch.md#known-issues).
The [Elasticsearch code_analyzer doesn't account for all code cases](../integration/elasticsearch.md#elasticsearch-code_analyzer-doesnt-account-for-all-code-cases).
@@ -668,6 +668,23 @@ However, some larger installations may wish to tune the merge policy settings:
...
@@ -668,6 +668,23 @@ However, some larger installations may wish to tune the merge policy settings:
- Do not do a [force merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html "Force Merge") to remove deleted documents. A warning in the [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html "Force Merge") states that this can lead to very large segments that may never get reclaimed, and can also cause significant performance or availability issues.
- Do not do a [force merge](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html "Force Merge") to remove deleted documents. A warning in the [documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-forcemerge.html "Force Merge") states that this can lead to very large segments that may never get reclaimed, and can also cause significant performance or availability issues.
## Reverting to Basic Search
Sometimes there may be issues with your Elasticsearch index data and as such
GitLab will allow you to revert to "basic search" when there are no search
results and assuming that basic search is supported in that scope. This "basic
search" will behave as though you don't have Advanced Search enabled at all for
your instance and search using other data sources (such as PostgreSQL data and Git
data).
## Data recovery: Elasticsearch is a secondary data store only
The use of Elasticsearch in GitLab is only ever as a secondary data store.
This means that all of the data stored in Elasticsearch can always be derived
again from other data sources, specifically PostgreSQL and Gitaly. Therefore, if
the Elasticsearch data store is ever corrupted for whatever reason, you can
simply reindex everything from scratch.
## Troubleshooting
## Troubleshooting
One of the most valuable tools for identifying issues with the Elasticsearch
One of the most valuable tools for identifying issues with the Elasticsearch
...
@@ -849,27 +866,12 @@ problem.
...
@@ -849,27 +866,12 @@ problem.
There is a [more structured, lower-level troubleshooting document](../administration/troubleshooting/elasticsearch.md) for when you experience other issues, including poor performance.
There is a [more structured, lower-level troubleshooting document](../administration/troubleshooting/elasticsearch.md) for when you experience other issues, including poor performance.
### Known issues
### Elasticsearch `code_analyzer` doesn't account for all code cases
[Elasticsearch `code_analyzer` doesn't account for all code cases](https://gitlab.com/groups/gitlab-org/-/epics/3621).
The `code_analyzer` pattern and filter configuration is being evaluated for improvement. We have fixed [most edge cases](https://gitlab.com/groups/gitlab-org/-/epics/3621#note_363429094) that were not returning expected search results due to our pattern and filter configuration.
The `code_analyzer` pattern and filter configuration is being evaluated for improvement. We have fixed [most edge cases](https://gitlab.com/groups/gitlab-org/-/epics/3621#note_363429094) that were not returning expected search results due to our pattern and filter configuration.
Improvements to the `code_analyzer` pattern and filters are being discussed in [epic 3621](https://gitlab.com/groups/gitlab-org/-/epics/3621).
Improvements to the `code_analyzer` pattern and filters are being discussed in [epic 3621](https://gitlab.com/groups/gitlab-org/-/epics/3621).
### Reverting to Basic Search
### Some binary files may not be searchable by name
Sometimes there may be issues with your Elasticsearch index data and as such
GitLab will allow you to revert to "basic search" when there are no search
results and assuming that basic search is supported in that scope. This "basic
search" will behave as though you don't have Advanced Search enabled at all for
your instance and search using other data sources (such as PostgreSQL data and Git
data).
### Data recovery: Elasticsearch is a secondary data store only
The use of Elasticsearch in GitLab is only ever as a secondary data store.
In GitLab 13.9, a change was made where [binary file names are being indexed](https://gitlab.com/gitlab-org/gitlab/-/issues/301083). However, without indexing all projects' data from scratch, only binary files that are added or updated after the GitLab 13.9 release are searchable.
This means that all of the data stored in Elasticsearch can always be derived
again from other data sources, specifically PostgreSQL and Gitaly. Therefore, if
the Elasticsearch data store is ever corrupted for whatever reason, you can
field:id,GraphQL::ID_TYPE,null: false,description: 'ID of this GeoNode'
field:id,GraphQL::ID_TYPE,null: false,description: 'ID of this GeoNode.'
field:primary,GraphQL::BOOLEAN_TYPE,null: true,description: 'Indicates whether this Geo node is the primary'
field:primary,GraphQL::BOOLEAN_TYPE,null: true,description: 'Indicates whether this Geo node is the primary.'
field:enabled,GraphQL::BOOLEAN_TYPE,null: true,description: 'Indicates whether this Geo node is enabled'
field:enabled,GraphQL::BOOLEAN_TYPE,null: true,description: 'Indicates whether this Geo node is enabled.'
field:name,GraphQL::STRING_TYPE,null: true,description: 'The unique identifier for this Geo node'
field:name,GraphQL::STRING_TYPE,null: true,description: 'The unique identifier for this Geo node.'
field:url,GraphQL::STRING_TYPE,null: true,description: 'The user-facing URL for this Geo node'
field:url,GraphQL::STRING_TYPE,null: true,description: 'The user-facing URL for this Geo node.'
field:internal_url,GraphQL::STRING_TYPE,null: true,description: 'The URL defined on the primary node that secondary nodes should use to contact it'
field:internal_url,GraphQL::STRING_TYPE,null: true,description: 'The URL defined on the primary node that secondary nodes should use to contact it.'
field:files_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of LFS/attachment backfill for this secondary node'
field:files_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of LFS/attachment backfill for this secondary node.'
field:repos_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of repository backfill for this secondary node'
field:repos_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of repository backfill for this secondary node.'
field:verification_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of repository verification for this secondary node'
field:verification_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of repository verification for this secondary node.'
field:container_repositories_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of container repository sync for this secondary node'
field:container_repositories_max_capacity,GraphQL::INT_TYPE,null: true,description: 'The maximum concurrency of container repository sync for this secondary node.'
field:sync_object_storage,GraphQL::BOOLEAN_TYPE,null: true,description: 'Indicates if this secondary node will replicate blobs in Object Storage'
field:sync_object_storage,GraphQL::BOOLEAN_TYPE,null: true,description: 'Indicates if this secondary node will replicate blobs in Object Storage.'
field:selective_sync_type,GraphQL::STRING_TYPE,null: true,description: 'Indicates if syncing is limited to only specific groups, or shards'
field:selective_sync_type,GraphQL::STRING_TYPE,null: true,description: 'Indicates if syncing is limited to only specific groups, or shards.'
field:selective_sync_shards,type: [GraphQL::STRING_TYPE],null: true,description: 'The repository storages whose projects should be synced, if `selective_sync_type` == `shards`'
field:selective_sync_shards,type: [GraphQL::STRING_TYPE],null: true,description: 'The repository storages whose projects should be synced, if `selective_sync_type` == `shards`.'
field:selective_sync_namespaces,::Types::NamespaceType.connection_type,null: true,method: :namespaces,description: 'The namespaces that should be synced, if `selective_sync_type` == `namespaces`'
field:selective_sync_namespaces,::Types::NamespaceType.connection_type,null: true,method: :namespaces,description: 'The namespaces that should be synced, if `selective_sync_type` == `namespaces`.'
field:minimum_reverification_interval,GraphQL::INT_TYPE,null: true,description: 'The interval (in days) in which the repository verification is valid. Once expired, it will be reverified'
field:minimum_reverification_interval,GraphQL::INT_TYPE,null: true,description: 'The interval (in days) in which the repository verification is valid. Once expired, it will be reverified.'
help: s_("Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you")%{provider_label: attribute_provider_label(:name)}
help: s_("Profiles|Your name was automatically set based on your %{provider_label} account, so people you know can recognize you")%{provider_label: attribute_provider_label(:name)}
-elsifcan?(current_user,:update_name,user)
-elsifcan?(current_user,:update_name,user)
=form.text_field:name,label: s_('Profiles|Full name'),required: true,title: s_("Profiles|Using emojis in names seems fun, but please try to set a status message instead"),wrapper: {class: 'col-md-9 qa-full-name rspec-full-name'},help: s_("Profiles|Enter your name, so people you know can recognize you")
=form.text_field:name,class: 'gl-form-input',label: s_('Profiles|Full name'),required: true,title: s_("Profiles|Using emojis in names seems fun, but please try to set a status message instead"),wrapper: {class: 'col-md-9 qa-full-name rspec-full-name'},help: s_("Profiles|Enter your name, so people you know can recognize you")