This is an automated email from the ASF dual-hosted git repository.
mchades pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new ea372a9565 [#14666] docs(open-api): Align fileset, topic and partition
contracts (#14667)
ea372a9565 is described below
commit ea372a9565bcf19d0b5fcd268d53b6da198cfa29
Author: mchades <[email protected]>
AuthorDate: Fri Nov 6 20:25:46 2026 +0800
[#14666] docs(open-api): Align fileset, topic and partition contracts
(#14667)
### What changes were proposed in this pull request?
- Document fileset default-location selection, including inherited
locations; add `removeComment`, missing-location errors and
disabled-filesystem behavior.
- Add shared 403/406 responses and operation-specific 501 responses with
JSON error examples.
- Clarify authorization-dependent 404 responses and partition purge
support; remove the inapplicable `alterTopic` already-exists 409
response.
### Why are the changes needed?
The OpenAPI definitions omit supported requests and error responses and
contain incorrect defaults.
Fixes #14666
### Does this PR introduce _any_ user-facing change?
Documentation/OpenAPI changes only. Server behavior is unchanged.
### How was this patch tested?
- `./gradlew :docs:spotlessApply :docs:build`.
- 42 existing tests passed: `TestVersioningFilter`,
`TestWebApplicationExceptionMapper`, and selected
`TestFilesetCatalogOperations` cases.
- Validated 16 operations, 72 error-example references, two create
examples and the `removeComment` schema.
- `git diff --check`.
Full server, Kafka and Hive integration tests were not run.
---
docs/open-api/filesets.yaml | 171 ++++++++++++++++++++++++++++++++++++------
docs/open-api/openapi.yaml | 37 +++++++++
docs/open-api/partitions.yaml | 69 +++++++++++++++--
docs/open-api/topics.yaml | 72 +++++++++++++-----
4 files changed, 299 insertions(+), 50 deletions(-)
diff --git a/docs/open-api/filesets.yaml b/docs/open-api/filesets.yaml
index 673e1047f0..c41238e88f 100644
--- a/docs/open-api/filesets.yaml
+++ b/docs/open-api/filesets.yaml
@@ -35,7 +35,11 @@ paths:
$ref: "./openapi.yaml#/components/responses/EntityListResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
- "5xx":
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
post:
@@ -51,9 +55,17 @@ paths:
examples:
FilesetCreateRequest:
$ref: "#/components/examples/FilesetCreateRequest"
+ MultipleLocationsFilesetCreateRequest:
+ $ref:
"#/components/examples/MultipleLocationsFilesetCreateRequest"
responses:
"200":
$ref: "#/components/responses/FilesetResponse"
+ "400":
+ $ref: "#/components/responses/FilesetCreateBadRequestResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
"409":
description: Conflict - The target fileset already exists
content:
@@ -63,7 +75,7 @@ paths:
examples:
FilesetAlreadyExistsErrorResponse:
$ref: "#/components/examples/FilesetAlreadyExistsException"
- "5xx":
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
@@ -83,10 +95,14 @@ paths:
responses:
"200":
$ref: "#/components/responses/FilesetResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
"404":
- description: Not Found - The target fileset does not exist
+ description: >-
+ Not Found - The fileset or its parent resource does not exist.
When authorization
+ is enabled, a missing metalake returns 403 instead.
content:
- application/vnd.gravitino.v1+json:
+ application/json:
schema:
$ref: "./openapi.yaml#/components/schemas/ErrorModel"
examples:
@@ -98,7 +114,9 @@ paths:
$ref:
"./schemas.yaml#/components/examples/NoSuchSchemaException"
NoSuchFilesetException:
$ref: "#/components/examples/NoSuchFilesetException"
- "5xx":
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
put:
@@ -117,10 +135,14 @@ paths:
$ref: "#/components/responses/FilesetResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
"404":
- description: Not Found - The target fileset does not exist
+ description: >-
+ Not Found - The fileset or its parent resource does not exist.
When authorization
+ is enabled, a missing metalake returns 403 instead.
content:
- application/vnd.gravitino.v1+json:
+ application/json:
schema:
$ref: "./openapi.yaml#/components/schemas/ErrorModel"
examples:
@@ -132,6 +154,8 @@ paths:
$ref:
"./schemas.yaml#/components/examples/NoSuchSchemaException"
NoSuchFilesetException:
$ref: "#/components/examples/NoSuchFilesetException"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
"409":
description: Conflict - The target fileset already exists
content:
@@ -141,7 +165,7 @@ paths:
examples:
FilesetAlreadyExistsErrorResponse:
$ref: "#/components/examples/FilesetAlreadyExistsException"
- "5xx":
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
delete:
@@ -154,7 +178,11 @@ paths:
$ref: "./openapi.yaml#/components/responses/DropResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
- "5xx":
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
/metalakes/{metalake}/catalogs/{catalog}/schemas/{schema}/filesets/{fileset}/location:
@@ -169,7 +197,10 @@ paths:
- location
summary: Get file location
operationId: getFileLocation
- description: Returns the specified file location object
+ description: >-
+ Returns the specified file location object by resolving the storage
location and
+ sub path. This operation remains available when the catalog property
+ disable-filesystem-ops is true because it does not access the
filesystem.
parameters:
- name: sub_path
in: query
@@ -187,17 +218,23 @@ paths:
required: false
schema:
type: string
- default: "default"
- description: The location name in the fileset
+ description: >-
+ The location name in the fileset. When omitted, the server uses
the only storage
+ location, or properties.default-location-name if there are
multiple locations.
+ An unknown name returns HTTP 404 with NoSuchLocationNameException.
responses:
"200":
$ref: "#/components/responses/FileLocationResponse"
"400":
$ref: "#/components/responses/InvalidSubPathErrorResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
"404":
- description: Not Found - The target fileset does not exist
+ description: >-
+ Not Found - The fileset, its parent resource, or the specified
location name
+ does not exist. When authorization is enabled, a missing metalake
returns 403 instead.
content:
- application/vnd.gravitino.v1+json:
+ application/json:
schema:
$ref: "./openapi.yaml#/components/schemas/ErrorModel"
examples:
@@ -209,7 +246,11 @@ paths:
$ref:
"./schemas.yaml#/components/examples/NoSuchSchemaException"
NoSuchFilesetException:
$ref: "#/components/examples/NoSuchFilesetException"
- "5xx":
+ NoSuchLocationNameException:
+ $ref: "#/components/examples/NoSuchLocationNameException"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
/metalakes/{metalake}/catalogs/{catalog}/schemas/{schema}/filesets/{fileset}/files:
@@ -224,7 +265,10 @@ paths:
- fileset
summary: List files
operationId: listFilesetFiles
- description: List metadata of files and directories in a fileset
+ description: >-
+ Lists metadata of files and directories in a fileset. Returns HTTP 501
when the
+ catalog property disable-filesystem-ops is true. The getFileLocation
operation
+ remains available in that configuration.
parameters:
- name: sub_path
in: query
@@ -244,16 +288,23 @@ paths:
required: false
schema:
type: string
- description: The name of the storage location
+ description: >-
+ The location name in the fileset. When omitted, the server uses
the only storage
+ location, or properties.default-location-name if there are
multiple locations.
+ An unknown name returns HTTP 404 with NoSuchLocationNameException.
responses:
"200":
$ref: "#/components/responses/FileInfoListResponse"
"400":
$ref: "#/components/responses/InvalidSubPathErrorResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
"404":
- description: Not Found – the target fileset or locationName does not
exist
+ description: >-
+ Not Found - The fileset, its parent resource, or the specified
location name
+ does not exist. When authorization is enabled, a missing metalake
returns 403 instead.
content:
- application/vnd.gravitino.v1+json:
+ application/json:
schema:
$ref: "./openapi.yaml#/components/schemas/ErrorModel"
examples:
@@ -265,7 +316,13 @@ paths:
$ref:
"./schemas.yaml#/components/examples/NoSuchSchemaException"
NoSuchFilesetException:
$ref: "#/components/examples/NoSuchFilesetException"
- "5xx":
+ NoSuchLocationNameException:
+ $ref: "#/components/examples/NoSuchLocationNameException"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref:
"#/components/responses/FilesystemOperationsDisabledErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
components:
@@ -343,22 +400,41 @@ components:
nullable: true
storageLocation:
type: string
- description: The location of the fileset. If the storage location of
managed fileset is empty, it will \
- use the location of namespace. The storage location of external
fileset must be set.
+ description: >-
+ The location of the fileset. When omitted for a managed fileset,
the location is
+ derived from its schema, which may inherit locations from the
catalog. External
+ filesets must specify a storage location.
nullable: true
storageLocations:
type: object
- description: The storage locations of the fileset. If the storage
location of managed fileset is empty, \
- it will use the location of namespace. The storage locations of
external fileset must be set.
+ description: >-
+ The named storage locations of the fileset. Locations are resolved
by name:
+ request locations override schema locations, which override
catalog locations
+ with the same name. Other inherited location names are retained.
Managed filesets
+ may omit storageLocations and use locations derived from their
schema and catalog.
+ External filesets must specify storage locations. When the
resulting fileset has
+ more than one location, including inherited locations, properties
must include
+ default-location-name with a value matching one of the resolved
location keys.
nullable: true
default: { }
additionalProperties:
type: string
properties:
type: object
- description: The properties of the fileset. Can be empty.
+ description: >-
+ The properties of the fileset. When the resulting fileset has
multiple storage locations,
+ default-location-name is required and must match one of the
resolved location keys;
+ otherwise creation returns HTTP 400. Managed filesets may inherit
locations from the
+ schema or catalog even when storageLocations is omitted.
nullable: true
default: {}
+ properties:
+ default-location-name:
+ type: string
+ description: >-
+ The default storage location key. Required when there is more
than one resolved
+ storage location. For a single location, the server fills in
that location's key when
+ this property is omitted; an explicit value must match that
key.
additionalProperties:
type: string
secretBindings:
@@ -393,6 +469,7 @@ components:
- $ref: "#/components/schemas/RenameFilesetRequest"
- $ref: "#/components/schemas/SetFilesetPropertyRequest"
- $ref: "#/components/schemas/UpdateFilesetCommentRequest"
+ - $ref: "#/components/schemas/RemoveFilesetCommentRequest"
- $ref: "#/components/schemas/UpdateFilesetTypeRequest"
- $ref: "#/components/schemas/RemoveFilesetPropertyRequest"
- $ref: "#/components/schemas/SetFilesetSecretBindingRequest"
@@ -403,6 +480,7 @@ components:
rename: "#/components/schemas/RenameFilesetRequest"
setProperty: "#/components/schemas/SetFilesetPropertyRequest"
updateComment: "#/components/schemas/UpdateFilesetCommentRequest"
+ removeComment: "#/components/schemas/RemoveFilesetCommentRequest"
updateType: "#/components/schemas/UpdateFilesetTypeRequest"
removeProperty: "#/components/schemas/RemoveFilesetPropertyRequest"
setSecretBinding:
"#/components/schemas/SetFilesetSecretBindingRequest"
@@ -593,6 +671,32 @@ components:
}
responses:
+ FilesetCreateBadRequestResponse:
+ description: >-
+ Bad Request - The fileset creation request is invalid. For multiple
storage
+ locations, properties.default-location-name must name one of the
location keys.
+ content:
+ application/json:
+ schema:
+ $ref: "./openapi.yaml#/components/schemas/ErrorModel"
+ example:
+ code: 1001
+ type: IllegalArgumentException
+ message: >-
+ The fileset property default-location-name must be set and must
be one of
+ the fileset locations, location names: [primary, secondary],
default location name: null
+
+ FilesystemOperationsDisabledErrorResponse:
+ description: Not Implemented - Filesystem operations are disabled by the
catalog property disable-filesystem-ops
+ content:
+ application/json:
+ schema:
+ $ref: "./openapi.yaml#/components/schemas/ErrorModel"
+ example:
+ code: 1006
+ type: UnsupportedOperationException
+ message: Filesystem operations are disabled on this server
+
InvalidSubPathErrorResponse:
description: >-
The sub path does not satisfy the fileset path requirements.
@@ -677,6 +781,17 @@ components:
}
}
+ MultipleLocationsFilesetCreateRequest:
+ value:
+ name: fileset1
+ type: EXTERNAL
+ comment: A fileset with two storage locations
+ storageLocations:
+ primary: s3://bucket/path
+ secondary: s3://other-bucket/path
+ properties:
+ default-location-name: primary
+
FilesetResponse:
value: {
"code": 0,
@@ -738,3 +853,9 @@ components:
"java.lang.NoSuchFilesetException: Fileset does not exist"
]
}
+
+ NoSuchLocationNameException:
+ value:
+ code: 1003
+ type: NoSuchLocationNameException
+ message: Location name missing does not exist in fileset fileset1
diff --git a/docs/open-api/openapi.yaml b/docs/open-api/openapi.yaml
index 67bd9ee69d..9e4d335f33 100644
--- a/docs/open-api/openapi.yaml
+++ b/docs/open-api/openapi.yaml
@@ -422,6 +422,43 @@ components:
"message": "Malformed request"
}
+ ForbiddenErrorResponse:
+ description: >-
+ Forbidden - The caller is not allowed to perform the operation. When
authorization
+ is enabled, a missing metalake or a caller who is not a member of the
metalake
+ also returns 403.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ example:
+ code: 1008
+ type: ForbiddenException
+ message: Current user alice is not a member of metalake metalake1,
or the metalake does not exist
+
+ NotAcceptableErrorResponse:
+ description: >-
+ Not Acceptable - The requested API version is unsupported, or the
effective
+ Accept header cannot be served by this operation. When Accept has no
Gravitino
+ API version, including application/json, */*, or an absent header, the
server
+ uses the version from Content-Type if present, otherwise the default
API version.
+ Both cases return HTTP 406 with a JSON ErrorModel response.
+ content:
+ application/json:
+ schema:
+ $ref: "#/components/schemas/ErrorModel"
+ examples:
+ UnsupportedApiVersion:
+ value:
+ code: 1001
+ type: IllegalArgumentException
+ message: Unsupported version v99 in request header
+ IncompatibleAccept:
+ value:
+ code: 1000
+ type: RESTException
+ message: HTTP 406 Not Acceptable
+
ServerErrorResponse:
description:
A server-side problem that might not be addressable from the client
diff --git a/docs/open-api/partitions.yaml b/docs/open-api/partitions.yaml
index 45fdd54dd0..1f9072652b 100644
--- a/docs/open-api/partitions.yaml
+++ b/docs/open-api/partitions.yaml
@@ -49,7 +49,13 @@ paths:
$ref: "#/components/examples/PartitionListResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
- "5xx":
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref:
"#/components/responses/PartitionUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
post:
@@ -68,6 +74,10 @@ paths:
responses:
"200":
$ref: "#/components/responses/PartitionListResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
"409":
description: Conflict - The target partition already exists
content:
@@ -77,7 +87,9 @@ paths:
examples:
PartitionAlreadyExistsErrorResponse:
$ref:
"#/components/examples/PartitionAlreadyExistsErrorResponse"
- "5xx":
+ "501":
+ $ref:
"#/components/responses/PartitionUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
/metalakes/{metalake}/catalogs/{catalog}/schemas/{schema}/tables/{table}/partitions/{partition}:
@@ -97,10 +109,14 @@ paths:
responses:
"200":
$ref: "#/components/responses/PartitionResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
"404":
- description: Not Found - The specified partition does not exist
+ description: >-
+ Not Found - The partition or its parent resource does not exist.
When authorization
+ is enabled, a missing metalake returns 403 instead.
content:
- application/vnd.gravitino.v1+json:
+ application/json:
schema:
$ref: "./openapi.yaml#/components/schemas/ErrorModel"
examples:
@@ -114,7 +130,11 @@ paths:
$ref:
"./tables.yaml#/components/examples/NoSuchTableException"
NoSuchPartitionException:
$ref: "#/components/examples/NoSuchPartitionException"
- "5xx":
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref:
"#/components/responses/PartitionUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
delete:
@@ -130,7 +150,13 @@ paths:
$ref: "./openapi.yaml#/components/responses/DropResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
- "5xx":
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref:
"#/components/responses/PartitionUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
@@ -148,7 +174,9 @@ components:
purge:
name: purge
in: query
- description: Purge the partition data
+ description: >-
+ Purge the partition data. Support depends on the catalog provider.
Setting this
+ parameter to true returns HTTP 501 if the provider does not support
partition purging.
required: false
schema:
type: boolean
@@ -347,6 +375,33 @@ components:
$ref: "#/components/schemas/Properties"
responses:
+ PartitionUnsupportedOperationErrorResponse:
+ description: >-
+ Not Implemented - The table does not support partition operations or
the requested
+ partition operation is unsupported. For DELETE with purge=true, this
also includes
+ tables that do not support partition purging.
+ content:
+ application/json:
+ schema:
+ $ref: "./openapi.yaml#/components/schemas/ErrorModel"
+ examples:
+ PartitionOperationsUnsupported:
+ summary: The table does not support partition operations
+ value:
+ code: 1006
+ type: UnsupportedOperationException
+ message: >-
+ Failed to operate partition(s) operation [LIST] of table
[table1], reason
+ [Table does not support partition operations.]
+ PartitionPurgeUnsupported:
+ summary: Partition purging is unsupported for DELETE with
purge=true
+ value:
+ code: 1006
+ type: UnsupportedOperationException
+ message: >-
+ Failed to operate partition(s) operation [DROP] of table
[table1], reason
+ [Partition purging is not supported]
+
PartitionListResponse:
description: Returns list of partition objects
diff --git a/docs/open-api/topics.yaml b/docs/open-api/topics.yaml
index 3b721d9bef..c2af306db5 100644
--- a/docs/open-api/topics.yaml
+++ b/docs/open-api/topics.yaml
@@ -35,7 +35,13 @@ paths:
$ref: "./openapi.yaml#/components/responses/EntityListResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
- "5xx":
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref: "#/components/responses/TopicUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
post:
@@ -56,6 +62,10 @@ paths:
$ref: "#/components/responses/TopicResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
"409":
description: Conflict - The target topic already exists
content:
@@ -65,7 +75,9 @@ paths:
examples:
TopicAlreadyExistsErrorResponse:
$ref: "#/components/examples/TopicAlreadyExistsException"
- "5xx":
+ "501":
+ $ref: "#/components/responses/TopicUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
/metalakes/{metalake}/catalogs/{catalog}/schemas/{schema}/topics/{topic}:
@@ -84,10 +96,14 @@ paths:
responses:
"200":
$ref: "#/components/responses/TopicResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
"404":
- description: Not Found - The target topic does not exist
+ description: >-
+ Not Found - The topic or its parent resource does not exist. When
authorization
+ is enabled, a missing metalake returns 403 instead.
content:
- application/vnd.gravitino.v1+json:
+ application/json:
schema:
$ref: "./openapi.yaml#/components/schemas/ErrorModel"
examples:
@@ -99,7 +115,11 @@ paths:
$ref:
"./schemas.yaml#/components/examples/NoSuchSchemaException"
NoSuchTopicException:
$ref: "#/components/examples/NoSuchTopicException"
- "5xx":
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref: "#/components/responses/TopicUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
put:
@@ -118,10 +138,14 @@ paths:
$ref: "#/components/responses/TopicResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
"404":
- description: Not Found - The target topic does not exist
+ description: >-
+ Not Found - The topic or its parent resource does not exist. When
authorization
+ is enabled, a missing metalake returns 403 instead.
content:
- application/vnd.gravitino.v1+json:
+ application/json:
schema:
$ref: "./openapi.yaml#/components/schemas/ErrorModel"
examples:
@@ -133,16 +157,11 @@ paths:
$ref:
"./schemas.yaml#/components/examples/NoSuchSchemaException"
NoSuchTopicException:
$ref: "#/components/examples/NoSuchTopicException"
- "409":
- description: Conflict - The target topic already exists
- content:
- application/vnd.gravitino.v1+json:
- schema:
- $ref: "./openapi.yaml#/components/schemas/ErrorModel"
- examples:
- TopicAlreadyExistsErrorResponse:
- $ref: "#/components/examples/TopicAlreadyExistsException"
- "5xx":
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref: "#/components/responses/TopicUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
delete:
@@ -155,7 +174,13 @@ paths:
$ref: "./openapi.yaml#/components/responses/DropResponse"
"400":
$ref: "./openapi.yaml#/components/responses/BadRequestErrorResponse"
- "5xx":
+ "403":
+ $ref: "./openapi.yaml#/components/responses/ForbiddenErrorResponse"
+ "406":
+ $ref:
"./openapi.yaml#/components/responses/NotAcceptableErrorResponse"
+ "501":
+ $ref: "#/components/responses/TopicUnsupportedOperationErrorResponse"
+ "5XX":
$ref: "./openapi.yaml#/components/responses/ServerErrorResponse"
components:
@@ -282,6 +307,17 @@ components:
}
responses:
+ TopicUnsupportedOperationErrorResponse:
+ description: Not Implemented - The catalog does not support topic
operations or the requested topic operation
+ content:
+ application/json:
+ schema:
+ $ref: "./openapi.yaml#/components/schemas/ErrorModel"
+ example:
+ code: 1006
+ type: UnsupportedOperationException
+ message: Catalog does not support topic operations
+
TopicResponse:
description: Returns include the topic object
content: