// Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 // protoc v6.33.4 // source: s3_lifecycle.proto package s3_lifecycle_pb import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" unsafe "unsafe" ) const ( // Verify that this generated code is sufficiently up-to-date. _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) // Verify that runtime/protoimpl is sufficiently up-to-date. _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) // ActionKind classifies the lifecycle action a single compiled entry // represents. A single XML rule may produce multiple compiled entries — // one per populated action. type ActionKind int32 const ( ActionKind_ACTION_KIND_UNSPECIFIED ActionKind = 0 ActionKind_EXPIRATION_DAYS ActionKind = 1 // Expiration.Days ActionKind_EXPIRATION_DATE ActionKind = 2 // Expiration.Date ActionKind_NONCURRENT_DAYS ActionKind = 3 // NoncurrentVersionExpiration.NoncurrentDays (with optional NewerNoncurrent retention) ActionKind_NEWER_NONCURRENT ActionKind = 4 // NoncurrentVersionExpiration.NewerNoncurrentVersions, count-only (no NoncurrentDays) ActionKind_ABORT_MPU ActionKind = 5 // AbortIncompleteMultipartUpload.DaysAfterInitiation ActionKind_EXPIRED_DELETE_MARKER ActionKind = 6 // Expiration.ExpiredObjectDeleteMarker ) // Enum value maps for ActionKind. var ( ActionKind_name = map[int32]string{ 0: "ACTION_KIND_UNSPECIFIED", 1: "EXPIRATION_DAYS", 2: "EXPIRATION_DATE", 3: "NONCURRENT_DAYS", 4: "NEWER_NONCURRENT", 5: "ABORT_MPU", 6: "EXPIRED_DELETE_MARKER", } ActionKind_value = map[string]int32{ "ACTION_KIND_UNSPECIFIED": 0, "EXPIRATION_DAYS": 1, "EXPIRATION_DATE": 2, "NONCURRENT_DAYS": 3, "NEWER_NONCURRENT": 4, "ABORT_MPU": 5, "EXPIRED_DELETE_MARKER": 6, } ) func (x ActionKind) Enum() *ActionKind { p := new(ActionKind) *p = x return p } func (x ActionKind) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (ActionKind) Descriptor() protoreflect.EnumDescriptor { return file_s3_lifecycle_proto_enumTypes[0].Descriptor() } func (ActionKind) Type() protoreflect.EnumType { return &file_s3_lifecycle_proto_enumTypes[0] } func (x ActionKind) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use ActionKind.Descriptor instead. func (ActionKind) EnumDescriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{0} } // LifecycleDeleteOutcome captures every per-event verdict the worker needs. // Cursor advance / pending mutation rules: // // DONE -> advance cursor / drop pending // NOOP_RESOLVED -> advance cursor / drop pending (object already gone or stale identity) // SKIPPED_OBJECT_LOCK -> log + counter; advance cursor (per design: object lock is operator concern) // RETRY_LATER -> hold cursor; feed retry-budget; next batch retries from same position // BLOCKED -> hold cursor; durable BlockerRecord written; operator must intervene type LifecycleDeleteOutcome int32 const ( LifecycleDeleteOutcome_LIFECYCLE_DELETE_OUTCOME_UNSPECIFIED LifecycleDeleteOutcome = 0 LifecycleDeleteOutcome_DONE LifecycleDeleteOutcome = 1 LifecycleDeleteOutcome_NOOP_RESOLVED LifecycleDeleteOutcome = 2 LifecycleDeleteOutcome_SKIPPED_OBJECT_LOCK LifecycleDeleteOutcome = 3 LifecycleDeleteOutcome_RETRY_LATER LifecycleDeleteOutcome = 4 LifecycleDeleteOutcome_BLOCKED LifecycleDeleteOutcome = 5 ) // Enum value maps for LifecycleDeleteOutcome. var ( LifecycleDeleteOutcome_name = map[int32]string{ 0: "LIFECYCLE_DELETE_OUTCOME_UNSPECIFIED", 1: "DONE", 2: "NOOP_RESOLVED", 3: "SKIPPED_OBJECT_LOCK", 4: "RETRY_LATER", 5: "BLOCKED", } LifecycleDeleteOutcome_value = map[string]int32{ "LIFECYCLE_DELETE_OUTCOME_UNSPECIFIED": 0, "DONE": 1, "NOOP_RESOLVED": 2, "SKIPPED_OBJECT_LOCK": 3, "RETRY_LATER": 4, "BLOCKED": 5, } ) func (x LifecycleDeleteOutcome) Enum() *LifecycleDeleteOutcome { p := new(LifecycleDeleteOutcome) *p = x return p } func (x LifecycleDeleteOutcome) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LifecycleDeleteOutcome) Descriptor() protoreflect.EnumDescriptor { return file_s3_lifecycle_proto_enumTypes[1].Descriptor() } func (LifecycleDeleteOutcome) Type() protoreflect.EnumType { return &file_s3_lifecycle_proto_enumTypes[1] } func (x LifecycleDeleteOutcome) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use LifecycleDeleteOutcome.Descriptor instead. func (LifecycleDeleteOutcome) EnumDescriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{1} } // StreamKind classifies the four blockable streams. ORIGINAL/PREDICATE pause // reader cursors; BOOTSTRAP pauses a bucket walker; PENDING pauses a rule's // drain task. Zero is an UNSPECIFIED sentinel — a BlockerRecord whose // stream_kind reads as UNSPECIFIED is a corruption signal, not a default. type StreamKind int32 const ( StreamKind_STREAM_KIND_UNSPECIFIED StreamKind = 0 StreamKind_ORIGINAL StreamKind = 1 StreamKind_PREDICATE StreamKind = 2 StreamKind_BOOTSTRAP StreamKind = 3 StreamKind_PENDING StreamKind = 4 ) // Enum value maps for StreamKind. var ( StreamKind_name = map[int32]string{ 0: "STREAM_KIND_UNSPECIFIED", 1: "ORIGINAL", 2: "PREDICATE", 3: "BOOTSTRAP", 4: "PENDING", } StreamKind_value = map[string]int32{ "STREAM_KIND_UNSPECIFIED": 0, "ORIGINAL": 1, "PREDICATE": 2, "BOOTSTRAP": 3, "PENDING": 4, } ) func (x StreamKind) Enum() *StreamKind { p := new(StreamKind) *p = x return p } func (x StreamKind) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (StreamKind) Descriptor() protoreflect.EnumDescriptor { return file_s3_lifecycle_proto_enumTypes[2].Descriptor() } func (StreamKind) Type() protoreflect.EnumType { return &file_s3_lifecycle_proto_enumTypes[2] } func (x StreamKind) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use StreamKind.Descriptor instead. func (StreamKind) EnumDescriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{2} } // Proto3 best practice: zero value is an UNSPECIFIED sentinel so that // legacy / partially-populated payloads don't silently default to a // semantically active value. Persisted state files always set explicit // non-zero values; reading UNSPECIFIED indicates corruption or a missing // field. type LifecycleState_RuleMode int32 const ( LifecycleState_RULE_MODE_UNSPECIFIED LifecycleState_RuleMode = 0 LifecycleState_EVENT_DRIVEN LifecycleState_RuleMode = 1 LifecycleState_SCAN_AT_DATE LifecycleState_RuleMode = 2 LifecycleState_SCAN_ONLY LifecycleState_RuleMode = 3 LifecycleState_DISABLED LifecycleState_RuleMode = 4 LifecycleState_PENDING_BOOTSTRAP LifecycleState_RuleMode = 5 ) // Enum value maps for LifecycleState_RuleMode. var ( LifecycleState_RuleMode_name = map[int32]string{ 0: "RULE_MODE_UNSPECIFIED", 1: "EVENT_DRIVEN", 2: "SCAN_AT_DATE", 3: "SCAN_ONLY", 4: "DISABLED", 5: "PENDING_BOOTSTRAP", } LifecycleState_RuleMode_value = map[string]int32{ "RULE_MODE_UNSPECIFIED": 0, "EVENT_DRIVEN": 1, "SCAN_AT_DATE": 2, "SCAN_ONLY": 3, "DISABLED": 4, "PENDING_BOOTSTRAP": 5, } ) func (x LifecycleState_RuleMode) Enum() *LifecycleState_RuleMode { p := new(LifecycleState_RuleMode) *p = x return p } func (x LifecycleState_RuleMode) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LifecycleState_RuleMode) Descriptor() protoreflect.EnumDescriptor { return file_s3_lifecycle_proto_enumTypes[3].Descriptor() } func (LifecycleState_RuleMode) Type() protoreflect.EnumType { return &file_s3_lifecycle_proto_enumTypes[3] } func (x LifecycleState_RuleMode) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use LifecycleState_RuleMode.Descriptor instead. func (LifecycleState_RuleMode) EnumDescriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{5, 0} } // DEGRADED_REASON_UNSPECIFIED replaces the old NONE sentinel: an unset // / zero degraded_reason means "no active degradation" — operators // treat UNSPECIFIED as healthy. type LifecycleState_DegradedReason int32 const ( LifecycleState_DEGRADED_REASON_UNSPECIFIED LifecycleState_DegradedReason = 0 LifecycleState_LAG_HIGH LifecycleState_DegradedReason = 1 LifecycleState_PENDING_FULL LifecycleState_DegradedReason = 2 LifecycleState_DELETE_FAILURES LifecycleState_DegradedReason = 3 LifecycleState_OPERATOR_PAUSED LifecycleState_DegradedReason = 4 LifecycleState_RETENTION_BELOW_HORIZON LifecycleState_DegradedReason = 5 LifecycleState_LOST_LOG LifecycleState_DegradedReason = 6 ) // Enum value maps for LifecycleState_DegradedReason. var ( LifecycleState_DegradedReason_name = map[int32]string{ 0: "DEGRADED_REASON_UNSPECIFIED", 1: "LAG_HIGH", 2: "PENDING_FULL", 3: "DELETE_FAILURES", 4: "OPERATOR_PAUSED", 5: "RETENTION_BELOW_HORIZON", 6: "LOST_LOG", } LifecycleState_DegradedReason_value = map[string]int32{ "DEGRADED_REASON_UNSPECIFIED": 0, "LAG_HIGH": 1, "PENDING_FULL": 2, "DELETE_FAILURES": 3, "OPERATOR_PAUSED": 4, "RETENTION_BELOW_HORIZON": 5, "LOST_LOG": 6, } ) func (x LifecycleState_DegradedReason) Enum() *LifecycleState_DegradedReason { p := new(LifecycleState_DegradedReason) *p = x return p } func (x LifecycleState_DegradedReason) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } func (LifecycleState_DegradedReason) Descriptor() protoreflect.EnumDescriptor { return file_s3_lifecycle_proto_enumTypes[4].Descriptor() } func (LifecycleState_DegradedReason) Type() protoreflect.EnumType { return &file_s3_lifecycle_proto_enumTypes[4] } func (x LifecycleState_DegradedReason) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Use LifecycleState_DegradedReason.Descriptor instead. func (LifecycleState_DegradedReason) EnumDescriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{5, 1} } type LifecycleDeleteRequest struct { state protoimpl.MessageState `protogen:"open.v1"` // Routing. Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` ObjectPath string `protobuf:"bytes,2,opt,name=object_path,json=objectPath,proto3" json:"object_path,omitempty"` // bucket-relative; no leading slash VersionId string `protobuf:"bytes,3,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` // empty for non-versioned RuleHash []byte `protobuf:"bytes,4,opt,name=rule_hash,json=ruleHash,proto3" json:"rule_hash,omitempty"` // 8 bytes; matches the rule's per-rule dir ActionKind ActionKind `protobuf:"varint,5,opt,name=action_kind,json=actionKind,proto3,enum=s3_lifecycle_pb.ActionKind" json:"action_kind,omitempty"` // chooses dispatch within the rule // Stream context (echoed in BlockerRecord on FATAL outcomes so operators // can resolve the right (shard, delay) tuple). StreamShard string `protobuf:"bytes,10,opt,name=stream_shard,json=streamShard,proto3" json:"stream_shard,omitempty"` StreamDelaySeconds int64 `protobuf:"varint,11,opt,name=stream_delay_seconds,json=streamDelaySeconds,proto3" json:"stream_delay_seconds,omitempty"` StreamPositionTsNs int64 `protobuf:"varint,12,opt,name=stream_position_ts_ns,json=streamPositionTsNs,proto3" json:"stream_position_ts_ns,omitempty"` StreamPositionOffset int64 `protobuf:"varint,13,opt,name=stream_position_offset,json=streamPositionOffset,proto3" json:"stream_position_offset,omitempty"` // CAS witness. The server re-fetches the live entry and aborts as // NOOP_RESOLVED (STALE_IDENTITY) if any field doesn't match. ExpectedIdentity *EntryIdentity `protobuf:"bytes,20,opt,name=expected_identity,json=expectedIdentity,proto3" json:"expected_identity,omitempty"` // Snapshot id at the time the worker computed this verdict; the server // verifies the (rule_hash, action_kind) is still in the current policy // snapshot and aborts as NOOP_RESOLVED (STALE_POLICY) if not. EngineSnapshotId uint64 `protobuf:"varint,21,opt,name=engine_snapshot_id,json=engineSnapshotId,proto3" json:"engine_snapshot_id,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *LifecycleDeleteRequest) Reset() { *x = LifecycleDeleteRequest{} mi := &file_s3_lifecycle_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *LifecycleDeleteRequest) String() string { return protoimpl.X.MessageStringOf(x) } func (*LifecycleDeleteRequest) ProtoMessage() {} func (x *LifecycleDeleteRequest) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[0] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LifecycleDeleteRequest.ProtoReflect.Descriptor instead. func (*LifecycleDeleteRequest) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{0} } func (x *LifecycleDeleteRequest) GetBucket() string { if x != nil { return x.Bucket } return "" } func (x *LifecycleDeleteRequest) GetObjectPath() string { if x != nil { return x.ObjectPath } return "" } func (x *LifecycleDeleteRequest) GetVersionId() string { if x != nil { return x.VersionId } return "" } func (x *LifecycleDeleteRequest) GetRuleHash() []byte { if x != nil { return x.RuleHash } return nil } func (x *LifecycleDeleteRequest) GetActionKind() ActionKind { if x != nil { return x.ActionKind } return ActionKind_ACTION_KIND_UNSPECIFIED } func (x *LifecycleDeleteRequest) GetStreamShard() string { if x != nil { return x.StreamShard } return "" } func (x *LifecycleDeleteRequest) GetStreamDelaySeconds() int64 { if x != nil { return x.StreamDelaySeconds } return 0 } func (x *LifecycleDeleteRequest) GetStreamPositionTsNs() int64 { if x != nil { return x.StreamPositionTsNs } return 0 } func (x *LifecycleDeleteRequest) GetStreamPositionOffset() int64 { if x != nil { return x.StreamPositionOffset } return 0 } func (x *LifecycleDeleteRequest) GetExpectedIdentity() *EntryIdentity { if x != nil { return x.ExpectedIdentity } return nil } func (x *LifecycleDeleteRequest) GetEngineSnapshotId() uint64 { if x != nil { return x.EngineSnapshotId } return 0 } type LifecycleDeleteResponse struct { state protoimpl.MessageState `protogen:"open.v1"` Outcome LifecycleDeleteOutcome `protobuf:"varint,1,opt,name=outcome,proto3,enum=s3_lifecycle_pb.LifecycleDeleteOutcome" json:"outcome,omitempty"` // Human-readable cause, e.g. "STALE_IDENTITY: mtime drift", // "FATAL_EVENT_ERROR: malformed entry", or "TRANSPORT_ERROR: filer // unavailable". Echoed into BlockerRecord.last_error on FATAL. Reason string `protobuf:"bytes,2,opt,name=reason,proto3" json:"reason,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *LifecycleDeleteResponse) Reset() { *x = LifecycleDeleteResponse{} mi := &file_s3_lifecycle_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *LifecycleDeleteResponse) String() string { return protoimpl.X.MessageStringOf(x) } func (*LifecycleDeleteResponse) ProtoMessage() {} func (x *LifecycleDeleteResponse) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[1] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LifecycleDeleteResponse.ProtoReflect.Descriptor instead. func (*LifecycleDeleteResponse) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{1} } func (x *LifecycleDeleteResponse) GetOutcome() LifecycleDeleteOutcome { if x != nil { return x.Outcome } return LifecycleDeleteOutcome_LIFECYCLE_DELETE_OUTCOME_UNSPECIFIED } func (x *LifecycleDeleteResponse) GetReason() string { if x != nil { return x.Reason } return "" } // MessagePosition mirrors weed/util/log_buffer.MessagePosition for durable // storage. ts_ns + offset uniquely identifies a position within a per-filer // log buffer; per-shard cursors (see ReaderState) use this shape to skip past // already-processed events when replaying. type MessagePosition struct { state protoimpl.MessageState `protogen:"open.v1"` TsNs int64 `protobuf:"varint,1,opt,name=ts_ns,json=tsNs,proto3" json:"ts_ns,omitempty"` Offset int64 `protobuf:"varint,2,opt,name=offset,proto3" json:"offset,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *MessagePosition) Reset() { *x = MessagePosition{} mi := &file_s3_lifecycle_proto_msgTypes[2] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *MessagePosition) String() string { return protoimpl.X.MessageStringOf(x) } func (*MessagePosition) ProtoMessage() {} func (x *MessagePosition) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[2] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use MessagePosition.ProtoReflect.Descriptor instead. func (*MessagePosition) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{2} } func (x *MessagePosition) GetTsNs() int64 { if x != nil { return x.TsNs } return 0 } func (x *MessagePosition) GetOffset() int64 { if x != nil { return x.Offset } return 0 } // Cursor map keyed by filer_id. Each delay group's cursor (ReaderState) and // the predicate cursor (ReaderState) are per-filer-shard maps because // LogEntry.Offset is per-filer and not globally unique. type FilerShardCursor struct { state protoimpl.MessageState `protogen:"open.v1"` FilerId string `protobuf:"bytes,1,opt,name=filer_id,json=filerId,proto3" json:"filer_id,omitempty"` Position *MessagePosition `protobuf:"bytes,2,opt,name=position,proto3" json:"position,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *FilerShardCursor) Reset() { *x = FilerShardCursor{} mi := &file_s3_lifecycle_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *FilerShardCursor) String() string { return protoimpl.X.MessageStringOf(x) } func (*FilerShardCursor) ProtoMessage() {} func (x *FilerShardCursor) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FilerShardCursor.ProtoReflect.Descriptor instead. func (*FilerShardCursor) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{3} } func (x *FilerShardCursor) GetFilerId() string { if x != nil { return x.FilerId } return "" } func (x *FilerShardCursor) GetPosition() *MessagePosition { if x != nil { return x.Position } return nil } // EntryIdentity is the CAS witness used by LifecycleDelete to detect that // the live entry hasn't changed between worker decision and server execution. // Mismatch -> STALE_IDENTITY -> NOOP_RESOLVED. type EntryIdentity struct { state protoimpl.MessageState `protogen:"open.v1"` MtimeNs int64 `protobuf:"varint,1,opt,name=mtime_ns,json=mtimeNs,proto3" json:"mtime_ns,omitempty"` Size int64 `protobuf:"varint,2,opt,name=size,proto3" json:"size,omitempty"` HeadFid string `protobuf:"bytes,3,opt,name=head_fid,json=headFid,proto3" json:"head_fid,omitempty"` ExtendedHash []byte `protobuf:"bytes,4,opt,name=extended_hash,json=extendedHash,proto3" json:"extended_hash,omitempty"` // sha256 over sorted Extended map; cheap and stable unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *EntryIdentity) Reset() { *x = EntryIdentity{} mi := &file_s3_lifecycle_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *EntryIdentity) String() string { return protoimpl.X.MessageStringOf(x) } func (*EntryIdentity) ProtoMessage() {} func (x *EntryIdentity) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use EntryIdentity.ProtoReflect.Descriptor instead. func (*EntryIdentity) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{4} } func (x *EntryIdentity) GetMtimeNs() int64 { if x != nil { return x.MtimeNs } return 0 } func (x *EntryIdentity) GetSize() int64 { if x != nil { return x.Size } return 0 } func (x *EntryIdentity) GetHeadFid() string { if x != nil { return x.HeadFid } return "" } func (x *EntryIdentity) GetExtendedHash() []byte { if x != nil { return x.ExtendedHash } return nil } // LifecycleState captures the durable per-action scheduling state. Keyed by // (rule_hash, action_kind); persisted at // // /etc/s3/lifecycle////state // // A single XML with N populated action sub-elements expands into N // LifecycleState records, one per sibling action. type LifecycleState struct { state protoimpl.MessageState `protogen:"open.v1"` RuleHash []byte `protobuf:"bytes,1,opt,name=rule_hash,json=ruleHash,proto3" json:"rule_hash,omitempty"` // 8 bytes; matches the parent rule dir ActionKind ActionKind `protobuf:"varint,2,opt,name=action_kind,json=actionKind,proto3,enum=s3_lifecycle_pb.ActionKind" json:"action_kind,omitempty"` // matches the leaf dir name RuleId string `protobuf:"bytes,3,opt,name=rule_id,json=ruleId,proto3" json:"rule_id,omitempty"` // display only; identical across sibling actions Mode LifecycleState_RuleMode `protobuf:"varint,4,opt,name=mode,proto3,enum=s3_lifecycle_pb.LifecycleState_RuleMode" json:"mode,omitempty"` DegradedReason LifecycleState_DegradedReason `protobuf:"varint,5,opt,name=degraded_reason,json=degradedReason,proto3,enum=s3_lifecycle_pb.LifecycleState_DegradedReason" json:"degraded_reason,omitempty"` DegradedSinceNs int64 `protobuf:"varint,6,opt,name=degraded_since_ns,json=degradedSinceNs,proto3" json:"degraded_since_ns,omitempty"` BootstrapComplete bool `protobuf:"varint,7,opt,name=bootstrap_complete,json=bootstrapComplete,proto3" json:"bootstrap_complete,omitempty"` BootstrapStartedAtNs int64 `protobuf:"varint,8,opt,name=bootstrap_started_at_ns,json=bootstrapStartedAtNs,proto3" json:"bootstrap_started_at_ns,omitempty"` BootstrapCompletedAtNs int64 `protobuf:"varint,9,opt,name=bootstrap_completed_at_ns,json=bootstrapCompletedAtNs,proto3" json:"bootstrap_completed_at_ns,omitempty"` // Safety-scan scheduling. Set by the safety-scan job when a SCAN_ONLY // (or periodic safety-scan) bootstrap pass completes; consulted by the // detector to decide whether to emit the next bootstrap task. LastSafetyScanTsNs int64 `protobuf:"varint,10,opt,name=last_safety_scan_ts_ns,json=lastSafetyScanTsNs,proto3" json:"last_safety_scan_ts_ns,omitempty"` NextSafetyScanTsNs int64 `protobuf:"varint,11,opt,name=next_safety_scan_ts_ns,json=nextSafetyScanTsNs,proto3" json:"next_safety_scan_ts_ns,omitempty"` // Counters for observability; no behavior depends on these. // - evaluated_total: live entries the worker considered for this action // (filter-matched + due-checked); includes objects that ended up not // yet eligible. // - expired_total: successful DONE outcomes (object/version/marker/MPU // removed) under this action. // - metadata_only_total: subset of expired_total where the worker // short-circuited via volume-TTL routing (chunks left to volume GC). // - error_total: outcomes that did NOT advance the cursor under this // action (RETRY_LATER, BLOCKED, FATAL_EVENT_ERROR). EvaluatedTotal int64 `protobuf:"varint,12,opt,name=evaluated_total,json=evaluatedTotal,proto3" json:"evaluated_total,omitempty"` ExpiredTotal int64 `protobuf:"varint,13,opt,name=expired_total,json=expiredTotal,proto3" json:"expired_total,omitempty"` MetadataOnlyTotal int64 `protobuf:"varint,14,opt,name=metadata_only_total,json=metadataOnlyTotal,proto3" json:"metadata_only_total,omitempty"` ErrorTotal int64 `protobuf:"varint,15,opt,name=error_total,json=errorTotal,proto3" json:"error_total,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *LifecycleState) Reset() { *x = LifecycleState{} mi := &file_s3_lifecycle_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *LifecycleState) String() string { return protoimpl.X.MessageStringOf(x) } func (*LifecycleState) ProtoMessage() {} func (x *LifecycleState) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use LifecycleState.ProtoReflect.Descriptor instead. func (*LifecycleState) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{5} } func (x *LifecycleState) GetRuleHash() []byte { if x != nil { return x.RuleHash } return nil } func (x *LifecycleState) GetActionKind() ActionKind { if x != nil { return x.ActionKind } return ActionKind_ACTION_KIND_UNSPECIFIED } func (x *LifecycleState) GetRuleId() string { if x != nil { return x.RuleId } return "" } func (x *LifecycleState) GetMode() LifecycleState_RuleMode { if x != nil { return x.Mode } return LifecycleState_RULE_MODE_UNSPECIFIED } func (x *LifecycleState) GetDegradedReason() LifecycleState_DegradedReason { if x != nil { return x.DegradedReason } return LifecycleState_DEGRADED_REASON_UNSPECIFIED } func (x *LifecycleState) GetDegradedSinceNs() int64 { if x != nil { return x.DegradedSinceNs } return 0 } func (x *LifecycleState) GetBootstrapComplete() bool { if x != nil { return x.BootstrapComplete } return false } func (x *LifecycleState) GetBootstrapStartedAtNs() int64 { if x != nil { return x.BootstrapStartedAtNs } return 0 } func (x *LifecycleState) GetBootstrapCompletedAtNs() int64 { if x != nil { return x.BootstrapCompletedAtNs } return 0 } func (x *LifecycleState) GetLastSafetyScanTsNs() int64 { if x != nil { return x.LastSafetyScanTsNs } return 0 } func (x *LifecycleState) GetNextSafetyScanTsNs() int64 { if x != nil { return x.NextSafetyScanTsNs } return 0 } func (x *LifecycleState) GetEvaluatedTotal() int64 { if x != nil { return x.EvaluatedTotal } return 0 } func (x *LifecycleState) GetExpiredTotal() int64 { if x != nil { return x.ExpiredTotal } return 0 } func (x *LifecycleState) GetMetadataOnlyTotal() int64 { if x != nil { return x.MetadataOnlyTotal } return 0 } func (x *LifecycleState) GetErrorTotal() int64 { if x != nil { return x.ErrorTotal } return 0 } // PendingItem records a not-yet-due eligibility for late-predicate exceptions // (e.g. tag added at age 30d on a 60d rule). Drained by s3.lifecycle.drain. // One use only — not the steady-state path. type PendingItem struct { state protoimpl.MessageState `protogen:"open.v1"` ObjectPath string `protobuf:"bytes,1,opt,name=object_path,json=objectPath,proto3" json:"object_path,omitempty"` VersionId string `protobuf:"bytes,2,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` DueAtNs int64 `protobuf:"varint,3,opt,name=due_at_ns,json=dueAtNs,proto3" json:"due_at_ns,omitempty"` ExpectedIdentity *EntryIdentity `protobuf:"bytes,4,opt,name=expected_identity,json=expectedIdentity,proto3" json:"expected_identity,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *PendingItem) Reset() { *x = PendingItem{} mi := &file_s3_lifecycle_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *PendingItem) String() string { return protoimpl.X.MessageStringOf(x) } func (*PendingItem) ProtoMessage() {} func (x *PendingItem) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PendingItem.ProtoReflect.Descriptor instead. func (*PendingItem) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{6} } func (x *PendingItem) GetObjectPath() string { if x != nil { return x.ObjectPath } return "" } func (x *PendingItem) GetVersionId() string { if x != nil { return x.VersionId } return "" } func (x *PendingItem) GetDueAtNs() int64 { if x != nil { return x.DueAtNs } return 0 } func (x *PendingItem) GetExpectedIdentity() *EntryIdentity { if x != nil { return x.ExpectedIdentity } return nil } // BootstrapState tracks the bucket walker's resume point. Operator-resolution // of a BOOTSTRAP-stream blocker does NOT mutate this field — the next // scheduled bootstrap task picks up from last_scanned_path and re-walks. type BootstrapState struct { state protoimpl.MessageState `protogen:"open.v1"` LastScannedPath string `protobuf:"bytes,1,opt,name=last_scanned_path,json=lastScannedPath,proto3" json:"last_scanned_path,omitempty"` StartedAtNs int64 `protobuf:"varint,2,opt,name=started_at_ns,json=startedAtNs,proto3" json:"started_at_ns,omitempty"` CompletedAtNs int64 `protobuf:"varint,3,opt,name=completed_at_ns,json=completedAtNs,proto3" json:"completed_at_ns,omitempty"` // zero while in progress unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *BootstrapState) Reset() { *x = BootstrapState{} mi := &file_s3_lifecycle_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *BootstrapState) String() string { return protoimpl.X.MessageStringOf(x) } func (*BootstrapState) ProtoMessage() {} func (x *BootstrapState) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BootstrapState.ProtoReflect.Descriptor instead. func (*BootstrapState) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{7} } func (x *BootstrapState) GetLastScannedPath() string { if x != nil { return x.LastScannedPath } return "" } func (x *BootstrapState) GetStartedAtNs() int64 { if x != nil { return x.StartedAtNs } return 0 } func (x *BootstrapState) GetCompletedAtNs() int64 { if x != nil { return x.CompletedAtNs } return 0 } // ReaderState is the cluster-singleton reader's durable cursors. One file at // /etc/s3/lifecycle/_reader/reader_state, written by the singleton task. type ReaderState struct { state protoimpl.MessageState `protogen:"open.v1"` PrimaryFilerEndpoint string `protobuf:"bytes,1,opt,name=primary_filer_endpoint,json=primaryFilerEndpoint,proto3" json:"primary_filer_endpoint,omitempty"` // Per-delay-group, per-filer-shard cursors. Outer key is delay_seconds. // Inner FilerShardCursor list maps filer_id -> MessagePosition. LastProcessedOriginal map[int64]*FilerShardCursorList `protobuf:"bytes,2,rep,name=last_processed_original,json=lastProcessedOriginal,proto3" json:"last_processed_original,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` // Predicate-change pass cursor, keyed by filer_id. LastProcessedPredicate []*FilerShardCursor `protobuf:"bytes,3,rep,name=last_processed_predicate,json=lastProcessedPredicate,proto3" json:"last_processed_predicate,omitempty"` // Filer-shard keys whose cursor reached range.latest and were safely GC'd. // Used by the lost-log gate at task entry to distinguish "F was tail-drained // safely then pruned" from "F's logs vanished before catch-up". Encoded as // stream-specific keys (same shape as RetryBudgetEntry.StreamKey). TailDrainedStreams []*TailDrainedKey `protobuf:"bytes,4,rep,name=tail_drained_streams,json=tailDrainedStreams,proto3" json:"tail_drained_streams,omitempty"` LastCheckpointNs int64 `protobuf:"varint,5,opt,name=last_checkpoint_ns,json=lastCheckpointNs,proto3" json:"last_checkpoint_ns,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *ReaderState) Reset() { *x = ReaderState{} mi := &file_s3_lifecycle_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *ReaderState) String() string { return protoimpl.X.MessageStringOf(x) } func (*ReaderState) ProtoMessage() {} func (x *ReaderState) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use ReaderState.ProtoReflect.Descriptor instead. func (*ReaderState) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{8} } func (x *ReaderState) GetPrimaryFilerEndpoint() string { if x != nil { return x.PrimaryFilerEndpoint } return "" } func (x *ReaderState) GetLastProcessedOriginal() map[int64]*FilerShardCursorList { if x != nil { return x.LastProcessedOriginal } return nil } func (x *ReaderState) GetLastProcessedPredicate() []*FilerShardCursor { if x != nil { return x.LastProcessedPredicate } return nil } func (x *ReaderState) GetTailDrainedStreams() []*TailDrainedKey { if x != nil { return x.TailDrainedStreams } return nil } func (x *ReaderState) GetLastCheckpointNs() int64 { if x != nil { return x.LastCheckpointNs } return 0 } type FilerShardCursorList struct { state protoimpl.MessageState `protogen:"open.v1"` Cursors []*FilerShardCursor `protobuf:"bytes,1,rep,name=cursors,proto3" json:"cursors,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *FilerShardCursorList) Reset() { *x = FilerShardCursorList{} mi := &file_s3_lifecycle_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *FilerShardCursorList) String() string { return protoimpl.X.MessageStringOf(x) } func (*FilerShardCursorList) ProtoMessage() {} func (x *FilerShardCursorList) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use FilerShardCursorList.ProtoReflect.Descriptor instead. func (*FilerShardCursorList) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{9} } func (x *FilerShardCursorList) GetCursors() []*FilerShardCursor { if x != nil { return x.Cursors } return nil } // TailDrainedKey identifies a (stream_kind, shard, [delay]) tuple whose // cursor previously caught up to range.latest. Persisted in ReaderState so // the lost-log gate can distinguish safe drain from data loss. type TailDrainedKey struct { state protoimpl.MessageState `protogen:"open.v1"` StreamKind StreamKind `protobuf:"varint,1,opt,name=stream_kind,json=streamKind,proto3,enum=s3_lifecycle_pb.StreamKind" json:"stream_kind,omitempty"` FilerId string `protobuf:"bytes,2,opt,name=filer_id,json=filerId,proto3" json:"filer_id,omitempty"` DelaySeconds int64 `protobuf:"varint,3,opt,name=delay_seconds,json=delaySeconds,proto3" json:"delay_seconds,omitempty"` // populated when stream_kind == ORIGINAL unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *TailDrainedKey) Reset() { *x = TailDrainedKey{} mi := &file_s3_lifecycle_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *TailDrainedKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*TailDrainedKey) ProtoMessage() {} func (x *TailDrainedKey) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use TailDrainedKey.ProtoReflect.Descriptor instead. func (*TailDrainedKey) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{10} } func (x *TailDrainedKey) GetStreamKind() StreamKind { if x != nil { return x.StreamKind } return StreamKind_STREAM_KIND_UNSPECIFIED } func (x *TailDrainedKey) GetFilerId() string { if x != nil { return x.FilerId } return "" } func (x *TailDrainedKey) GetDelaySeconds() int64 { if x != nil { return x.DelaySeconds } return 0 } // BlockerRecord is the durable record of a paused stream. The cursor stays // at the failing position until the operator clears it via // `s3.lifecycle.blockers retry|resume|quarantine`. There is no automatic // dead-letter — silently routing a failed delete decision aside is unsafe // for lifecycle. type BlockerRecord struct { state protoimpl.MessageState `protogen:"open.v1"` StreamKind StreamKind `protobuf:"varint,1,opt,name=stream_kind,json=streamKind,proto3,enum=s3_lifecycle_pb.StreamKind" json:"stream_kind,omitempty"` // Stream-specific scoping; populated per stream_kind. Shard string `protobuf:"bytes,2,opt,name=shard,proto3" json:"shard,omitempty"` // filer_id; ORIGINAL/PREDICATE only DelaySeconds int64 `protobuf:"varint,3,opt,name=delay_seconds,json=delaySeconds,proto3" json:"delay_seconds,omitempty"` // ORIGINAL only Position *MessagePosition `protobuf:"bytes,4,opt,name=position,proto3" json:"position,omitempty"` // ORIGINAL/PREDICATE only // Common context. bucket/object_path/version_id always populated. // rule_hash and action_kind are OPTIONAL: empty / UNSPECIFIED for // pre-evaluation failures (e.g. handleEvent fetchLive FATAL where no // action has been evaluated). When populated, both are set together — // the failure is bound to a specific (rule, action) pair. RuleHash []byte `protobuf:"bytes,5,opt,name=rule_hash,json=ruleHash,proto3" json:"rule_hash,omitempty"` Bucket string `protobuf:"bytes,6,opt,name=bucket,proto3" json:"bucket,omitempty"` ObjectPath string `protobuf:"bytes,7,opt,name=object_path,json=objectPath,proto3" json:"object_path,omitempty"` VersionId string `protobuf:"bytes,8,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` ActionKind ActionKind `protobuf:"varint,14,opt,name=action_kind,json=actionKind,proto3,enum=s3_lifecycle_pb.ActionKind" json:"action_kind,omitempty"` // optional; UNSPECIFIED for pre-evaluation failures Reason string `protobuf:"bytes,9,opt,name=reason,proto3" json:"reason,omitempty"` // "FATAL_EVENT_ERROR: malformed entry" LastError string `protobuf:"bytes,10,opt,name=last_error,json=lastError,proto3" json:"last_error,omitempty"` // raw error string from the last attempt FirstSeenAtNs int64 `protobuf:"varint,11,opt,name=first_seen_at_ns,json=firstSeenAtNs,proto3" json:"first_seen_at_ns,omitempty"` LastRetryAtNs int64 `protobuf:"varint,12,opt,name=last_retry_at_ns,json=lastRetryAtNs,proto3" json:"last_retry_at_ns,omitempty"` RetryCount int32 `protobuf:"varint,13,opt,name=retry_count,json=retryCount,proto3" json:"retry_count,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *BlockerRecord) Reset() { *x = BlockerRecord{} mi := &file_s3_lifecycle_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *BlockerRecord) String() string { return protoimpl.X.MessageStringOf(x) } func (*BlockerRecord) ProtoMessage() {} func (x *BlockerRecord) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BlockerRecord.ProtoReflect.Descriptor instead. func (*BlockerRecord) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{11} } func (x *BlockerRecord) GetStreamKind() StreamKind { if x != nil { return x.StreamKind } return StreamKind_STREAM_KIND_UNSPECIFIED } func (x *BlockerRecord) GetShard() string { if x != nil { return x.Shard } return "" } func (x *BlockerRecord) GetDelaySeconds() int64 { if x != nil { return x.DelaySeconds } return 0 } func (x *BlockerRecord) GetPosition() *MessagePosition { if x != nil { return x.Position } return nil } func (x *BlockerRecord) GetRuleHash() []byte { if x != nil { return x.RuleHash } return nil } func (x *BlockerRecord) GetBucket() string { if x != nil { return x.Bucket } return "" } func (x *BlockerRecord) GetObjectPath() string { if x != nil { return x.ObjectPath } return "" } func (x *BlockerRecord) GetVersionId() string { if x != nil { return x.VersionId } return "" } func (x *BlockerRecord) GetActionKind() ActionKind { if x != nil { return x.ActionKind } return ActionKind_ACTION_KIND_UNSPECIFIED } func (x *BlockerRecord) GetReason() string { if x != nil { return x.Reason } return "" } func (x *BlockerRecord) GetLastError() string { if x != nil { return x.LastError } return "" } func (x *BlockerRecord) GetFirstSeenAtNs() int64 { if x != nil { return x.FirstSeenAtNs } return 0 } func (x *BlockerRecord) GetLastRetryAtNs() int64 { if x != nil { return x.LastRetryAtNs } return 0 } func (x *BlockerRecord) GetRetryCount() int32 { if x != nil { return x.RetryCount } return 0 } // StreamKey is the shape used by retry-budget tracking. One of four shapes // per stream_kind, since the identifying tuple differs. type StreamKey struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Key: // // *StreamKey_Original // *StreamKey_Predicate // *StreamKey_Bootstrap // *StreamKey_Pending Key isStreamKey_Key `protobuf_oneof:"key"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *StreamKey) Reset() { *x = StreamKey{} mi := &file_s3_lifecycle_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *StreamKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*StreamKey) ProtoMessage() {} func (x *StreamKey) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use StreamKey.ProtoReflect.Descriptor instead. func (*StreamKey) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{12} } func (x *StreamKey) GetKey() isStreamKey_Key { if x != nil { return x.Key } return nil } func (x *StreamKey) GetOriginal() *OriginalKey { if x != nil { if x, ok := x.Key.(*StreamKey_Original); ok { return x.Original } } return nil } func (x *StreamKey) GetPredicate() *PredicateKey { if x != nil { if x, ok := x.Key.(*StreamKey_Predicate); ok { return x.Predicate } } return nil } func (x *StreamKey) GetBootstrap() *BootstrapKey { if x != nil { if x, ok := x.Key.(*StreamKey_Bootstrap); ok { return x.Bootstrap } } return nil } func (x *StreamKey) GetPending() *PendingKey { if x != nil { if x, ok := x.Key.(*StreamKey_Pending); ok { return x.Pending } } return nil } type isStreamKey_Key interface { isStreamKey_Key() } type StreamKey_Original struct { Original *OriginalKey `protobuf:"bytes,1,opt,name=original,proto3,oneof"` } type StreamKey_Predicate struct { Predicate *PredicateKey `protobuf:"bytes,2,opt,name=predicate,proto3,oneof"` } type StreamKey_Bootstrap struct { Bootstrap *BootstrapKey `protobuf:"bytes,3,opt,name=bootstrap,proto3,oneof"` } type StreamKey_Pending struct { Pending *PendingKey `protobuf:"bytes,4,opt,name=pending,proto3,oneof"` } func (*StreamKey_Original) isStreamKey_Key() {} func (*StreamKey_Predicate) isStreamKey_Key() {} func (*StreamKey_Bootstrap) isStreamKey_Key() {} func (*StreamKey_Pending) isStreamKey_Key() {} type OriginalKey struct { state protoimpl.MessageState `protogen:"open.v1"` Shard string `protobuf:"bytes,1,opt,name=shard,proto3" json:"shard,omitempty"` DelaySeconds int64 `protobuf:"varint,2,opt,name=delay_seconds,json=delaySeconds,proto3" json:"delay_seconds,omitempty"` Position *MessagePosition `protobuf:"bytes,3,opt,name=position,proto3" json:"position,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *OriginalKey) Reset() { *x = OriginalKey{} mi := &file_s3_lifecycle_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *OriginalKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*OriginalKey) ProtoMessage() {} func (x *OriginalKey) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use OriginalKey.ProtoReflect.Descriptor instead. func (*OriginalKey) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{13} } func (x *OriginalKey) GetShard() string { if x != nil { return x.Shard } return "" } func (x *OriginalKey) GetDelaySeconds() int64 { if x != nil { return x.DelaySeconds } return 0 } func (x *OriginalKey) GetPosition() *MessagePosition { if x != nil { return x.Position } return nil } type PredicateKey struct { state protoimpl.MessageState `protogen:"open.v1"` Shard string `protobuf:"bytes,1,opt,name=shard,proto3" json:"shard,omitempty"` Position *MessagePosition `protobuf:"bytes,2,opt,name=position,proto3" json:"position,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *PredicateKey) Reset() { *x = PredicateKey{} mi := &file_s3_lifecycle_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *PredicateKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*PredicateKey) ProtoMessage() {} func (x *PredicateKey) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PredicateKey.ProtoReflect.Descriptor instead. func (*PredicateKey) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{14} } func (x *PredicateKey) GetShard() string { if x != nil { return x.Shard } return "" } func (x *PredicateKey) GetPosition() *MessagePosition { if x != nil { return x.Position } return nil } type BootstrapKey struct { state protoimpl.MessageState `protogen:"open.v1"` Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` ObjectPath string `protobuf:"bytes,2,opt,name=object_path,json=objectPath,proto3" json:"object_path,omitempty"` VersionId string `protobuf:"bytes,3,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` RuleHash []byte `protobuf:"bytes,4,opt,name=rule_hash,json=ruleHash,proto3" json:"rule_hash,omitempty"` ActionKind ActionKind `protobuf:"varint,5,opt,name=action_kind,json=actionKind,proto3,enum=s3_lifecycle_pb.ActionKind" json:"action_kind,omitempty"` // distinguishes per-action streams under one rule unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *BootstrapKey) Reset() { *x = BootstrapKey{} mi := &file_s3_lifecycle_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *BootstrapKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*BootstrapKey) ProtoMessage() {} func (x *BootstrapKey) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use BootstrapKey.ProtoReflect.Descriptor instead. func (*BootstrapKey) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{15} } func (x *BootstrapKey) GetBucket() string { if x != nil { return x.Bucket } return "" } func (x *BootstrapKey) GetObjectPath() string { if x != nil { return x.ObjectPath } return "" } func (x *BootstrapKey) GetVersionId() string { if x != nil { return x.VersionId } return "" } func (x *BootstrapKey) GetRuleHash() []byte { if x != nil { return x.RuleHash } return nil } func (x *BootstrapKey) GetActionKind() ActionKind { if x != nil { return x.ActionKind } return ActionKind_ACTION_KIND_UNSPECIFIED } type PendingKey struct { state protoimpl.MessageState `protogen:"open.v1"` Bucket string `protobuf:"bytes,1,opt,name=bucket,proto3" json:"bucket,omitempty"` RuleHash []byte `protobuf:"bytes,2,opt,name=rule_hash,json=ruleHash,proto3" json:"rule_hash,omitempty"` ObjectPath string `protobuf:"bytes,3,opt,name=object_path,json=objectPath,proto3" json:"object_path,omitempty"` VersionId string `protobuf:"bytes,4,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` ActionKind ActionKind `protobuf:"varint,5,opt,name=action_kind,json=actionKind,proto3,enum=s3_lifecycle_pb.ActionKind" json:"action_kind,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *PendingKey) Reset() { *x = PendingKey{} mi := &file_s3_lifecycle_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *PendingKey) String() string { return protoimpl.X.MessageStringOf(x) } func (*PendingKey) ProtoMessage() {} func (x *PendingKey) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use PendingKey.ProtoReflect.Descriptor instead. func (*PendingKey) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{16} } func (x *PendingKey) GetBucket() string { if x != nil { return x.Bucket } return "" } func (x *PendingKey) GetRuleHash() []byte { if x != nil { return x.RuleHash } return nil } func (x *PendingKey) GetObjectPath() string { if x != nil { return x.ObjectPath } return "" } func (x *PendingKey) GetVersionId() string { if x != nil { return x.VersionId } return "" } func (x *PendingKey) GetActionKind() ActionKind { if x != nil { return x.ActionKind } return ActionKind_ACTION_KIND_UNSPECIFIED } // RetryBudgetEntry tracks consecutive RETRY_LATER outcomes for a stream key. // Promotes to BLOCKED when consecutive_retries >= retryBudgetMax (30) or age // >= retryBudgetMaxAge (4h). Compacts on success (clearRetryBudget). type RetryBudgetEntry struct { state protoimpl.MessageState `protogen:"open.v1"` Key *StreamKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` ConsecutiveRetries int32 `protobuf:"varint,2,opt,name=consecutive_retries,json=consecutiveRetries,proto3" json:"consecutive_retries,omitempty"` FirstSeenAtNs int64 `protobuf:"varint,3,opt,name=first_seen_at_ns,json=firstSeenAtNs,proto3" json:"first_seen_at_ns,omitempty"` LastRetryAtNs int64 `protobuf:"varint,4,opt,name=last_retry_at_ns,json=lastRetryAtNs,proto3" json:"last_retry_at_ns,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *RetryBudgetEntry) Reset() { *x = RetryBudgetEntry{} mi := &file_s3_lifecycle_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *RetryBudgetEntry) String() string { return protoimpl.X.MessageStringOf(x) } func (*RetryBudgetEntry) ProtoMessage() {} func (x *RetryBudgetEntry) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RetryBudgetEntry.ProtoReflect.Descriptor instead. func (*RetryBudgetEntry) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{17} } func (x *RetryBudgetEntry) GetKey() *StreamKey { if x != nil { return x.Key } return nil } func (x *RetryBudgetEntry) GetConsecutiveRetries() int32 { if x != nil { return x.ConsecutiveRetries } return 0 } func (x *RetryBudgetEntry) GetFirstSeenAtNs() int64 { if x != nil { return x.FirstSeenAtNs } return 0 } func (x *RetryBudgetEntry) GetLastRetryAtNs() int64 { if x != nil { return x.LastRetryAtNs } return 0 } // RetryTarget carries routing info needed to (a) write a BlockerRecord on // promotion and (b) re-invoke the right primitive on operator retry. We // deliberately do NOT carry expected_identity or action: the handler // re-fetches live state and re-evaluates from scratch. type RetryTarget struct { state protoimpl.MessageState `protogen:"open.v1"` Key *StreamKey `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` Bucket string `protobuf:"bytes,2,opt,name=bucket,proto3" json:"bucket,omitempty"` ObjectPath string `protobuf:"bytes,3,opt,name=object_path,json=objectPath,proto3" json:"object_path,omitempty"` VersionId string `protobuf:"bytes,4,opt,name=version_id,json=versionId,proto3" json:"version_id,omitempty"` RuleHash []byte `protobuf:"bytes,5,opt,name=rule_hash,json=ruleHash,proto3" json:"rule_hash,omitempty"` ActionKind ActionKind `protobuf:"varint,6,opt,name=action_kind,json=actionKind,proto3,enum=s3_lifecycle_pb.ActionKind" json:"action_kind,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *RetryTarget) Reset() { *x = RetryTarget{} mi := &file_s3_lifecycle_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } func (x *RetryTarget) String() string { return protoimpl.X.MessageStringOf(x) } func (*RetryTarget) ProtoMessage() {} func (x *RetryTarget) ProtoReflect() protoreflect.Message { mi := &file_s3_lifecycle_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) } return ms } return mi.MessageOf(x) } // Deprecated: Use RetryTarget.ProtoReflect.Descriptor instead. func (*RetryTarget) Descriptor() ([]byte, []int) { return file_s3_lifecycle_proto_rawDescGZIP(), []int{18} } func (x *RetryTarget) GetKey() *StreamKey { if x != nil { return x.Key } return nil } func (x *RetryTarget) GetBucket() string { if x != nil { return x.Bucket } return "" } func (x *RetryTarget) GetObjectPath() string { if x != nil { return x.ObjectPath } return "" } func (x *RetryTarget) GetVersionId() string { if x != nil { return x.VersionId } return "" } func (x *RetryTarget) GetRuleHash() []byte { if x != nil { return x.RuleHash } return nil } func (x *RetryTarget) GetActionKind() ActionKind { if x != nil { return x.ActionKind } return ActionKind_ACTION_KIND_UNSPECIFIED } var File_s3_lifecycle_proto protoreflect.FileDescriptor const file_s3_lifecycle_proto_rawDesc = "" + "\n" + "\x12s3_lifecycle.proto\x12\x0fs3_lifecycle_pb\"\x84\x04\n" + "\x16LifecycleDeleteRequest\x12\x16\n" + "\x06bucket\x18\x01 \x01(\tR\x06bucket\x12\x1f\n" + "\vobject_path\x18\x02 \x01(\tR\n" + "objectPath\x12\x1d\n" + "\n" + "version_id\x18\x03 \x01(\tR\tversionId\x12\x1b\n" + "\trule_hash\x18\x04 \x01(\fR\bruleHash\x12<\n" + "\vaction_kind\x18\x05 \x01(\x0e2\x1b.s3_lifecycle_pb.ActionKindR\n" + "actionKind\x12!\n" + "\fstream_shard\x18\n" + " \x01(\tR\vstreamShard\x120\n" + "\x14stream_delay_seconds\x18\v \x01(\x03R\x12streamDelaySeconds\x121\n" + "\x15stream_position_ts_ns\x18\f \x01(\x03R\x12streamPositionTsNs\x124\n" + "\x16stream_position_offset\x18\r \x01(\x03R\x14streamPositionOffset\x12K\n" + "\x11expected_identity\x18\x14 \x01(\v2\x1e.s3_lifecycle_pb.EntryIdentityR\x10expectedIdentity\x12,\n" + "\x12engine_snapshot_id\x18\x15 \x01(\x04R\x10engineSnapshotId\"t\n" + "\x17LifecycleDeleteResponse\x12A\n" + "\aoutcome\x18\x01 \x01(\x0e2'.s3_lifecycle_pb.LifecycleDeleteOutcomeR\aoutcome\x12\x16\n" + "\x06reason\x18\x02 \x01(\tR\x06reason\">\n" + "\x0fMessagePosition\x12\x13\n" + "\x05ts_ns\x18\x01 \x01(\x03R\x04tsNs\x12\x16\n" + "\x06offset\x18\x02 \x01(\x03R\x06offset\"k\n" + "\x10FilerShardCursor\x12\x19\n" + "\bfiler_id\x18\x01 \x01(\tR\afilerId\x12<\n" + "\bposition\x18\x02 \x01(\v2 .s3_lifecycle_pb.MessagePositionR\bposition\"~\n" + "\rEntryIdentity\x12\x19\n" + "\bmtime_ns\x18\x01 \x01(\x03R\amtimeNs\x12\x12\n" + "\x04size\x18\x02 \x01(\x03R\x04size\x12\x19\n" + "\bhead_fid\x18\x03 \x01(\tR\aheadFid\x12#\n" + "\rextended_hash\x18\x04 \x01(\fR\fextendedHash\"\x97\b\n" + "\x0eLifecycleState\x12\x1b\n" + "\trule_hash\x18\x01 \x01(\fR\bruleHash\x12<\n" + "\vaction_kind\x18\x02 \x01(\x0e2\x1b.s3_lifecycle_pb.ActionKindR\n" + "actionKind\x12\x17\n" + "\arule_id\x18\x03 \x01(\tR\x06ruleId\x12<\n" + "\x04mode\x18\x04 \x01(\x0e2(.s3_lifecycle_pb.LifecycleState.RuleModeR\x04mode\x12W\n" + "\x0fdegraded_reason\x18\x05 \x01(\x0e2..s3_lifecycle_pb.LifecycleState.DegradedReasonR\x0edegradedReason\x12*\n" + "\x11degraded_since_ns\x18\x06 \x01(\x03R\x0fdegradedSinceNs\x12-\n" + "\x12bootstrap_complete\x18\a \x01(\bR\x11bootstrapComplete\x125\n" + "\x17bootstrap_started_at_ns\x18\b \x01(\x03R\x14bootstrapStartedAtNs\x129\n" + "\x19bootstrap_completed_at_ns\x18\t \x01(\x03R\x16bootstrapCompletedAtNs\x122\n" + "\x16last_safety_scan_ts_ns\x18\n" + " \x01(\x03R\x12lastSafetyScanTsNs\x122\n" + "\x16next_safety_scan_ts_ns\x18\v \x01(\x03R\x12nextSafetyScanTsNs\x12'\n" + "\x0fevaluated_total\x18\f \x01(\x03R\x0eevaluatedTotal\x12#\n" + "\rexpired_total\x18\r \x01(\x03R\fexpiredTotal\x12.\n" + "\x13metadata_only_total\x18\x0e \x01(\x03R\x11metadataOnlyTotal\x12\x1f\n" + "\verror_total\x18\x0f \x01(\x03R\n" + "errorTotal\"}\n" + "\bRuleMode\x12\x19\n" + "\x15RULE_MODE_UNSPECIFIED\x10\x00\x12\x10\n" + "\fEVENT_DRIVEN\x10\x01\x12\x10\n" + "\fSCAN_AT_DATE\x10\x02\x12\r\n" + "\tSCAN_ONLY\x10\x03\x12\f\n" + "\bDISABLED\x10\x04\x12\x15\n" + "\x11PENDING_BOOTSTRAP\x10\x05\"\xa6\x01\n" + "\x0eDegradedReason\x12\x1f\n" + "\x1bDEGRADED_REASON_UNSPECIFIED\x10\x00\x12\f\n" + "\bLAG_HIGH\x10\x01\x12\x10\n" + "\fPENDING_FULL\x10\x02\x12\x13\n" + "\x0fDELETE_FAILURES\x10\x03\x12\x13\n" + "\x0fOPERATOR_PAUSED\x10\x04\x12\x1b\n" + "\x17RETENTION_BELOW_HORIZON\x10\x05\x12\f\n" + "\bLOST_LOG\x10\x06\"\xb6\x01\n" + "\vPendingItem\x12\x1f\n" + "\vobject_path\x18\x01 \x01(\tR\n" + "objectPath\x12\x1d\n" + "\n" + "version_id\x18\x02 \x01(\tR\tversionId\x12\x1a\n" + "\tdue_at_ns\x18\x03 \x01(\x03R\adueAtNs\x12K\n" + "\x11expected_identity\x18\x04 \x01(\v2\x1e.s3_lifecycle_pb.EntryIdentityR\x10expectedIdentity\"\x88\x01\n" + "\x0eBootstrapState\x12*\n" + "\x11last_scanned_path\x18\x01 \x01(\tR\x0flastScannedPath\x12\"\n" + "\rstarted_at_ns\x18\x02 \x01(\x03R\vstartedAtNs\x12&\n" + "\x0fcompleted_at_ns\x18\x03 \x01(\x03R\rcompletedAtNs\"\x83\x04\n" + "\vReaderState\x124\n" + "\x16primary_filer_endpoint\x18\x01 \x01(\tR\x14primaryFilerEndpoint\x12o\n" + "\x17last_processed_original\x18\x02 \x03(\v27.s3_lifecycle_pb.ReaderState.LastProcessedOriginalEntryR\x15lastProcessedOriginal\x12[\n" + "\x18last_processed_predicate\x18\x03 \x03(\v2!.s3_lifecycle_pb.FilerShardCursorR\x16lastProcessedPredicate\x12Q\n" + "\x14tail_drained_streams\x18\x04 \x03(\v2\x1f.s3_lifecycle_pb.TailDrainedKeyR\x12tailDrainedStreams\x12,\n" + "\x12last_checkpoint_ns\x18\x05 \x01(\x03R\x10lastCheckpointNs\x1ao\n" + "\x1aLastProcessedOriginalEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\x03R\x03key\x12;\n" + "\x05value\x18\x02 \x01(\v2%.s3_lifecycle_pb.FilerShardCursorListR\x05value:\x028\x01\"S\n" + "\x14FilerShardCursorList\x12;\n" + "\acursors\x18\x01 \x03(\v2!.s3_lifecycle_pb.FilerShardCursorR\acursors\"\x8e\x01\n" + "\x0eTailDrainedKey\x12<\n" + "\vstream_kind\x18\x01 \x01(\x0e2\x1b.s3_lifecycle_pb.StreamKindR\n" + "streamKind\x12\x19\n" + "\bfiler_id\x18\x02 \x01(\tR\afilerId\x12#\n" + "\rdelay_seconds\x18\x03 \x01(\x03R\fdelaySeconds\"\xa3\x04\n" + "\rBlockerRecord\x12<\n" + "\vstream_kind\x18\x01 \x01(\x0e2\x1b.s3_lifecycle_pb.StreamKindR\n" + "streamKind\x12\x14\n" + "\x05shard\x18\x02 \x01(\tR\x05shard\x12#\n" + "\rdelay_seconds\x18\x03 \x01(\x03R\fdelaySeconds\x12<\n" + "\bposition\x18\x04 \x01(\v2 .s3_lifecycle_pb.MessagePositionR\bposition\x12\x1b\n" + "\trule_hash\x18\x05 \x01(\fR\bruleHash\x12\x16\n" + "\x06bucket\x18\x06 \x01(\tR\x06bucket\x12\x1f\n" + "\vobject_path\x18\a \x01(\tR\n" + "objectPath\x12\x1d\n" + "\n" + "version_id\x18\b \x01(\tR\tversionId\x12<\n" + "\vaction_kind\x18\x0e \x01(\x0e2\x1b.s3_lifecycle_pb.ActionKindR\n" + "actionKind\x12\x16\n" + "\x06reason\x18\t \x01(\tR\x06reason\x12\x1d\n" + "\n" + "last_error\x18\n" + " \x01(\tR\tlastError\x12'\n" + "\x10first_seen_at_ns\x18\v \x01(\x03R\rfirstSeenAtNs\x12'\n" + "\x10last_retry_at_ns\x18\f \x01(\x03R\rlastRetryAtNs\x12\x1f\n" + "\vretry_count\x18\r \x01(\x05R\n" + "retryCount\"\x85\x02\n" + "\tStreamKey\x12:\n" + "\boriginal\x18\x01 \x01(\v2\x1c.s3_lifecycle_pb.OriginalKeyH\x00R\boriginal\x12=\n" + "\tpredicate\x18\x02 \x01(\v2\x1d.s3_lifecycle_pb.PredicateKeyH\x00R\tpredicate\x12=\n" + "\tbootstrap\x18\x03 \x01(\v2\x1d.s3_lifecycle_pb.BootstrapKeyH\x00R\tbootstrap\x127\n" + "\apending\x18\x04 \x01(\v2\x1b.s3_lifecycle_pb.PendingKeyH\x00R\apendingB\x05\n" + "\x03key\"\x86\x01\n" + "\vOriginalKey\x12\x14\n" + "\x05shard\x18\x01 \x01(\tR\x05shard\x12#\n" + "\rdelay_seconds\x18\x02 \x01(\x03R\fdelaySeconds\x12<\n" + "\bposition\x18\x03 \x01(\v2 .s3_lifecycle_pb.MessagePositionR\bposition\"b\n" + "\fPredicateKey\x12\x14\n" + "\x05shard\x18\x01 \x01(\tR\x05shard\x12<\n" + "\bposition\x18\x02 \x01(\v2 .s3_lifecycle_pb.MessagePositionR\bposition\"\xc1\x01\n" + "\fBootstrapKey\x12\x16\n" + "\x06bucket\x18\x01 \x01(\tR\x06bucket\x12\x1f\n" + "\vobject_path\x18\x02 \x01(\tR\n" + "objectPath\x12\x1d\n" + "\n" + "version_id\x18\x03 \x01(\tR\tversionId\x12\x1b\n" + "\trule_hash\x18\x04 \x01(\fR\bruleHash\x12<\n" + "\vaction_kind\x18\x05 \x01(\x0e2\x1b.s3_lifecycle_pb.ActionKindR\n" + "actionKind\"\xbf\x01\n" + "\n" + "PendingKey\x12\x16\n" + "\x06bucket\x18\x01 \x01(\tR\x06bucket\x12\x1b\n" + "\trule_hash\x18\x02 \x01(\fR\bruleHash\x12\x1f\n" + "\vobject_path\x18\x03 \x01(\tR\n" + "objectPath\x12\x1d\n" + "\n" + "version_id\x18\x04 \x01(\tR\tversionId\x12<\n" + "\vaction_kind\x18\x05 \x01(\x0e2\x1b.s3_lifecycle_pb.ActionKindR\n" + "actionKind\"\xc3\x01\n" + "\x10RetryBudgetEntry\x12,\n" + "\x03key\x18\x01 \x01(\v2\x1a.s3_lifecycle_pb.StreamKeyR\x03key\x12/\n" + "\x13consecutive_retries\x18\x02 \x01(\x05R\x12consecutiveRetries\x12'\n" + "\x10first_seen_at_ns\x18\x03 \x01(\x03R\rfirstSeenAtNs\x12'\n" + "\x10last_retry_at_ns\x18\x04 \x01(\x03R\rlastRetryAtNs\"\xee\x01\n" + "\vRetryTarget\x12,\n" + "\x03key\x18\x01 \x01(\v2\x1a.s3_lifecycle_pb.StreamKeyR\x03key\x12\x16\n" + "\x06bucket\x18\x02 \x01(\tR\x06bucket\x12\x1f\n" + "\vobject_path\x18\x03 \x01(\tR\n" + "objectPath\x12\x1d\n" + "\n" + "version_id\x18\x04 \x01(\tR\tversionId\x12\x1b\n" + "\trule_hash\x18\x05 \x01(\fR\bruleHash\x12<\n" + "\vaction_kind\x18\x06 \x01(\x0e2\x1b.s3_lifecycle_pb.ActionKindR\n" + "actionKind*\xa8\x01\n" + "\n" + "ActionKind\x12\x1b\n" + "\x17ACTION_KIND_UNSPECIFIED\x10\x00\x12\x13\n" + "\x0fEXPIRATION_DAYS\x10\x01\x12\x13\n" + "\x0fEXPIRATION_DATE\x10\x02\x12\x13\n" + "\x0fNONCURRENT_DAYS\x10\x03\x12\x14\n" + "\x10NEWER_NONCURRENT\x10\x04\x12\r\n" + "\tABORT_MPU\x10\x05\x12\x19\n" + "\x15EXPIRED_DELETE_MARKER\x10\x06*\x96\x01\n" + "\x16LifecycleDeleteOutcome\x12(\n" + "$LIFECYCLE_DELETE_OUTCOME_UNSPECIFIED\x10\x00\x12\b\n" + "\x04DONE\x10\x01\x12\x11\n" + "\rNOOP_RESOLVED\x10\x02\x12\x17\n" + "\x13SKIPPED_OBJECT_LOCK\x10\x03\x12\x0f\n" + "\vRETRY_LATER\x10\x04\x12\v\n" + "\aBLOCKED\x10\x05*b\n" + "\n" + "StreamKind\x12\x1b\n" + "\x17STREAM_KIND_UNSPECIFIED\x10\x00\x12\f\n" + "\bORIGINAL\x10\x01\x12\r\n" + "\tPREDICATE\x10\x02\x12\r\n" + "\tBOOTSTRAP\x10\x03\x12\v\n" + "\aPENDING\x10\x042\x82\x01\n" + "\x1aSeaweedS3LifecycleInternal\x12d\n" + "\x0fLifecycleDelete\x12'.s3_lifecycle_pb.LifecycleDeleteRequest\x1a(.s3_lifecycle_pb.LifecycleDeleteResponseB\\\n" + "\x10seaweedfs.clientB\x10S3LifecycleProtoZ6github.com/seaweedfs/seaweedfs/weed/pb/s3_lifecycle_pbb\x06proto3" var ( file_s3_lifecycle_proto_rawDescOnce sync.Once file_s3_lifecycle_proto_rawDescData []byte ) func file_s3_lifecycle_proto_rawDescGZIP() []byte { file_s3_lifecycle_proto_rawDescOnce.Do(func() { file_s3_lifecycle_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_s3_lifecycle_proto_rawDesc), len(file_s3_lifecycle_proto_rawDesc))) }) return file_s3_lifecycle_proto_rawDescData } var file_s3_lifecycle_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_s3_lifecycle_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_s3_lifecycle_proto_goTypes = []any{ (ActionKind)(0), // 0: s3_lifecycle_pb.ActionKind (LifecycleDeleteOutcome)(0), // 1: s3_lifecycle_pb.LifecycleDeleteOutcome (StreamKind)(0), // 2: s3_lifecycle_pb.StreamKind (LifecycleState_RuleMode)(0), // 3: s3_lifecycle_pb.LifecycleState.RuleMode (LifecycleState_DegradedReason)(0), // 4: s3_lifecycle_pb.LifecycleState.DegradedReason (*LifecycleDeleteRequest)(nil), // 5: s3_lifecycle_pb.LifecycleDeleteRequest (*LifecycleDeleteResponse)(nil), // 6: s3_lifecycle_pb.LifecycleDeleteResponse (*MessagePosition)(nil), // 7: s3_lifecycle_pb.MessagePosition (*FilerShardCursor)(nil), // 8: s3_lifecycle_pb.FilerShardCursor (*EntryIdentity)(nil), // 9: s3_lifecycle_pb.EntryIdentity (*LifecycleState)(nil), // 10: s3_lifecycle_pb.LifecycleState (*PendingItem)(nil), // 11: s3_lifecycle_pb.PendingItem (*BootstrapState)(nil), // 12: s3_lifecycle_pb.BootstrapState (*ReaderState)(nil), // 13: s3_lifecycle_pb.ReaderState (*FilerShardCursorList)(nil), // 14: s3_lifecycle_pb.FilerShardCursorList (*TailDrainedKey)(nil), // 15: s3_lifecycle_pb.TailDrainedKey (*BlockerRecord)(nil), // 16: s3_lifecycle_pb.BlockerRecord (*StreamKey)(nil), // 17: s3_lifecycle_pb.StreamKey (*OriginalKey)(nil), // 18: s3_lifecycle_pb.OriginalKey (*PredicateKey)(nil), // 19: s3_lifecycle_pb.PredicateKey (*BootstrapKey)(nil), // 20: s3_lifecycle_pb.BootstrapKey (*PendingKey)(nil), // 21: s3_lifecycle_pb.PendingKey (*RetryBudgetEntry)(nil), // 22: s3_lifecycle_pb.RetryBudgetEntry (*RetryTarget)(nil), // 23: s3_lifecycle_pb.RetryTarget nil, // 24: s3_lifecycle_pb.ReaderState.LastProcessedOriginalEntry } var file_s3_lifecycle_proto_depIdxs = []int32{ 0, // 0: s3_lifecycle_pb.LifecycleDeleteRequest.action_kind:type_name -> s3_lifecycle_pb.ActionKind 9, // 1: s3_lifecycle_pb.LifecycleDeleteRequest.expected_identity:type_name -> s3_lifecycle_pb.EntryIdentity 1, // 2: s3_lifecycle_pb.LifecycleDeleteResponse.outcome:type_name -> s3_lifecycle_pb.LifecycleDeleteOutcome 7, // 3: s3_lifecycle_pb.FilerShardCursor.position:type_name -> s3_lifecycle_pb.MessagePosition 0, // 4: s3_lifecycle_pb.LifecycleState.action_kind:type_name -> s3_lifecycle_pb.ActionKind 3, // 5: s3_lifecycle_pb.LifecycleState.mode:type_name -> s3_lifecycle_pb.LifecycleState.RuleMode 4, // 6: s3_lifecycle_pb.LifecycleState.degraded_reason:type_name -> s3_lifecycle_pb.LifecycleState.DegradedReason 9, // 7: s3_lifecycle_pb.PendingItem.expected_identity:type_name -> s3_lifecycle_pb.EntryIdentity 24, // 8: s3_lifecycle_pb.ReaderState.last_processed_original:type_name -> s3_lifecycle_pb.ReaderState.LastProcessedOriginalEntry 8, // 9: s3_lifecycle_pb.ReaderState.last_processed_predicate:type_name -> s3_lifecycle_pb.FilerShardCursor 15, // 10: s3_lifecycle_pb.ReaderState.tail_drained_streams:type_name -> s3_lifecycle_pb.TailDrainedKey 8, // 11: s3_lifecycle_pb.FilerShardCursorList.cursors:type_name -> s3_lifecycle_pb.FilerShardCursor 2, // 12: s3_lifecycle_pb.TailDrainedKey.stream_kind:type_name -> s3_lifecycle_pb.StreamKind 2, // 13: s3_lifecycle_pb.BlockerRecord.stream_kind:type_name -> s3_lifecycle_pb.StreamKind 7, // 14: s3_lifecycle_pb.BlockerRecord.position:type_name -> s3_lifecycle_pb.MessagePosition 0, // 15: s3_lifecycle_pb.BlockerRecord.action_kind:type_name -> s3_lifecycle_pb.ActionKind 18, // 16: s3_lifecycle_pb.StreamKey.original:type_name -> s3_lifecycle_pb.OriginalKey 19, // 17: s3_lifecycle_pb.StreamKey.predicate:type_name -> s3_lifecycle_pb.PredicateKey 20, // 18: s3_lifecycle_pb.StreamKey.bootstrap:type_name -> s3_lifecycle_pb.BootstrapKey 21, // 19: s3_lifecycle_pb.StreamKey.pending:type_name -> s3_lifecycle_pb.PendingKey 7, // 20: s3_lifecycle_pb.OriginalKey.position:type_name -> s3_lifecycle_pb.MessagePosition 7, // 21: s3_lifecycle_pb.PredicateKey.position:type_name -> s3_lifecycle_pb.MessagePosition 0, // 22: s3_lifecycle_pb.BootstrapKey.action_kind:type_name -> s3_lifecycle_pb.ActionKind 0, // 23: s3_lifecycle_pb.PendingKey.action_kind:type_name -> s3_lifecycle_pb.ActionKind 17, // 24: s3_lifecycle_pb.RetryBudgetEntry.key:type_name -> s3_lifecycle_pb.StreamKey 17, // 25: s3_lifecycle_pb.RetryTarget.key:type_name -> s3_lifecycle_pb.StreamKey 0, // 26: s3_lifecycle_pb.RetryTarget.action_kind:type_name -> s3_lifecycle_pb.ActionKind 14, // 27: s3_lifecycle_pb.ReaderState.LastProcessedOriginalEntry.value:type_name -> s3_lifecycle_pb.FilerShardCursorList 5, // 28: s3_lifecycle_pb.SeaweedS3LifecycleInternal.LifecycleDelete:input_type -> s3_lifecycle_pb.LifecycleDeleteRequest 6, // 29: s3_lifecycle_pb.SeaweedS3LifecycleInternal.LifecycleDelete:output_type -> s3_lifecycle_pb.LifecycleDeleteResponse 29, // [29:30] is the sub-list for method output_type 28, // [28:29] is the sub-list for method input_type 28, // [28:28] is the sub-list for extension type_name 28, // [28:28] is the sub-list for extension extendee 0, // [0:28] is the sub-list for field type_name } func init() { file_s3_lifecycle_proto_init() } func file_s3_lifecycle_proto_init() { if File_s3_lifecycle_proto != nil { return } file_s3_lifecycle_proto_msgTypes[12].OneofWrappers = []any{ (*StreamKey_Original)(nil), (*StreamKey_Predicate)(nil), (*StreamKey_Bootstrap)(nil), (*StreamKey_Pending)(nil), } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_s3_lifecycle_proto_rawDesc), len(file_s3_lifecycle_proto_rawDesc)), NumEnums: 5, NumMessages: 20, NumExtensions: 0, NumServices: 1, }, GoTypes: file_s3_lifecycle_proto_goTypes, DependencyIndexes: file_s3_lifecycle_proto_depIdxs, EnumInfos: file_s3_lifecycle_proto_enumTypes, MessageInfos: file_s3_lifecycle_proto_msgTypes, }.Build() File_s3_lifecycle_proto = out.File file_s3_lifecycle_proto_goTypes = nil file_s3_lifecycle_proto_depIdxs = nil }