This is an automated email from the ASF dual-hosted git repository.

wusheng pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/skywalking-banyandb.git


The following commit(s) were added to refs/heads/main by this push:
     new 9c1a7f98 Add the field to TagFamilySpec, TagSpec, FieldSpec, and 
TraceTagSpec for lifecycle stage retention control (#868)
9c1a7f98 is described below

commit 9c1a7f989a9326f3acac8ee4d649792e184d5526
Author: Gao Hongtao <[email protected]>
AuthorDate: Thu Nov 27 21:35:13 2025 +0800

    Add the field to TagFamilySpec, TagSpec, FieldSpec, and TraceTagSpec for 
lifecycle stage retention control (#868)
---
 api/proto/banyandb/database/v1/schema.proto | 26 ++++++++++++++++++++++++++
 docs/api-reference.md                       |  4 ++++
 2 files changed, 30 insertions(+)

diff --git a/api/proto/banyandb/database/v1/schema.proto 
b/api/proto/banyandb/database/v1/schema.proto
index d2359418..0fa0af7e 100644
--- a/api/proto/banyandb/database/v1/schema.proto
+++ b/api/proto/banyandb/database/v1/schema.proto
@@ -42,11 +42,29 @@ message TagFamilySpec {
   string name = 1 [(validate.rules).string.min_len = 1];
   // tags defines accepted tags
   repeated TagSpec tags = 2 [(validate.rules).repeated.min_items = 1];
+  // stage_names defines which lifecycle stages this tag family is retained in.
+  // If empty, the tag family is retained in all stages.
+  // Each value must match the name of a LifecycleStage in the parent Group's 
ResourceOpts.
+  repeated string stage_names = 3;
 }
 
 message TagSpec {
   string name = 1 [(validate.rules).string.min_len = 1];
   TagType type = 2 [(validate.rules).enum.defined_only = true];
+  // stage_names defines which lifecycle stages this tag is retained in.
+  // Semantics with TagFamilySpec.stage_names:
+  // - If TagFamilySpec.stage_names is empty and TagSpec.stage_names is empty,
+  //   the tag is retained in all stages.
+  // - If TagFamilySpec.stage_names is non-empty and TagSpec.stage_names is 
empty,
+  //   the tag is retained in all stages listed in TagFamilySpec.stage_names.
+  // - If TagSpec.stage_names is non-empty, the tag is retained only in the
+  //   intersection of TagFamilySpec.stage_names (or all stages if that is 
empty)
+  //   and TagSpec.stage_names.
+  // - Implementations SHOULD validate that TagSpec.stage_names does not 
contain
+  //   stages outside TagFamilySpec.stage_names when the latter is non-empty 
and
+  //   reject such schemas as invalid.
+  // Each value must match the name of a LifecycleStage in the parent Group's 
ResourceOpts.
+  repeated string stage_names = 3;
 }
 
 // Stream intends to store streaming data, for example, traces or logs
@@ -97,6 +115,10 @@ message FieldSpec {
   EncodingMethod encoding_method = 3 [(validate.rules).enum.defined_only = 
true];
   // compression_method indicates how to compress data during writing
   CompressionMethod compression_method = 4 [(validate.rules).enum.defined_only 
= true];
+  // stage_names defines which lifecycle stages this field is retained in.
+  // If empty, the field is retained in all stages.
+  // Each value must match the name of a LifecycleStage in the parent Group's 
ResourceOpts.
+  repeated string stage_names = 5;
 }
 
 // Measure intends to store data point
@@ -226,6 +248,10 @@ message TraceTagSpec {
   string name = 1 [(validate.rules).string.min_len = 1];
   // type is the type of the tag.
   TagType type = 2 [(validate.rules).enum.defined_only = true];
+  // stage_names defines which lifecycle stages this trace tag is retained in.
+  // If empty, the trace tag is retained in all stages.
+  // Each value must match the name of a LifecycleStage in the parent Group's 
ResourceOpts.
+  repeated string stage_names = 3;
 }
 
 // Trace defines a tracing-specific storage resource.
diff --git a/docs/api-reference.md b/docs/api-reference.md
index ff86ff51..b8482a3b 100644
--- a/docs/api-reference.md
+++ b/docs/api-reference.md
@@ -2284,6 +2284,7 @@ FieldSpec is the specification of field
 | field_type | [FieldType](#banyandb-database-v1-FieldType) |  | field_type 
denotes the type of field value |
 | encoding_method | [EncodingMethod](#banyandb-database-v1-EncodingMethod) |  
| encoding_method indicates how to encode data during writing |
 | compression_method | 
[CompressionMethod](#banyandb-database-v1-CompressionMethod) |  | 
compression_method indicates how to compress data during writing |
+| stage_names | [string](#string) | repeated | stage_names defines which 
lifecycle stages this field is retained in. If empty, the field is retained in 
all stages. Each value must match the name of a LifecycleStage in the parent 
Group&#39;s ResourceOpts. |
 
 
 
@@ -2431,6 +2432,7 @@ Subject defines which stream or measure would generate 
indices
 | ----- | ---- | ----- | ----------- |
 | name | [string](#string) |  |  |
 | tags | [TagSpec](#banyandb-database-v1-TagSpec) | repeated | tags defines 
accepted tags |
+| stage_names | [string](#string) | repeated | stage_names defines which 
lifecycle stages this tag family is retained in. If empty, the tag family is 
retained in all stages. Each value must match the name of a LifecycleStage in 
the parent Group&#39;s ResourceOpts. |
 
 
 
@@ -2447,6 +2449,7 @@ Subject defines which stream or measure would generate 
indices
 | ----- | ---- | ----- | ----------- |
 | name | [string](#string) |  |  |
 | type | [TagType](#banyandb-database-v1-TagType) |  |  |
+| stage_names | [string](#string) | repeated | stage_names defines which 
lifecycle stages this tag is retained in. Semantics with 
TagFamilySpec.stage_names: - If TagFamilySpec.stage_names is empty and 
TagSpec.stage_names is empty, the tag is retained in all stages. - If 
TagFamilySpec.stage_names is non-empty and TagSpec.stage_names is empty, the 
tag is retained in all stages listed in TagFamilySpec.stage_names. - If 
TagSpec.stage_names is non-empty, the tag is retained only in the inters [...]
 
 
 
@@ -2509,6 +2512,7 @@ TraceTagSpec defines the specification of a tag in a 
trace.
 | ----- | ---- | ----- | ----------- |
 | name | [string](#string) |  | name is the name of the tag. |
 | type | [TagType](#banyandb-database-v1-TagType) |  | type is the type of the 
tag. |
+| stage_names | [string](#string) | repeated | stage_names defines which 
lifecycle stages this trace tag is retained in. If empty, the trace tag is 
retained in all stages. Each value must match the name of a LifecycleStage in 
the parent Group&#39;s ResourceOpts. |
 
 
 

Reply via email to