It seems that an object’s links’ “Size” field is taken at face value during object put
. This directly impacts the cumulative size of an object reported by object stat
. I am wondering what the purpose of the “Size” field is if it goes entirely unchecked? I’ve started to dig into the go implementations of the various libraries and have so far not found any control flow directly influenced by the “Size” property, but I might have missed something. If the “Size” field plays no role for internal control flow, and goes unchecked, could it be either removed or generalized to some key value meta field on Links?
We use this field to implement efficient seeking in go-unixfs - https://github.com/ipfs/go-unixfs/blob/master/io/pbdagreader.go. You can access this seek in a few ways:
- By specifying
Range
header with gateway requests - Using
--offset
flag inipfs cat
- Using
file.Seek()
on files returned byCoreAPI.Unixfs().Get()
- this currently requires using go-ipfs node directly from Go code, which is hacky, http backed implementation should come soon-ish (coming months) - watch https://github.com/ipfs/go-ipfs/issues/4498 for updates
Thank you. What is your take on the size field going completely unchecked for object put
though? Maybe it should be derived internally? For example, if I create an object with some links, i should be able to look up those links and get the size of the objects based on the links, right? I assume that would be terribly inefficient (perhaps even impossible?). Since you mentioned it’s used in unixfs, maybe the links format should be extensible by whatever subsystem is using them?