fix: store: expCid vs actualCid guard #96
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
In the
BasicIpldStore.Put()
method we have guards that check if the object's provided CID equals the one derived internally. Here and here.One problem is that these guards first include a check to see if
expCid != cid.Undef
and this will never be the case becauseexpCid
is only assigned locally in thisif
block- no assignment toexpCid
escapes or occurs outside that block so it will always equalcid.Undef
in these guards.The other behavioral problem with these guards, I think, is that they are placed after the IPLD block has already been written to the underlying blockstore. So the IPLD block could be written to the blockstore with a CID that the caller does not have. If this is the correct positioning of the guards because the IPLD block should be written with the derived CID even if it does not match the provided one, in that case I think it would make sense for the method to return the CID it wrote to the blockstore with instead of returning cid.Undef.