A fork of the Cocoon PDS but being made more distributed.
11

Configure Feed

Select the types of activity you want to include in your feed.

improve blob importing

Hailey (Nov 17, 2025, 10:20 AM -0800) 10f31b91 521a73a5

+46 -15
+46 -15
server/handle_server_check_account_status.go
··· 1 1 package server 2 2 3 3 import ( 4 + "errors" 5 + "sync" 6 + 7 + "github.com/bluesky-social/indigo/atproto/syntax" 4 8 "github.com/haileyok/cocoon/internal/helpers" 5 9 "github.com/haileyok/cocoon/models" 6 10 "github.com/ipfs/go-cid" ··· 22 26 func (s *Server) handleServerCheckAccountStatus(e echo.Context) error { 23 27 urepo := e.Get("repo").(*models.RepoActor) 24 28 29 + _, didErr := syntax.ParseDID(urepo.Repo.Did) 30 + if didErr != nil { 31 + s.logger.Error("error validating did", "err", didErr) 32 + } 33 + 25 34 resp := ComAtprotoServerCheckAccountStatusResponse{ 26 35 Activated: true, // TODO: should allow for deactivation etc. 27 - ValidDid: true, // TODO: should probably verify? 36 + ValidDid: didErr == nil, 28 37 RepoRev: urepo.Rev, 29 38 ImportedBlobs: 0, // TODO: ??? 30 39 } ··· 34 43 s.logger.Error("error casting cid", "error", err) 35 44 return helpers.ServerError(e, nil) 36 45 } 46 + 37 47 resp.RepoCommit = rootcid.String() 38 48 39 49 type CountResp struct { ··· 41 51 } 42 52 43 53 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 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 + }() 49 77 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 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 + }() 56 85 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) 86 + wg.Wait() 87 + if procErr != nil { 60 88 return helpers.ServerError(e, nil) 61 89 } 90 + 91 + resp.RepoBlocks = blockCtResp.Ct 92 + resp.IndexedRecords = recCtResp.Ct 62 93 resp.ExpectedBlobs = blobCtResp.Ct 63 94 64 95 return e.JSON(200, resp)