Code Monkey home page Code Monkey logo

Comments (2)

roman-khimov avatar roman-khimov commented on July 18, 2024
May 30 17:58:59 metis4 neofs-node[4408]: 2024-05-30T17:58:59.789Z        error        replicator/process.go:76        could not replicate object        {"component": "Object Replicator", "node": "03aeff8a19f0202090afb0916b1c00b432321be7e8623a06c9b9b5db8ee5c053a4", "object": "HXSaMJXk2g8C14ht8HSi7BBaiYZ1HeWh2xnWPGQCg4H6/HmECRDC25qyX8MxNHeA21PK8aymLZcPSYQKyLBNBiTUM", "error": "copy object using NeoFS API client of the remote node: status: code = 1024 message = failed to verify and store object locally: validate object format: object did not pass expiration check: object has expired"}

from neofs-node.

carpawell avatar carpawell commented on July 18, 2024

They are parts of a big (V1, hehe) object. Needed to be investigated but it seems to me that happened smth like this:

  1. V1 parts had (or had to have but did not?) expiration attr in every part
  2. There is no expiration for its parts in #390 (at least I do no see it), only handling small objects or GC mark for root object and "dropping" non-existing big object from the blobstor
  3. The new V2 object scheme landed and brought a nice check for replicated small objects (both for V1 and V2 big objects):
    if obj.HasParent() {
    if splitID != nil {
    // V1 split
    if firstSet {
    return errors.New("v1 split: first object ID is set")
    }
    } else {
    // V2 split
    if !firstSet {
    // first part only
    if obj.Parent() == nil {
    return errors.New("v2 split: first object part does not have parent header")
    }
    } else {
    // 2nd+ parts
    typ := obj.Type()
    // link object only
    if typ == object.TypeLink && (par == nil || par.Signature() == nil) {
    return errors.New("v2 split: incorrect link object's parent header")
    }
    if _, hasPrevious := obj.PreviousID(); typ != object.TypeLink && !hasPrevious {
    return errors.New("v2 split: middle part does not have previous object ID")
    }
    }
    }
    }
  4. The check started to work and does not allow expired parts replication but GC still does not expire small parts.

The main solutions, for now, should include the following: see an expired big object and expire its every part, not just mark the root object as deleted.

from neofs-node.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.