policer: Do not drop required linking objects #854
No reviewers
Labels
No labels
P0
P1
P2
P3
badger
frostfs-adm
frostfs-cli
frostfs-ir
frostfs-lens
frostfs-node
good first issue
triage
Infrastructure
blocked
bug
config
discussion
documentation
duplicate
enhancement
go
help wanted
internal
invalid
kludge
observability
perfomance
question
refactoring
wontfix
No milestone
No project
No assignees
4 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: TrueCloudLab/frostfs-node#854
Loading…
Reference in a new issue
No description provided.
Delete branch "dstepanov-yadro/frostfs-node:fix/linking_object_replication"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #825
@ -13,0 +16,4 @@
IsLinkingObject bool
}
func (v AddressWithType) String() string {
To use in
printf
-methods with%s
Why is it a problem? Linking object loss is tolerable, we can still build everything.
Or is it an optimization for failover cases?
@ -13,0 +17,4 @@
}
func (v AddressWithType) String() string {
return fmt.Sprintf("address: %s, type: %s, is linking: %s", v.Address.String(), v.Type.String(), strconv.FormatBool(v.IsLinkingObject))
I think with
%s
we do not need to call.String()
and%t
is the same asFormatBool
-- is your implementation intentional?Fixed
@ -217,0 +221,4 @@
var isLinkingObj bool
if objType == objectSDK.TypeRegular {
var o objectSDK.Object
if err := o.Unmarshal(v); err != nil {
Doing this on every select might slow down lot's of things (policer, evacuation, basically any listing)
Don't we have some bucket from where we could take this info?
List
used by evacuation, doctor and policier. Evacuation and doctor are mostly I/O bounded operations, so I don't think there is great impact of unmarshaling. And policier requires unmarshaling: there is no special bucket for linking objects.Also this is metabase: objects in metabase don't contain payload, only headers etc.
For example, with storage policy
REP 2 CBF 2 SELECT 2 FROM *
on 4 node clustedPut
(orPutSingle
) puts linking object on 4 node (seefunc needAdditionalBroadcast(obj *objectSDK.Object, localOnly bool) bool {
), but in some time policier drops 2 copies (see
if typ == objectSDK.TypeLock || typ == objectSDK.TypeTombstone {
).
It looks like a bug. Why node saves 4 copies of linking objects, but in next second drops two of them?
edddd60499
tof44d3ddc77