[#14] Rename __FROSTFS__ to __SYSTEM__ #15

Merged
alexvanin merged 1 commit from dkirillov/frostfs-api:feature/14-rename_system_attribute into master 2023-03-15 07:37:36 +00:00
16 changed files with 113 additions and 66 deletions
Showing only changes of commit 5fd4059061 - Show all commits

View file

@ -1,5 +1,10 @@
# Changelog
## [Unreleased]
### Changed
- Add `__SYSTEM__` attribute prefix (#12, #14)
## [2.14.0] - 2022-09-23 - Anmado (안마도, 鞍馬島)
### Added

View file

@ -37,16 +37,20 @@ message Container {
//
// There are some "well-known" attributes affecting system behaviour:
//
// * [ __NEOFS__SUBNET | __FROSTFS__SUBNET ] \
// * [ __SYSTEM__SUBNET ] \
// (`__NEOFS__SUBNET` is deprecated) \
// String ID of a container's storage subnet. Any container can be attached to
// one subnet only.
// * [ __NEOFS__NAME | __FROSTFS__NAME ] \
// * [ __SYSTEM__NAME ] \
// (`__NEOFS__NAME` is deprecated) \
// String of a human-friendly container name registered as a domain in
// NNS contract.
// * [ __NEOFS__ZONE | __FROSTFS__ZONE ] \
// String of a zone for `__NEOFS__NAME`/`__FROSTFS__NAME`. Used as a TLD of a domain name in NNS
// * [ __SYSTEM__ZONE ] \
// (`__NEOFS__ZONE` is deprecated) \
// String of a zone for `__SYSTEM__NAME` (`__NEOFS__NAME` is deprecated). Used as a TLD of a domain name in NNS
// contract. If no zone is specified, use default zone: `container`.
// * [ __NEOFS__DISABLE_HOMOMORPHIC_HASHING | __FROSTFS__DISABLE_HOMOMORPHIC_HASHING ] \
// * [ __SYSTEM__DISABLE_HOMOMORPHIC_HASHING ] \
// (`__NEOFS__DISABLE_HOMOMORPHIC_HASHING` is deprecated) \
// Disables homomorphic hashing for the container if the value equals "true" string.
// Any other values are interpreted as missing attribute. Container could be
// accepted in a NeoFS network only if the global network hashing configuration

View file

@ -9,7 +9,7 @@ import "refs/types.proto";
// Lock objects protects a list of objects from being deleted. The lifetime of a
// lock object is limited similar to regular objects in
// `__NEOFS__EXPIRATION_EPOCH`/`__FROSTFS__EXPIRATION_EPOCH` attribute. Lock object MUST have expiration epoch.
// `__SYSTEM__EXPIRATION_EPOCH` (`__NEOFS__EXPIRATION_EPOCH` is deprecated) attribute. Lock object MUST have expiration epoch.
// It is impossible to delete a lock object via ObjectService.Delete RPC call.
message Lock {
// List of objects to lock. Must not be empty or carry empty IDs.

View file

@ -164,7 +164,8 @@ message NodeInfo {
// attributes it's a string presenting floating point number with comma or
// point delimiter for decimal part. In the Network Map it will be saved as
// 64-bit unsigned integer representing number of minimal token fractions.
// * [ __NEOFS__SUBNET_%s | __FROSTFS__SUBNET_%s ] \
// * [ __SYSTEM__SUBNET_%s ] \
// (`__NEOFS__SUBNET_%s` is deprecated) \
// `True` or `False`. Defines if the node is included in the `%s` subnetwork
// or not. `%s` must be an existing subnetwork's ID (non-negative integer number).
// A node can be included in more than one subnetwork and, therefore, can contain

View file

@ -20,11 +20,13 @@ service ObjectService {
// keeping the receiving order.
//
// Extended headers can change `Get` behaviour:
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
// * [ __SYSTEM__NETMAP_EPOCH ] \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Will use the requsted version of Network Map for object placement
// calculation.
// * [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
// Will try older versions (starting from `__NEOFS__NETMAP_EPOCH`/`__FROSTFS__NETMAP_EPOCH` if specified or
// * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
// (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
// Will try older versions (starting from `__SYSTEM__NETMAP_EPOCH` (`__NEOFS__NETMAP_EPOCH` is deprecated) if specified or
// the latest one otherwise) of Network Map to find an object until the depth
// limit is reached.
//
@ -54,7 +56,8 @@ service ObjectService {
// Chunk messages SHOULD be sent in the direct order of fragmentation.
//
// Extended headers can change `Put` behaviour:
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH \
// * [ __SYSTEM__NETMAP_EPOCH \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Will use the requsted version of Network Map for object placement
// calculation.
//
@ -85,8 +88,9 @@ service ObjectService {
// guarantee. Object will be marked for removal and deleted eventually.
//
// Extended headers can change `Delete` behaviour:
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
// Will use the requsted version of Network Map for object placement
// * [ __SYSTEM__NETMAP_EPOCH ] \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Will use the requested version of Network Map for object placement
// calculation.
//
// Please refer to detailed `XHeader` description.
@ -110,8 +114,9 @@ service ObjectService {
// the very minimal information will be returned instead.
//
// Extended headers can change `Head` behaviour:
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
// Will use the requsted version of Network Map for object placement
// * [ __SYSTEM__NETMAP_EPOCH ] \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Will use the requested version of Network Map for object placement
// calculation.
//
// Please refer to detailed `XHeader` description.
@ -137,8 +142,9 @@ service ObjectService {
// Specification section for more details.
//
// Extended headers can change `Search` behaviour:
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
// Will use the requsted version of Network Map for object placement
// * [ __SYSTEM__NETMAP_EPOCH ] \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Will use the requested version of Network Map for object placement
// calculation.
//
// Please refer to detailed `XHeader` description.
@ -161,10 +167,12 @@ service ObjectService {
// order.
//
// Extended headers can change `GetRange` behaviour:
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
// Will use the requsted version of Network Map for object placement
// * [ __SYSTEM__NETMAP_EPOCH ] \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Will use the requested version of Network Map for object placement
// calculation.
// * [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
// * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
// (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
// Will try older versions of Network Map to find an object until the depth
// limit is reached.
//
@ -194,10 +202,12 @@ service ObjectService {
// the request. Note that hash is calculated for XORed data.
//
// Extended headers can change `GetRangeHash` behaviour:
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
// Will use the requsted version of Network Map for object placement
// * [ __SYSTEM__NETMAP_EPOCH ] \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Will use the requested version of Network Map for object placement
// calculation.
// * [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
// * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
// (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
// Will try older versions of Network Map to find an object until the depth
// limit is reached.
//

View file

@ -114,19 +114,23 @@ message Header {
// Objects with duplicated attribute names or attributes with empty values
// will be considered invalid.
//
// There are some "well-known" attributes starting with `__NEOFS__`/`__FROSTFS__` prefix
// There are some "well-known" attributes starting with `__SYSTEM__` (`__NEOFS__` is deprecated) prefix
// that affect system behaviour:
//
// * [ __NEOFS__UPLOAD_ID | __FROSTFS__UPLOAD_ID ] \
// * [ __SYSTEM__UPLOAD_ID ] \
// (`__NEOFS__UPLOAD_ID` is deprecated) \
// Marks smaller parts of a split bigger object
// * [ __NEOFS__EXPIRATION_EPOCH | __FROSTFS__EXPIRATION_EPOCH ] \
// * [ __SYSTEM__EXPIRATION_EPOCH ] \
// (`__NEOFS__EXPIRATION_EPOCH` is deprecated) \
// Tells GC to delete object after that epoch
// * [ __NEOFS__TICK_EPOCH | __FROSTFS__TICK_EPOCH ] \
// * [ __SYSTEM__TICK_EPOCH ] \
// (`__NEOFS__TICK_EPOCH` is deprecated) \
// Decimal number that defines what epoch must produce
// object notification with UTF-8 object address in a
// body (`0` value produces notification right after
// object put)
// * [ __NEOFS__TICK_TOPIC | __FROSTFS__TICK_TOPIC ] \
// * [ __SYSTEM__TICK_TOPIC ] \
// (`__NEOFS__TICK_TOPIC` is deprecated) \
// UTF-8 string topic ID that is used for object notification
//
// And some well-known attributes used by applications only:

View file

@ -587,16 +587,20 @@ values will be considered invalid.
There are some "well-known" attributes affecting system behaviour:
* [ __NEOFS__SUBNET | __FROSTFS__SUBNET ] \
* [ __SYSTEM__SUBNET ] \
(`__NEOFS__SUBNET` is deprecated) \
String ID of a container's storage subnet. Any container can be attached to
one subnet only.
* [ __NEOFS__NAME | __FROSTFS__NAME ] \
* [ __SYSTEM__NAME ] \
(`__NEOFS__NAME` is deprecated) \
String of a human-friendly container name registered as a domain in
NNS contract.
* [ __NEOFS__ZONE | __FROSTFS__ZONE ] \
String of a zone for `__NEOFS__NAME`/`__FROSTFS__NAME`. Used as a TLD of a domain name in NNS
* [ __SYSTEM__ZONE ] \
(`__NEOFS__ZONE` is deprecated) \
String of a zone for `__SYSTEM__NAME` (`__NEOFS__NAME` is deprecated). Used as a TLD of a domain name in NNS
contract. If no zone is specified, use default zone: `container`.
* [ __NEOFS__DISABLE_HOMOMORPHIC_HASHING | __FROSTFS__DISABLE_HOMOMORPHIC_HASHING ] \
* [ __SYSTEM__DISABLE_HOMOMORPHIC_HASHING ] \
(`__NEOFS__DISABLE_HOMOMORPHIC_HASHING` is deprecated) \
Disables homomorphic hashing for the container if the value equals "true" string.
Any other values are interpreted as missing attribute. Container could be
accepted in a NeoFS network only if the global network hashing configuration

View file

@ -27,7 +27,7 @@
### Message Lock
Lock objects protects a list of objects from being deleted. The lifetime of a
lock object is limited similar to regular objects in
`__NEOFS__EXPIRATION_EPOCH`/`__FROSTFS__EXPIRATION_EPOCH` attribute. Lock object MUST have expiration epoch.
`__SYSTEM__EXPIRATION_EPOCH` (`__NEOFS__EXPIRATION_EPOCH` is deprecated) attribute. Lock object MUST have expiration epoch.
It is impossible to delete a lock object via ObjectService.Delete RPC call.

View file

@ -406,7 +406,8 @@ explicitly set:
attributes it's a string presenting floating point number with comma or
point delimiter for decimal part. In the Network Map it will be saved as
64-bit unsigned integer representing number of minimal token fractions.
* [ __NEOFS__SUBNET_%s | __FROSTFS__SUBNET_%s ] \
* [ __SYSTEM__SUBNET_%s ] \
(`__NEOFS__SUBNET_%s` is deprecated) \
`True` or `False`. Defines if the node is included in the `%s` subnetwork
or not. `%s` must be an existing subnetwork's ID (non-negative integer number).
A node can be included in more than one subnetwork and, therefore, can contain

View file

@ -93,11 +93,13 @@ be restored by concatenation of object message payload and all chunks
keeping the receiving order.
Extended headers can change `Get` behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requsted version of Network Map for object placement
calculation.
* [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
Will try older versions (starting from `__NEOFS__NETMAP_EPOCH`/`__FROSTFS__NETMAP_EPOCH` if specified or
* [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
(`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
Will try older versions (starting from `__SYSTEM__NETMAP_EPOCH` (`__NEOFS__NETMAP_EPOCH` is deprecated) if specified or
the latest one otherwise) of Network Map to find an object until the depth
limit is reached.
@ -131,7 +133,8 @@ object payload. All messages, except first one, SHOULD be payload chunks.
Chunk messages SHOULD be sent in the direct order of fragmentation.
Extended headers can change `Put` behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH \
* [ __SYSTEM__NETMAP_EPOCH \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requsted version of Network Map for object placement
calculation.
@ -166,8 +169,9 @@ Delete the object from a container. There is no immediate removal
guarantee. Object will be marked for removal and deleted eventually.
Extended headers can change `Delete` behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
Will use the requsted version of Network Map for object placement
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
calculation.
Please refer to detailed `XHeader` description.
@ -195,8 +199,9 @@ returned. If `main_only` request field is set, the short header with only
the very minimal information will be returned instead.
Extended headers can change `Head` behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
Will use the requsted version of Network Map for object placement
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
calculation.
Please refer to detailed `XHeader` description.
@ -226,8 +231,9 @@ Header's filed values. Please see the corresponding NeoFS Technical
Specification section for more details.
Extended headers can change `Search` behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
Will use the requsted version of Network Map for object placement
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
calculation.
Please refer to detailed `XHeader` description.
@ -254,10 +260,12 @@ restored by concatenation of all received payload chunks keeping the receiving
order.
Extended headers can change `GetRange` behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
Will use the requsted version of Network Map for object placement
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
calculation.
* [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
* [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
(`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
Will try older versions of Network Map to find an object until the depth
limit is reached.
@ -291,10 +299,12 @@ length) tuples. Hashes order in response corresponds to the ranges order in
the request. Note that hash is calculated for XORed data.
Extended headers can change `GetRangeHash` behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
Will use the requsted version of Network Map for object placement
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Will use the requested version of Network Map for object placement
calculation.
* [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
* [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
(`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
Will try older versions of Network Map to find an object until the depth
limit is reached.
@ -848,19 +858,23 @@ Key name must be an object-unique valid UTF-8 string. Value can't be empty.
Objects with duplicated attribute names or attributes with empty values
will be considered invalid.
There are some "well-known" attributes starting with `__NEOFS__`/`__FROSTFS__` prefix
There are some "well-known" attributes starting with `__SYSTEM__` (`__NEOFS__` is deprecated) prefix
that affect system behaviour:
* [ __NEOFS__UPLOAD_ID | __FROSTFS__UPLOAD_ID ] \
* [ __SYSTEM__UPLOAD_ID ] \
(`__NEOFS__UPLOAD_ID` is deprecated) \
Marks smaller parts of a split bigger object
* [ __NEOFS__EXPIRATION_EPOCH | __FROSTFS__EXPIRATION_EPOCH ] \
* [ __SYSTEM__EXPIRATION_EPOCH ] \
(`__NEOFS__EXPIRATION_EPOCH` is deprecated) \
Tells GC to delete object after that epoch
* [ __NEOFS__TICK_EPOCH | __FROSTFS__TICK_EPOCH ] \
* [ __SYSTEM__TICK_EPOCH ] \
(`__NEOFS__TICK_EPOCH` is deprecated) \
Decimal number that defines what epoch must produce
object notification with UTF-8 object address in a
body (`0` value produces notification right after
object put)
* [ __NEOFS__TICK_TOPIC | __FROSTFS__TICK_TOPIC ] \
* [ __SYSTEM__TICK_TOPIC ] \
(`__NEOFS__TICK_TOPIC` is deprecated) \
UTF-8 string topic ID that is used for object notification
And some well-known attributes used by applications only:

View file

@ -285,14 +285,16 @@ Key name must be a unique valid UTF-8 string. Value can't be empty. Requests or
Responses with duplicated header names or headers with empty values will be
considered invalid.
There are some "well-known" headers starting with `__NEOFS__` or `__FROSTFS__` prefix that
There are some "well-known" headers starting with `__SYSTEM__` (`__NEOFS__` is deprecated) prefix that
affect system behaviour:
* [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
* [ __SYSTEM__NETMAP_EPOCH ] \
(`__NEOFS__NETMAP_EPOCH` is deprecated) \
Netmap epoch to use for object placement calculation. The `value` is string
encoded `uint64` in decimal presentation. If set to '0' or not set, the
current epoch only will be used.
* [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
* [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
(`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
If object can't be found using current epoch's netmap, this header limits
how many past epochs the node can look up through. The `value` is string
encoded `uint64` in decimal presentation. If set to '0' or not set, only the

View file

@ -31,7 +31,7 @@ additional information used for the proof of storage. `StorageGroup` only
contains objects from the same container.
Being an object payload, StorageGroup may have expiration Epoch set with
`__NEOFS__EXPIRATION_EPOCH`/`__FROSTFS__EXPIRATION_EPOCH` well-known attribute. When expired, StorageGroup
`__SYSTEM__EXPIRATION_EPOCH` (`__NEOFS__EXPIRATION_EPOCH` is deprecated) well-known attribute. When expired, StorageGroup
will be ignored by InnerRing nodes during Data Audit cycles and will be
deleted by Storage Nodes.

View file

@ -31,7 +31,7 @@ purged from the NeoFS network.
| Field | Type | Label | Description |
| ----- | ---- | ----- | ----------- |
| expiration_epoch | [uint64](#uint64) | | Last NeoFS epoch number of the tombstone lifetime. It's set by the tombstone creator depending on the current NeoFS network settings. A tombstone object must have the same expiration epoch value in `__NEOFS__EXPIRATION_EPOCH`/`__FROSTFS__EXPIRATION_EPOCH` attribute. Otherwise, the tombstone will be rejected by a storage node. |
| expiration_epoch | [uint64](#uint64) | | Last NeoFS epoch number of the tombstone lifetime. It's set by the tombstone creator depending on the current NeoFS network settings. A tombstone object must have the same expiration epoch value in `__SYSTEM__EXPIRATION_EPOCH` (`__NEOFS__EXPIRATION_EPOCH` is deprecated) attribute. Otherwise, the tombstone will be rejected by a storage node. |
| split_id | [bytes](#bytes) | | 16 byte UUID used to identify the split object hierarchy parts. Must be unique inside a container. All objects participating in the split must have the same `split_id` value. |
| members | [neo.fs.v2.refs.ObjectID](#neo.fs.v2.refs.ObjectID) | repeated | List of objects to be deleted. |

View file

@ -137,14 +137,16 @@ message SessionToken {
// Responses with duplicated header names or headers with empty values will be
// considered invalid.
//
// There are some "well-known" headers starting with `__NEOFS__` or `__FROSTFS__` prefix that
// There are some "well-known" headers starting with `__SYSTEM__` (`__NEOFS__` is deprecated) prefix that
// affect system behaviour:
//
// * [ __NEOFS__NETMAP_EPOCH | __FROSTFS__NETMAP_EPOCH ] \
// * [ __SYSTEM__NETMAP_EPOCH ] \
// (`__NEOFS__NETMAP_EPOCH` is deprecated) \
// Netmap epoch to use for object placement calculation. The `value` is string
// encoded `uint64` in decimal presentation. If set to '0' or not set, the
// current epoch only will be used.
// * [ __NEOFS__NETMAP_LOOKUP_DEPTH | __FROSTFS__NETMAP_LOOKUP_DEPTH ] \
// * [ __SYSTEM__NETMAP_LOOKUP_DEPTH ] \
// (`__NEOFS__NETMAP_LOOKUP_DEPTH` is deprecated) \
// If object can't be found using current epoch's netmap, this header limits
// how many past epochs the node can look up through. The `value` is string
// encoded `uint64` in decimal presentation. If set to '0' or not set, only the

View file

@ -13,7 +13,7 @@ import "refs/types.proto";
// contains objects from the same container.
//
// Being an object payload, StorageGroup may have expiration Epoch set with
// `__NEOFS__EXPIRATION_EPOCH`/`__FROSTFS__EXPIRATION_EPOCH` well-known attribute. When expired, StorageGroup
// `__SYSTEM__EXPIRATION_EPOCH` (`__NEOFS__EXPIRATION_EPOCH` is deprecated) well-known attribute. When expired, StorageGroup
// will be ignored by InnerRing nodes during Data Audit cycles and will be
// deleted by Storage Nodes.
//

View file

@ -12,7 +12,7 @@ import "refs/types.proto";
message Tombstone {
// Last NeoFS epoch number of the tombstone lifetime. It's set by the tombstone
// creator depending on the current NeoFS network settings. A tombstone object
// must have the same expiration epoch value in `__NEOFS__EXPIRATION_EPOCH`/`__FROSTFS__EXPIRATION_EPOCH`
// must have the same expiration epoch value in `__SYSTEM__EXPIRATION_EPOCH` (`__NEOFS__EXPIRATION_EPOCH` is deprecated)
// attribute. Otherwise, the tombstone will be rejected by a storage node.
uint64 expiration_epoch = 1 [json_name = "expirationEpoch"];