forked from hailey.at/cocoon
An atproto PDS written in Go

improve blob importing

Changed files
+46 -15
server
+46 -15
server/handle_server_check_account_status.go
··· 1 package server 2 3 import ( 4 "github.com/haileyok/cocoon/internal/helpers" 5 "github.com/haileyok/cocoon/models" 6 "github.com/ipfs/go-cid" ··· 22 func (s *Server) handleServerCheckAccountStatus(e echo.Context) error { 23 urepo := e.Get("repo").(*models.RepoActor) 24 25 resp := ComAtprotoServerCheckAccountStatusResponse{ 26 Activated: true, // TODO: should allow for deactivation etc. 27 - ValidDid: true, // TODO: should probably verify? 28 RepoRev: urepo.Rev, 29 ImportedBlobs: 0, // TODO: ??? 30 } ··· 34 s.logger.Error("error casting cid", "error", err) 35 return helpers.ServerError(e, nil) 36 } 37 resp.RepoCommit = rootcid.String() 38 39 type CountResp struct { ··· 41 } 42 43 var blockCtResp CountResp 44 - if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blocks WHERE did = ?", nil, urepo.Repo.Did).Scan(&blockCtResp).Error; err != nil { 45 - s.logger.Error("error getting block count", "error", err) 46 - return helpers.ServerError(e, nil) 47 - } 48 - resp.RepoBlocks = blockCtResp.Ct 49 50 - var recCtResp CountResp 51 - if err := s.db.Raw("SELECT COUNT(*) AS ct FROM records WHERE did = ?", nil, urepo.Repo.Did).Scan(&recCtResp).Error; err != nil { 52 - s.logger.Error("error getting record count", "error", err) 53 - return helpers.ServerError(e, nil) 54 - } 55 - resp.IndexedRecords = recCtResp.Ct 56 57 - var blobCtResp CountResp 58 - if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blobs WHERE did = ?", nil, urepo.Repo.Did).Scan(&blobCtResp).Error; err != nil { 59 - s.logger.Error("error getting record count", "error", err) 60 return helpers.ServerError(e, nil) 61 } 62 resp.ExpectedBlobs = blobCtResp.Ct 63 64 return e.JSON(200, resp)
··· 1 package server 2 3 import ( 4 + "errors" 5 + "sync" 6 + 7 + "github.com/bluesky-social/indigo/atproto/syntax" 8 "github.com/haileyok/cocoon/internal/helpers" 9 "github.com/haileyok/cocoon/models" 10 "github.com/ipfs/go-cid" ··· 26 func (s *Server) handleServerCheckAccountStatus(e echo.Context) error { 27 urepo := e.Get("repo").(*models.RepoActor) 28 29 + _, didErr := syntax.ParseDID(urepo.Repo.Did) 30 + if didErr != nil { 31 + s.logger.Error("error validating did", "err", didErr) 32 + } 33 + 34 resp := ComAtprotoServerCheckAccountStatusResponse{ 35 Activated: true, // TODO: should allow for deactivation etc. 36 + ValidDid: didErr == nil, 37 RepoRev: urepo.Rev, 38 ImportedBlobs: 0, // TODO: ??? 39 } ··· 43 s.logger.Error("error casting cid", "error", err) 44 return helpers.ServerError(e, nil) 45 } 46 + 47 resp.RepoCommit = rootcid.String() 48 49 type CountResp struct { ··· 51 } 52 53 var blockCtResp CountResp 54 + var recCtResp CountResp 55 + var blobCtResp CountResp 56 + 57 + var wg sync.WaitGroup 58 + var procErr error 59 + 60 + wg.Add(1) 61 + go func() { 62 + defer wg.Done() 63 + if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blocks WHERE did = ?", nil, urepo.Repo.Did).Scan(&blockCtResp).Error; err != nil { 64 + s.logger.Error("error getting block count", "error", err) 65 + procErr = errors.Join(procErr, err) 66 + } 67 + }() 68 + 69 + wg.Add(1) 70 + go func() { 71 + defer wg.Done() 72 + if err := s.db.Raw("SELECT COUNT(*) AS ct FROM records WHERE did = ?", nil, urepo.Repo.Did).Scan(&recCtResp).Error; err != nil { 73 + s.logger.Error("error getting record count", "error", err) 74 + procErr = errors.Join(procErr, err) 75 + } 76 + }() 77 78 + wg.Add(1) 79 + go func() { 80 + if err := s.db.Raw("SELECT COUNT(*) AS ct FROM blobs WHERE did = ?", nil, urepo.Repo.Did).Scan(&blobCtResp).Error; err != nil { 81 + s.logger.Error("error getting expected blobs count", "error", err) 82 + procErr = errors.Join(procErr, err) 83 + } 84 + }() 85 86 + wg.Wait() 87 + if procErr != nil { 88 return helpers.ServerError(e, nil) 89 } 90 + 91 + resp.RepoBlocks = blockCtResp.Ct 92 + resp.IndexedRecords = recCtResp.Ct 93 resp.ExpectedBlobs = blobCtResp.Ct 94 95 return e.JSON(200, resp)