Skip to content

Commit 7574fe9

Browse files
authored
fix: pass manifest naming scheme to create_table_versions (#307)
1 parent 037bba8 commit 7574fe9

11 files changed

Lines changed: 148 additions & 8 deletions

File tree

docs/src/client/operations/models/CreateTableVersionRequest.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Request to create a new table version entry. This supports `put_if_not_exists` s
1616
|**manifestSize** | **Long** | Size of the manifest file in bytes | [optional] |
1717
|**eTag** | **String** | Optional ETag for the manifest file | [optional] |
1818
|**metadata** | **Map<String, String>** | Optional metadata for the version | [optional] |
19+
|**namingScheme** | **String** | The naming scheme used for manifest files in the `_versions/` directory. Known values: - `V1`: `_versions/{version}.manifest` - Simple version-based naming - `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number (uses `u64::MAX - version`) for O(1) lookup of latest version on object stores V2 is preferred for new tables as it enables efficient latest-version discovery without needing to list all versions. | [optional] |
1920

2021

2122

docs/src/rest.yaml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3931,6 +3931,8 @@ components:
39313931
additionalProperties:
39323932
type: string
39333933
description: Optional metadata for the version
3934+
naming_scheme:
3935+
$ref: "#/components/schemas/ManifestNamingScheme"
39343936

39353937
CreateTableVersionResponse:
39363938
type: object
@@ -4066,6 +4068,20 @@ components:
40664068
type: string
40674069
description: Optional key-value pairs of metadata
40684070

4071+
ManifestNamingScheme:
4072+
type: string
4073+
description: |
4074+
The naming scheme used for manifest files in the `_versions/` directory.
4075+
4076+
Known values:
4077+
- `V1`: `_versions/{version}.manifest` - Simple version-based naming
4078+
- `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number
4079+
(uses `u64::MAX - version`) for O(1) lookup of latest version on object stores
4080+
4081+
V2 is preferred for new tables as it enables efficient latest-version discovery
4082+
without needing to list all versions.
4083+
example: V2
4084+
40694085
ExplainTableQueryPlanRequest:
40704086
type: object
40714087
required:

java/lance-namespace-apache-client/api/openapi.yaml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5732,6 +5732,7 @@ components:
57325732
This supports `put_if_not_exists` semantics,
57335733
where the operation fails if the version already exists.
57345734
example:
5735+
naming_scheme: V2
57355736
metadata:
57365737
key: metadata
57375738
manifest_path: manifest_path
@@ -5785,6 +5786,19 @@ components:
57855786
additionalProperties:
57865787
type: string
57875788
description: Optional metadata for the version
5789+
naming_scheme:
5790+
description: |
5791+
The naming scheme used for manifest files in the `_versions/` directory.
5792+
5793+
Known values:
5794+
- `V1`: `_versions/{version}.manifest` - Simple version-based naming
5795+
- `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number
5796+
(uses `u64::MAX - version`) for O(1) lookup of latest version on object stores
5797+
5798+
V2 is preferred for new tables as it enables efficient latest-version discovery
5799+
without needing to list all versions.
5800+
example: V2
5801+
type: string
57885802
required:
57895803
- manifest_path
57905804
- version
@@ -5981,6 +5995,19 @@ components:
59815995
required:
59825996
- manifest_path
59835997
- version
5998+
ManifestNamingScheme:
5999+
description: |
6000+
The naming scheme used for manifest files in the `_versions/` directory.
6001+
6002+
Known values:
6003+
- `V1`: `_versions/{version}.manifest` - Simple version-based naming
6004+
- `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number
6005+
(uses `u64::MAX - version`) for O(1) lookup of latest version on object stores
6006+
6007+
V2 is preferred for new tables as it enables efficient latest-version discovery
6008+
without needing to list all versions.
6009+
example: V2
6010+
type: string
59846011
ExplainTableQueryPlanRequest:
59856012
example:
59866013
identity:

java/lance-namespace-apache-client/docs/CreateTableVersionRequest.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ Request to create a new table version entry. This supports `put_if_not_exists` s
1616
|**manifestSize** | **Long** | Size of the manifest file in bytes | [optional] |
1717
|**eTag** | **String** | Optional ETag for the manifest file | [optional] |
1818
|**metadata** | **Map<String, String>** | Optional metadata for the version | [optional] |
19+
|**namingScheme** | **String** | The naming scheme used for manifest files in the `_versions/` directory. Known values: - `V1`: `_versions/{version}.manifest` - Simple version-based naming - `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number (uses `u64::MAX - version`) for O(1) lookup of latest version on object stores V2 is preferred for new tables as it enables efficient latest-version discovery without needing to list all versions. | [optional] |
1920

2021

2122

java/lance-namespace-apache-client/src/main/java/org/lance/namespace/model/CreateTableVersionRequest.java

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
CreateTableVersionRequest.JSON_PROPERTY_MANIFEST_PATH,
3939
CreateTableVersionRequest.JSON_PROPERTY_MANIFEST_SIZE,
4040
CreateTableVersionRequest.JSON_PROPERTY_E_TAG,
41-
CreateTableVersionRequest.JSON_PROPERTY_METADATA
41+
CreateTableVersionRequest.JSON_PROPERTY_METADATA,
42+
CreateTableVersionRequest.JSON_PROPERTY_NAMING_SCHEME
4243
})
4344
@javax.annotation.Generated(
4445
value = "org.openapitools.codegen.languages.JavaClientCodegen",
@@ -68,6 +69,9 @@ public class CreateTableVersionRequest {
6869
public static final String JSON_PROPERTY_METADATA = "metadata";
6970
@javax.annotation.Nullable private Map<String, String> metadata = new HashMap<>();
7071

72+
public static final String JSON_PROPERTY_NAMING_SCHEME = "naming_scheme";
73+
@javax.annotation.Nullable private String namingScheme;
74+
7175
public CreateTableVersionRequest() {}
7276

7377
public CreateTableVersionRequest identity(@javax.annotation.Nullable Identity identity) {
@@ -291,6 +295,35 @@ public void setMetadata(@javax.annotation.Nullable Map<String, String> metadata)
291295
this.metadata = metadata;
292296
}
293297

298+
public CreateTableVersionRequest namingScheme(@javax.annotation.Nullable String namingScheme) {
299+
300+
this.namingScheme = namingScheme;
301+
return this;
302+
}
303+
304+
/**
305+
* The naming scheme used for manifest files in the &#x60;_versions/&#x60; directory. Known
306+
* values: - &#x60;V1&#x60;: &#x60;_versions/{version}.manifest&#x60; - Simple version-based
307+
* naming - &#x60;V2&#x60;: &#x60;_versions/{inverted_version}.manifest&#x60; - Zero-padded,
308+
* reversed version number (uses &#x60;u64::MAX - version&#x60;) for O(1) lookup of latest version
309+
* on object stores V2 is preferred for new tables as it enables efficient latest-version
310+
* discovery without needing to list all versions.
311+
*
312+
* @return namingScheme
313+
*/
314+
@javax.annotation.Nullable
315+
@JsonProperty(JSON_PROPERTY_NAMING_SCHEME)
316+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
317+
public String getNamingScheme() {
318+
return namingScheme;
319+
}
320+
321+
@JsonProperty(JSON_PROPERTY_NAMING_SCHEME)
322+
@JsonInclude(value = JsonInclude.Include.USE_DEFAULTS)
323+
public void setNamingScheme(@javax.annotation.Nullable String namingScheme) {
324+
this.namingScheme = namingScheme;
325+
}
326+
294327
@Override
295328
public boolean equals(Object o) {
296329
if (this == o) {
@@ -307,12 +340,14 @@ public boolean equals(Object o) {
307340
&& Objects.equals(this.manifestPath, createTableVersionRequest.manifestPath)
308341
&& Objects.equals(this.manifestSize, createTableVersionRequest.manifestSize)
309342
&& Objects.equals(this.eTag, createTableVersionRequest.eTag)
310-
&& Objects.equals(this.metadata, createTableVersionRequest.metadata);
343+
&& Objects.equals(this.metadata, createTableVersionRequest.metadata)
344+
&& Objects.equals(this.namingScheme, createTableVersionRequest.namingScheme);
311345
}
312346

313347
@Override
314348
public int hashCode() {
315-
return Objects.hash(identity, context, id, version, manifestPath, manifestSize, eTag, metadata);
349+
return Objects.hash(
350+
identity, context, id, version, manifestPath, manifestSize, eTag, metadata, namingScheme);
316351
}
317352

318353
@Override
@@ -327,6 +362,7 @@ public String toString() {
327362
sb.append(" manifestSize: ").append(toIndentedString(manifestSize)).append("\n");
328363
sb.append(" eTag: ").append(toIndentedString(eTag)).append("\n");
329364
sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n");
365+
sb.append(" namingScheme: ").append(toIndentedString(namingScheme)).append("\n");
330366
sb.append("}");
331367
return sb.toString();
332368
}
@@ -505,6 +541,22 @@ public String toUrlQueryString(String prefix) {
505541
}
506542
}
507543

544+
// add `naming_scheme` to the URL query string
545+
if (getNamingScheme() != null) {
546+
try {
547+
joiner.add(
548+
String.format(
549+
"%snaming_scheme%s=%s",
550+
prefix,
551+
suffix,
552+
URLEncoder.encode(String.valueOf(getNamingScheme()), "UTF-8")
553+
.replaceAll("\\+", "%20")));
554+
} catch (UnsupportedEncodingException e) {
555+
// Should never happen, UTF-8 is always supported
556+
throw new RuntimeException(e);
557+
}
558+
}
559+
508560
return joiner.toString();
509561
}
510562
}

java/lance-namespace-springboot-server/src/main/java/org/lance/namespace/server/springboot/model/CreateTableVersionRequest.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ public class CreateTableVersionRequest {
5555

5656
@Valid private Map<String, String> metadata = new HashMap<>();
5757

58+
private String namingScheme;
59+
5860
public CreateTableVersionRequest() {
5961
super();
6062
}
@@ -279,6 +281,35 @@ public void setMetadata(Map<String, String> metadata) {
279281
this.metadata = metadata;
280282
}
281283

284+
public CreateTableVersionRequest namingScheme(String namingScheme) {
285+
this.namingScheme = namingScheme;
286+
return this;
287+
}
288+
289+
/**
290+
* The naming scheme used for manifest files in the `_versions/` directory. Known values: - `V1`:
291+
* `_versions/{version}.manifest` - Simple version-based naming - `V2`:
292+
* `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number (uses `u64::MAX
293+
* - version`) for O(1) lookup of latest version on object stores V2 is preferred for new tables
294+
* as it enables efficient latest-version discovery without needing to list all versions.
295+
*
296+
* @return namingScheme
297+
*/
298+
@Schema(
299+
name = "naming_scheme",
300+
example = "V2",
301+
description =
302+
"The naming scheme used for manifest files in the `_versions/` directory. Known values: - `V1`: `_versions/{version}.manifest` - Simple version-based naming - `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number (uses `u64::MAX - version`) for O(1) lookup of latest version on object stores V2 is preferred for new tables as it enables efficient latest-version discovery without needing to list all versions. ",
303+
requiredMode = Schema.RequiredMode.NOT_REQUIRED)
304+
@JsonProperty("naming_scheme")
305+
public String getNamingScheme() {
306+
return namingScheme;
307+
}
308+
309+
public void setNamingScheme(String namingScheme) {
310+
this.namingScheme = namingScheme;
311+
}
312+
282313
@Override
283314
public boolean equals(Object o) {
284315
if (this == o) {
@@ -295,12 +326,14 @@ public boolean equals(Object o) {
295326
&& Objects.equals(this.manifestPath, createTableVersionRequest.manifestPath)
296327
&& Objects.equals(this.manifestSize, createTableVersionRequest.manifestSize)
297328
&& Objects.equals(this.eTag, createTableVersionRequest.eTag)
298-
&& Objects.equals(this.metadata, createTableVersionRequest.metadata);
329+
&& Objects.equals(this.metadata, createTableVersionRequest.metadata)
330+
&& Objects.equals(this.namingScheme, createTableVersionRequest.namingScheme);
299331
}
300332

301333
@Override
302334
public int hashCode() {
303-
return Objects.hash(identity, context, id, version, manifestPath, manifestSize, eTag, metadata);
335+
return Objects.hash(
336+
identity, context, id, version, manifestPath, manifestSize, eTag, metadata, namingScheme);
304337
}
305338

306339
@Override
@@ -315,6 +348,7 @@ public String toString() {
315348
sb.append(" manifestSize: ").append(toIndentedString(manifestSize)).append("\n");
316349
sb.append(" eTag: ").append(toIndentedString(eTag)).append("\n");
317350
sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n");
351+
sb.append(" namingScheme: ").append(toIndentedString(namingScheme)).append("\n");
318352
sb.append("}");
319353
return sb.toString();
320354
}

python/lance_namespace_urllib3_client/docs/CreateTableVersionRequest.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ Name | Type | Description | Notes
1414
**manifest_size** | **int** | Size of the manifest file in bytes | [optional]
1515
**e_tag** | **str** | Optional ETag for the manifest file | [optional]
1616
**metadata** | **Dict[str, str]** | Optional metadata for the version | [optional]
17+
**naming_scheme** | **str** | The naming scheme used for manifest files in the &#x60;_versions/&#x60; directory. Known values: - &#x60;V1&#x60;: &#x60;_versions/{version}.manifest&#x60; - Simple version-based naming - &#x60;V2&#x60;: &#x60;_versions/{inverted_version}.manifest&#x60; - Zero-padded, reversed version number (uses &#x60;u64::MAX - version&#x60;) for O(1) lookup of latest version on object stores V2 is preferred for new tables as it enables efficient latest-version discovery without needing to list all versions. | [optional]
1718

1819
## Example
1920

python/lance_namespace_urllib3_client/lance_namespace_urllib3_client/models/create_table_version_request.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ class CreateTableVersionRequest(BaseModel):
3636
manifest_size: Optional[Annotated[int, Field(strict=True, ge=0)]] = Field(default=None, description="Size of the manifest file in bytes")
3737
e_tag: Optional[StrictStr] = Field(default=None, description="Optional ETag for the manifest file")
3838
metadata: Optional[Dict[str, StrictStr]] = Field(default=None, description="Optional metadata for the version")
39-
__properties: ClassVar[List[str]] = ["identity", "context", "id", "version", "manifest_path", "manifest_size", "e_tag", "metadata"]
39+
naming_scheme: Optional[StrictStr] = Field(default=None, description="The naming scheme used for manifest files in the `_versions/` directory. Known values: - `V1`: `_versions/{version}.manifest` - Simple version-based naming - `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number (uses `u64::MAX - version`) for O(1) lookup of latest version on object stores V2 is preferred for new tables as it enables efficient latest-version discovery without needing to list all versions. ")
40+
__properties: ClassVar[List[str]] = ["identity", "context", "id", "version", "manifest_path", "manifest_size", "e_tag", "metadata", "naming_scheme"]
4041

4142
model_config = ConfigDict(
4243
populate_by_name=True,
@@ -99,7 +100,8 @@ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
99100
"manifest_path": obj.get("manifest_path"),
100101
"manifest_size": obj.get("manifest_size"),
101102
"e_tag": obj.get("e_tag"),
102-
"metadata": obj.get("metadata")
103+
"metadata": obj.get("metadata"),
104+
"naming_scheme": obj.get("naming_scheme")
103105
})
104106
return _obj
105107

python/lance_namespace_urllib3_client/test/test_create_table_version_request.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ def make_instance(self, include_optional) -> CreateTableVersionRequest:
5050
e_tag = '',
5151
metadata = {
5252
'key' : ''
53-
}
53+
},
54+
naming_scheme = 'V2'
5455
)
5556
else:
5657
return CreateTableVersionRequest(

rust/lance-namespace-reqwest-client/docs/CreateTableVersionRequest.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ Name | Type | Description | Notes
1212
**manifest_size** | Option<**i64**> | Size of the manifest file in bytes | [optional]
1313
**e_tag** | Option<**String**> | Optional ETag for the manifest file | [optional]
1414
**metadata** | Option<**std::collections::HashMap<String, String>**> | Optional metadata for the version | [optional]
15+
**naming_scheme** | Option<**String**> | The naming scheme used for manifest files in the `_versions/` directory. Known values: - `V1`: `_versions/{version}.manifest` - Simple version-based naming - `V2`: `_versions/{inverted_version}.manifest` - Zero-padded, reversed version number (uses `u64::MAX - version`) for O(1) lookup of latest version on object stores V2 is preferred for new tables as it enables efficient latest-version discovery without needing to list all versions. | [optional]
1516

1617
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
1718

0 commit comments

Comments
 (0)