diff --git a/Gemfile b/Gemfile index c0eadbe75fa18d2cd30619ccb02bd3799329c885..16094fe3f0e6de207c35e2a046d8cffdc57d56f9 100644 --- a/Gemfile +++ b/Gemfile @@ -642,7 +642,7 @@ gem 'ssh_data', '~> 1.3', feature_category: :shared gem 'spamcheck', '~> 1.3.0', feature_category: :insider_threat # Gitaly GRPC protocol definitions -gem 'gitaly', '~> 17.8.0', feature_category: :gitaly +gem 'gitaly', '~> 17.11.2', feature_category: :gitaly # KAS GRPC protocol definitions gem 'gitlab-kas-grpc', '~> 17.11.0', feature_category: :deployment_management diff --git a/Gemfile.checksum b/Gemfile.checksum index 726518d2051618b00906c614a9298e470d5830dc..1c6670ef760fb1fcaaae53bf289af09a3c9cb49e 100644 --- a/Gemfile.checksum +++ b/Gemfile.checksum @@ -215,7 +215,7 @@ {"name":"gettext","version":"3.5.1","platform":"ruby","checksum":"03ec7f71ea7e2cf1fdcd5e08682e98b81601922fdbee890b7bc6f63b0e1a512a"}, {"name":"gettext_i18n_rails","version":"1.13.0","platform":"ruby","checksum":"d4a4739d928b6ce52a2d694d33a831dcb06c7c8e197b3172fc73dfaa20ac8ee6"}, {"name":"git","version":"1.19.1","platform":"ruby","checksum":"b0a422d9f6517353c48a330d6114de4db9e0c82dbe7202964a1d9f1fbc827d70"}, -{"name":"gitaly","version":"17.8.4","platform":"ruby","checksum":"196d9735a83f8a7d396baa216b979eb0c801622d8b7573f90010338d5b0c7b4f"}, +{"name":"gitaly","version":"17.11.2","platform":"ruby","checksum":"32266469296345187d16ab3cfa3da849338817987b722a46eed4309ee18f996e"}, {"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"}, {"name":"gitlab-chronic","version":"0.10.6","platform":"ruby","checksum":"a244d11a1396d2aac6ae9b2f326adf1605ec1ad20c29f06e8b672047d415a9ac"}, {"name":"gitlab-cloud-connector","version":"1.12.0","platform":"ruby","checksum":"b1eb7b0f5cb6633929681904d92771b387ec126b02319cd6cb62dd04bd5750af"}, @@ -282,7 +282,7 @@ {"name":"google-protobuf","version":"3.25.7","platform":"x86_64-darwin","checksum":"9dd1a8fde13e2b2f399cd9df95bc72851e28a71a70211145f02ec32f0569cd1c"}, {"name":"google-protobuf","version":"3.25.7","platform":"x86_64-linux","checksum":"f4bf387f7aa782377ca3ac6ef3ff612867dfe8d061fd31f756082038f37df727"}, {"name":"googleapis-common-protos","version":"1.4.0","platform":"ruby","checksum":"da2380fb5ab1563580816c74e8d684ac17512c3654c829a3ee84f6d6139de382"}, -{"name":"googleapis-common-protos-types","version":"1.19.0","platform":"ruby","checksum":"aecb76ca5326f8bcc47ab083259bbc4971d07e87f56808af7e210669d9765694"}, +{"name":"googleapis-common-protos-types","version":"1.20.0","platform":"ruby","checksum":"5e374b06bcfc7e13556e7c0d87b99f1fa3d42de6396a1de3d8fc13aefb4dd07f"}, {"name":"googleauth","version":"1.8.1","platform":"ruby","checksum":"814adadaaa1221dce72a67131e3ecbd6d23491a161ec84fb15fd353b87d8c9e7"}, {"name":"gpgme","version":"2.0.24","platform":"ruby","checksum":"53eccd7042abb4fd5c78f30bc9ed075b1325e6450eab207f2f6a1e7e28ae3b64"}, {"name":"grape","version":"2.0.0","platform":"ruby","checksum":"3aeff94c17e84ccead4ff98833df691e7da0c108878cc128ca31f80c1047494a"}, diff --git a/Gemfile.lock b/Gemfile.lock index e8a5be430fbec6f49f90308a6f848ea6c578c330..976e87685bf94bfceeb526ca43e17e8f88f37e64 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -743,7 +743,7 @@ GEM git (1.19.1) addressable (~> 2.8) rchardet (~> 1.8) - gitaly (17.8.4) + gitaly (17.11.2) grpc (~> 1.0) gitlab (4.19.0) httparty (~> 0.20) @@ -924,7 +924,7 @@ GEM google-protobuf (~> 3.14) googleapis-common-protos-types (~> 1.2) grpc (~> 1.27) - googleapis-common-protos-types (1.19.0) + googleapis-common-protos-types (1.20.0) google-protobuf (>= 3.18, < 5.a) googleauth (1.8.1) faraday (>= 0.17.3, < 3.a) @@ -2159,7 +2159,7 @@ DEPENDENCIES gettext (~> 3.5, >= 3.5.1) gettext_i18n_rails (~> 1.13.0) git (~> 1.8) - gitaly (~> 17.8.0) + gitaly (~> 17.11.2) gitlab-active-context! gitlab-backup-cli! gitlab-chronic (~> 0.10.5) diff --git a/Gemfile.next.checksum b/Gemfile.next.checksum index 726518d2051618b00906c614a9298e470d5830dc..1c6670ef760fb1fcaaae53bf289af09a3c9cb49e 100644 --- a/Gemfile.next.checksum +++ b/Gemfile.next.checksum @@ -215,7 +215,7 @@ {"name":"gettext","version":"3.5.1","platform":"ruby","checksum":"03ec7f71ea7e2cf1fdcd5e08682e98b81601922fdbee890b7bc6f63b0e1a512a"}, {"name":"gettext_i18n_rails","version":"1.13.0","platform":"ruby","checksum":"d4a4739d928b6ce52a2d694d33a831dcb06c7c8e197b3172fc73dfaa20ac8ee6"}, {"name":"git","version":"1.19.1","platform":"ruby","checksum":"b0a422d9f6517353c48a330d6114de4db9e0c82dbe7202964a1d9f1fbc827d70"}, -{"name":"gitaly","version":"17.8.4","platform":"ruby","checksum":"196d9735a83f8a7d396baa216b979eb0c801622d8b7573f90010338d5b0c7b4f"}, +{"name":"gitaly","version":"17.11.2","platform":"ruby","checksum":"32266469296345187d16ab3cfa3da849338817987b722a46eed4309ee18f996e"}, {"name":"gitlab","version":"4.19.0","platform":"ruby","checksum":"3f645e3e195dbc24f0834fbf83e8ccfb2056d8e9712b01a640aad418a6949679"}, {"name":"gitlab-chronic","version":"0.10.6","platform":"ruby","checksum":"a244d11a1396d2aac6ae9b2f326adf1605ec1ad20c29f06e8b672047d415a9ac"}, {"name":"gitlab-cloud-connector","version":"1.12.0","platform":"ruby","checksum":"b1eb7b0f5cb6633929681904d92771b387ec126b02319cd6cb62dd04bd5750af"}, @@ -282,7 +282,7 @@ {"name":"google-protobuf","version":"3.25.7","platform":"x86_64-darwin","checksum":"9dd1a8fde13e2b2f399cd9df95bc72851e28a71a70211145f02ec32f0569cd1c"}, {"name":"google-protobuf","version":"3.25.7","platform":"x86_64-linux","checksum":"f4bf387f7aa782377ca3ac6ef3ff612867dfe8d061fd31f756082038f37df727"}, {"name":"googleapis-common-protos","version":"1.4.0","platform":"ruby","checksum":"da2380fb5ab1563580816c74e8d684ac17512c3654c829a3ee84f6d6139de382"}, -{"name":"googleapis-common-protos-types","version":"1.19.0","platform":"ruby","checksum":"aecb76ca5326f8bcc47ab083259bbc4971d07e87f56808af7e210669d9765694"}, +{"name":"googleapis-common-protos-types","version":"1.20.0","platform":"ruby","checksum":"5e374b06bcfc7e13556e7c0d87b99f1fa3d42de6396a1de3d8fc13aefb4dd07f"}, {"name":"googleauth","version":"1.8.1","platform":"ruby","checksum":"814adadaaa1221dce72a67131e3ecbd6d23491a161ec84fb15fd353b87d8c9e7"}, {"name":"gpgme","version":"2.0.24","platform":"ruby","checksum":"53eccd7042abb4fd5c78f30bc9ed075b1325e6450eab207f2f6a1e7e28ae3b64"}, {"name":"grape","version":"2.0.0","platform":"ruby","checksum":"3aeff94c17e84ccead4ff98833df691e7da0c108878cc128ca31f80c1047494a"}, diff --git a/Gemfile.next.lock b/Gemfile.next.lock index e8a5be430fbec6f49f90308a6f848ea6c578c330..976e87685bf94bfceeb526ca43e17e8f88f37e64 100644 --- a/Gemfile.next.lock +++ b/Gemfile.next.lock @@ -743,7 +743,7 @@ GEM git (1.19.1) addressable (~> 2.8) rchardet (~> 1.8) - gitaly (17.8.4) + gitaly (17.11.2) grpc (~> 1.0) gitlab (4.19.0) httparty (~> 0.20) @@ -924,7 +924,7 @@ GEM google-protobuf (~> 3.14) googleapis-common-protos-types (~> 1.2) grpc (~> 1.27) - googleapis-common-protos-types (1.19.0) + googleapis-common-protos-types (1.20.0) google-protobuf (>= 3.18, < 5.a) googleauth (1.8.1) faraday (>= 0.17.3, < 3.a) @@ -2159,7 +2159,7 @@ DEPENDENCIES gettext (~> 3.5, >= 3.5.1) gettext_i18n_rails (~> 1.13.0) git (~> 1.8) - gitaly (~> 17.8.0) + gitaly (~> 17.11.2) gitlab-active-context! gitlab-backup-cli! gitlab-chronic (~> 0.10.5) diff --git a/doc/api/openapi/openapi_v2.yaml b/doc/api/openapi/openapi_v2.yaml index 09d4499a81a2afbb6a5220bd98f28abc5d8b8e72..909644728c2ec0d81d9c12f1f9139a951faa8c75 100644 --- a/doc/api/openapi/openapi_v2.yaml +++ b/doc/api/openapi/openapi_v2.yaml @@ -62110,11 +62110,24 @@ definitions: size: type: integer format: int32 - description: Repository size in bytes. references: "$ref": "#/definitions/API_Entities_RepositoryHealth_References" objects: "$ref": "#/definitions/API_Entities_RepositoryHealth_Objects" + commit_graph: + "$ref": "#/definitions/API_Entities_RepositoryHealth_CommitGraph" + bitmap: + "$ref": "#/definitions/API_Entities_RepositoryHealth_Bitmap" + multi_pack_index: + "$ref": "#/definitions/API_Entities_RepositoryHealth_MultiPackIndex" + multi_pack_index_bitmap: + "$ref": "#/definitions/API_Entities_RepositoryHealth_Bitmap" + alternates: + type: object + is_object_pool: + type: boolean + last_full_repack: + "$ref": "#/definitions/API_Entities_RepositoryHealth_LastFullRepack" updated_at: type: string format: date-time @@ -62126,36 +62139,87 @@ definitions: loose_count: type: integer format: int32 - description: Number of loose references in the repository. packed_size: type: integer format: int32 - description: Size in bytes of packed references in the repository. reference_backend: type: string - description: Type of backend used to store references. Either 'REFERENCE_BACKEND_REFTABLE' - or 'REFERENCE_BACKEND_FILES'. API_Entities_RepositoryHealth_Objects: type: object properties: size: type: integer format: int32 - description: Size in bytes of all objects in the repository. recent_size: type: integer format: int32 - description: Size in bytes of all recent objects in the repository. Recent - objects are those which are reachable. stale_size: type: integer format: int32 - description: Size in bytes of all stale objects in the repository. Stale objects - are those which are unreachable and may be deleted during housekeeping. keep_size: type: integer format: int32 - description: Size in bytes of all packfiles with the .keep extension. + packfile_count: + type: integer + format: int32 + reverse_index_count: + type: integer + format: int32 + cruft_count: + type: integer + format: int32 + keep_count: + type: integer + format: int32 + loose_objects_count: + type: integer + format: int32 + stale_loose_objects_count: + type: integer + format: int32 + loose_objects_garbage_count: + type: integer + format: int32 + API_Entities_RepositoryHealth_CommitGraph: + type: object + properties: + commit_graph_chain_length: + type: integer + format: int32 + has_bloom_filters: + type: boolean + has_generation_data: + type: boolean + has_generation_data_overflow: + type: boolean + API_Entities_RepositoryHealth_Bitmap: + type: object + properties: + has_hash_cache: + type: boolean + has_lookup_table: + type: boolean + version: + type: integer + format: int32 + API_Entities_RepositoryHealth_MultiPackIndex: + type: object + properties: + packfile_count: + type: integer + format: int32 + version: + type: integer + format: int32 + API_Entities_RepositoryHealth_LastFullRepack: + type: object + properties: + seconds: + type: integer + format: int32 + nanos: + type: integer + format: int32 API_Entities_Contributor: type: object properties: diff --git a/doc/api/repositories.md b/doc/api/repositories.md index 3aab7b600010599f64d3c4616ba5d5a2b6359fa9..426aea15ad0e8c19f12eef31c7bca7b116787b21 100644 --- a/doc/api/repositories.md +++ b/doc/api/repositories.md @@ -534,6 +534,7 @@ Example response, with line breaks added for readability: - [Introduced](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/182220) in GitLab 17.10. Guarded behind the [project_repositories_health](https://gitlab.com/gitlab-org/gitlab/-/issues/521115) feature flag. +- New fields [added](https://gitlab.com/gitlab-org/gitlab/-/merge_requests/191263) in GitLab 18.1. {{< /history >}} @@ -560,22 +561,55 @@ Example response: ```json { - "size": 42002816, + "size": 2619748827, "references": { - "loose_count": 3, - "packed_size": 315703, + "loose_count": 13, + "packed_size": 333978, "reference_backend": "REFERENCE_BACKEND_FILES" }, "objects": { - "size": 39651458, - "recent_size": 39461265, - "stale_size": 190193, - "keep_size": 0 + "size": 2180475409, + "recent_size": 2180453999, + "stale_size": 21410, + "keep_size": 0, + "packfile_count": 1, + "reverse_index_count": 1, + "cruft_count": 0, + "keep_count": 0, + "loose_objects_count": 36, + "stale_loose_objects_count": 36, + "loose_objects_garbage_count": 0 }, - "updated_at": "2025-02-26T03:42:13.015Z" + "commit_graph": { + "commit_graph_chain_length": 1, + "has_bloom_filters": true, + "has_generation_data": true, + "has_generation_data_overflow": false + }, + "bitmap": null, + "multi_pack_index": { + "packfile_count": 1, + "version": 1 + }, + "multi_pack_index_bitmap": { + "has_hash_cache": true, + "has_lookup_table": true, + "version": 1 + }, + "alternates": null, + "is_object_pool": false, + "last_full_repack": { + "seconds": 1745892013, + "nanos": 0 + }, + "updated_at": "2025-05-14T02:31:08.022Z" } ``` +For a description of each field in the response, see the +[`RepositoryInfoResponse`](https://gitlab.com/gitlab-org/gitaly/blob/fcb986a6482f82b088488db3ed7ca35adfa42fdc/proto/repository.proto#L444) +protobuf message. + ## Related topics - User documentation for [changelogs](../user/project/changelogs.md) diff --git a/lib/api/entities/repository_health.rb b/lib/api/entities/repository_health.rb index c3c738a510c719e09f7c40aef979ef11c9528f5c..465dc2eb1364b9b8c544882bb84c4126d20d1071 100644 --- a/lib/api/entities/repository_health.rb +++ b/lib/api/entities/repository_health.rb @@ -2,36 +2,93 @@ module API module Entities - # rubocop:disable Layout/LineLength -- `desc` is too long class RepositoryHealth < Grape::Entity class References < Grape::Entity expose :loose_count, - documentation: { type: 'integer', desc: 'Number of loose references in the repository.' } + documentation: { type: 'integer' } expose :packed_size, - documentation: { type: 'integer', desc: 'Size in bytes of packed references in the repository.' } + documentation: { type: 'integer' } expose :reference_backend, - documentation: { type: 'string', - desc: "Type of backend used to store references. Either 'REFERENCE_BACKEND_REFTABLE' or 'REFERENCE_BACKEND_FILES'." } + documentation: { type: 'string' } end class Objects < Grape::Entity expose :size, - documentation: { type: 'integer', desc: 'Size in bytes of all objects in the repository.' } + documentation: { type: 'integer' } expose :recent_size, - documentation: { type: 'integer', - desc: 'Size in bytes of all recent objects in the repository. Recent objects are those which are reachable.' } + documentation: { type: 'integer' } expose :stale_size, - documentation: { type: 'integer', - desc: 'Size in bytes of all stale objects in the repository. Stale objects are those which are unreachable and may be deleted during housekeeping.' } + documentation: { type: 'integer' } expose :keep_size, - documentation: { type: 'integer', desc: 'Size in bytes of all packfiles with the .keep extension.' } + documentation: { type: 'integer' } + expose :packfile_count, + documentation: { type: 'integer' } + expose :reverse_index_count, + documentation: { type: 'integer' } + expose :cruft_count, + documentation: { type: 'integer' } + expose :keep_count, + documentation: { type: 'integer' } + expose :loose_objects_count, + documentation: { type: 'integer' } + expose :stale_loose_objects_count, + documentation: { type: 'integer' } + expose :loose_objects_garbage_count, + documentation: { type: 'integer' } end - expose :size, documentation: { type: 'integer', desc: 'Repository size in bytes.' } + class CommitGraph < Grape::Entity + expose :commit_graph_chain_length, + documentation: { type: 'integer' } + expose :has_bloom_filters, + documentation: { type: 'boolean' } + expose :has_generation_data, + documentation: { type: 'boolean' } + expose :has_generation_data_overflow, + documentation: { type: 'boolean' } + end + + class MultiPackIndex < Grape::Entity + expose :packfile_count, + documentation: { type: 'integer' } + expose :version, + documentation: { type: 'integer' } + end + + class Bitmap < Grape::Entity + expose :has_hash_cache, + documentation: { type: 'boolean' } + expose :has_lookup_table, + documentation: { type: 'boolean' } + expose :version, + documentation: { type: 'integer' } + end + + class AlternatesInfo < Grape::Entity + expose :object_directories, + documentation: { type: 'array', items: { type: 'string' } } + expose :last_modified, + documentation: { type: 'dateTime', example: '2025-02-24T09:05:50.355Z' } + end + + class LastFullRepack < Grape::Entity + expose :seconds, + documentation: { type: 'integer' } + expose :nanos, + documentation: { type: 'integer' } + end + + expose :size, documentation: { type: 'integer' } expose :references, using: References expose :objects, using: Objects + expose :commit_graph, using: CommitGraph + expose :bitmap, using: Bitmap + expose :multi_pack_index, using: MultiPackIndex + expose :multi_pack_index_bitmap, using: Bitmap + expose :alternates, documentation: { type: 'object', example: nil } + expose :is_object_pool, documentation: { type: 'boolean' } + expose :last_full_repack, using: LastFullRepack expose :updated_at, documentation: { type: 'dateTime', example: '2025-02-24T09:05:50.355Z' } end - # rubocop:enable Layout/LineLength end end