refactor(tvix/nar-bridge): do root directory dgst check in uploader
This check makes more sense there, and gives stronger semantics - Done() only succeeds if the other side successfully received everything, *and* came up with the same hashes as we did. Change-Id: I20b706961053fd00d22cc70e1c8cc859705587e0 Reviewed-on: https://cl.tvl.fyi/c/depot/+/9542 Tested-by: BuildkiteCI Autosubmit: flokli <flokli@flokli.de> Reviewed-by: Connor Brewster <cbrewster@hey.com>
This commit is contained in:
parent
c04041a001
commit
cb807ad79b
2 changed files with 19 additions and 20 deletions
|
|
@ -200,31 +200,12 @@ func (p *PathInfoServiceServer) Get(ctx context.Context, getPathInfoRequest *sto
|
|||
|
||||
// Close the directories uploader. This ensures the DirectoryService has
|
||||
// properly persisted all Directory messages sent.
|
||||
directoriesPutResponse, err := directoriesUploader.Done()
|
||||
if err != nil {
|
||||
if _, err := directoriesUploader.Done(); err != nil {
|
||||
log.WithError(err).Error("error during directory upload")
|
||||
|
||||
return nil, status.Error(codes.Internal, "error during directory upload")
|
||||
}
|
||||
|
||||
// If we uploaded directories (so directoriesPutResponse doesn't return null),
|
||||
// the RootDigest field in directoriesPutResponse should match the digest
|
||||
// returned in importedPathInfo.
|
||||
// This check ensures the directory service came up with the same root hash as we did.
|
||||
if directoriesPutResponse != nil {
|
||||
rootDigestPathInfo := pathInfo.GetNode().GetDirectory().GetDigest()
|
||||
rootDigestDirectoriesPutResponse := directoriesPutResponse.GetRootDigest()
|
||||
|
||||
log := log.WithFields(logrus.Fields{
|
||||
"root_digest_pathinfo": rootDigestPathInfo,
|
||||
"root_digest_directories_put_resp": rootDigestDirectoriesPutResponse,
|
||||
})
|
||||
if !bytes.Equal(rootDigestPathInfo, rootDigestDirectoriesPutResponse) {
|
||||
log.Errorf("returned root digest doesn't match what's calculated")
|
||||
return nil, status.Error(codes.Internal, "error in root digest calculation")
|
||||
}
|
||||
}
|
||||
|
||||
// Compare NAR hash in the NARInfo with the one we calculated while reading the NAR
|
||||
// We already checked above that the digest is in sha256.
|
||||
importedNarSha256 := pathInfo.GetNarinfo().GetNarSha256()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue