Monorepo for Tangled tangled.org
859
fork

Configure Feed

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

appview,knotmirror: remove use of idresolver package from knotmirror #337

open opened by boltless.me targeting master from sl/nix-fileset

motivation: we don't need idresolver package at all it's just hiding the identity.Directory being unnecessary wrapper.

modifying appview code becuase knotmirror depends on appview/models

Signed-off-by: Seongmin Lee git@boltless.me

Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:plc:xasnlahkri4ewmbuzly2rlc5/sh.tangled.repo.pull/3ml7be3ckfu22
+118 -83
Diff #0
-68
appview/models/label.go
··· 1 1 package models 2 2 3 3 import ( 4 - "context" 5 4 "crypto/sha1" 6 5 "encoding/hex" 7 - "encoding/json" 8 6 "errors" 9 7 "fmt" 10 8 "slices" 11 9 "time" 12 10 13 - "github.com/bluesky-social/indigo/api/atproto" 14 11 "github.com/bluesky-social/indigo/atproto/syntax" 15 - "github.com/bluesky-social/indigo/xrpc" 16 12 "tangled.org/core/api/tangled" 17 - "tangled.org/core/idresolver" 18 13 ) 19 14 20 15 type ConcreteType string ··· 501 496 502 497 return result 503 498 } 504 - 505 - func FetchLabelDefs(r *idresolver.Resolver, aturis []string) ([]LabelDefinition, error) { 506 - var labelDefs []LabelDefinition 507 - ctx := context.Background() 508 - 509 - for _, dl := range aturis { 510 - atUri, err := syntax.ParseATURI(dl) 511 - if err != nil { 512 - return nil, fmt.Errorf("failed to parse AT-URI %s: %v", dl, err) 513 - } 514 - if atUri.Collection() != tangled.LabelDefinitionNSID { 515 - return nil, fmt.Errorf("expected AT-URI pointing %s collection: %s", tangled.LabelDefinitionNSID, atUri) 516 - } 517 - 518 - owner, err := r.ResolveIdent(ctx, atUri.Authority().String()) 519 - if err != nil { 520 - return nil, fmt.Errorf("failed to resolve default label owner DID %s: %v", atUri.Authority(), err) 521 - } 522 - 523 - xrpcc := xrpc.Client{ 524 - Host: owner.PDSEndpoint(), 525 - } 526 - 527 - record, err := atproto.RepoGetRecord( 528 - ctx, 529 - &xrpcc, 530 - "", 531 - atUri.Collection().String(), 532 - atUri.Authority().String(), 533 - atUri.RecordKey().String(), 534 - ) 535 - if err != nil { 536 - return nil, fmt.Errorf("failed to get record for %s: %v", atUri, err) 537 - } 538 - 539 - if record != nil { 540 - bytes, err := record.Value.MarshalJSON() 541 - if err != nil { 542 - return nil, fmt.Errorf("failed to marshal record value for %s: %v", atUri, err) 543 - } 544 - 545 - raw := json.RawMessage(bytes) 546 - labelRecord := tangled.LabelDefinition{} 547 - err = json.Unmarshal(raw, &labelRecord) 548 - if err != nil { 549 - return nil, fmt.Errorf("invalid record for %s: %w", atUri, err) 550 - } 551 - 552 - labelDef, err := LabelDefinitionFromRecord( 553 - atUri.Authority().String(), 554 - atUri.RecordKey().String(), 555 - labelRecord, 556 - ) 557 - if err != nil { 558 - return nil, fmt.Errorf("failed to create label definition from record %s: %v", atUri, err) 559 - } 560 - 561 - labelDefs = append(labelDefs, *labelDef) 562 - } 563 - } 564 - 565 - return labelDefs, nil 566 - }
+76
appview/state/labels.go
··· 1 + package state 2 + 3 + import ( 4 + "context" 5 + "encoding/json" 6 + "fmt" 7 + 8 + "github.com/bluesky-social/indigo/api/atproto" 9 + "github.com/bluesky-social/indigo/atproto/identity" 10 + "github.com/bluesky-social/indigo/atproto/syntax" 11 + "github.com/bluesky-social/indigo/xrpc" 12 + "tangled.org/core/api/tangled" 13 + "tangled.org/core/appview/models" 14 + ) 15 + 16 + func fetchLabelDefs(ctx context.Context, dir identity.Directory, aturis []string) ([]models.LabelDefinition, error) { 17 + var labelDefs []models.LabelDefinition 18 + 19 + for _, dl := range aturis { 20 + atUri, err := syntax.ParseATURI(dl) 21 + if err != nil { 22 + return nil, fmt.Errorf("failed to parse AT-URI %s: %v", dl, err) 23 + } 24 + if atUri.Collection() != tangled.LabelDefinitionNSID { 25 + return nil, fmt.Errorf("expected AT-URI pointing %s collection: %s", tangled.LabelDefinitionNSID, atUri) 26 + } 27 + 28 + owner, err := dir.Lookup(ctx, atUri.Authority()) 29 + if err != nil { 30 + return nil, fmt.Errorf("failed to resolve default label owner DID %s: %v", atUri.Authority(), err) 31 + } 32 + 33 + xrpcc := xrpc.Client{ 34 + Host: owner.PDSEndpoint(), 35 + } 36 + 37 + record, err := atproto.RepoGetRecord( 38 + ctx, 39 + &xrpcc, 40 + "", 41 + atUri.Collection().String(), 42 + atUri.Authority().String(), 43 + atUri.RecordKey().String(), 44 + ) 45 + if err != nil { 46 + return nil, fmt.Errorf("failed to get record for %s: %v", atUri, err) 47 + } 48 + 49 + if record != nil { 50 + bytes, err := record.Value.MarshalJSON() 51 + if err != nil { 52 + return nil, fmt.Errorf("failed to marshal record value for %s: %v", atUri, err) 53 + } 54 + 55 + raw := json.RawMessage(bytes) 56 + labelRecord := tangled.LabelDefinition{} 57 + err = json.Unmarshal(raw, &labelRecord) 58 + if err != nil { 59 + return nil, fmt.Errorf("invalid record for %s: %w", atUri, err) 60 + } 61 + 62 + labelDef, err := models.LabelDefinitionFromRecord( 63 + atUri.Authority().String(), 64 + atUri.RecordKey().String(), 65 + labelRecord, 66 + ) 67 + if err != nil { 68 + return nil, fmt.Errorf("failed to create label definition from record %s: %v", atUri, err) 69 + } 70 + 71 + labelDefs = append(labelDefs, *labelDef) 72 + } 73 + } 74 + 75 + return labelDefs, nil 76 + }
+1 -1
appview/state/state.go
··· 747 747 return nil 748 748 } 749 749 750 - labelDefs, err := models.FetchLabelDefs(r, defaults) 750 + labelDefs, err := fetchLabelDefs(context.Background(), r.Directory(), defaults) 751 751 if err != nil { 752 752 return err 753 753 }
+30 -3
knotmirror/knotmirror.go
··· 3 3 import ( 4 4 "context" 5 5 "fmt" 6 + "net" 6 7 "net/http" 7 8 _ "net/http/pprof" 8 9 "time" 9 10 11 + "github.com/bluesky-social/indigo/atproto/identity" 12 + "github.com/carlmjohnson/versioninfo" 10 13 "github.com/go-chi/chi/v5" 11 14 "github.com/prometheus/client_golang/prometheus/promhttp" 12 - "tangled.org/core/idresolver" 13 15 "tangled.org/core/knotmirror/config" 14 16 "tangled.org/core/knotmirror/db" 15 17 "tangled.org/core/knotmirror/knotstream" ··· 30 32 return fmt.Errorf("initializing db: %w", err) 31 33 } 32 34 33 - resolver := idresolver.DefaultResolver(cfg.PlcUrl) 35 + dir := makeDirectory(cfg.PlcUrl) 34 36 35 37 // NOTE: using plain git-cli for clone/fetch as go-git is too memory-intensive. 36 38 gitm := NewCliGitMirrorManager(cfg.GitRepoBasePath, cfg.KnotUseSSL) ··· 53 55 crawler := NewCrawler(logger, db) 54 56 resyncer := NewResyncer(logger, db, gitm, cfg) 55 57 adminpage := NewAdminServer(logger, db, resyncer) 56 - xrpc := xrpc.New(logger, cfg, db, resolver, knotstream) 58 + xrpc := xrpc.New(logger, cfg, db, dir, knotstream) 57 59 58 60 // maintain repository list with tap 59 61 // NOTE: this can be removed once we introduce did-for-repo because then we can just listen to KnotStream for #identity events. ··· 136 138 logger.Info("shutdown complete") 137 139 return nil 138 140 } 141 + 142 + func makeDirectory(plcUrl string) identity.Directory { 143 + base := identity.BaseDirectory{ 144 + PLCURL: plcUrl, 145 + HTTPClient: http.Client{ 146 + Timeout: time.Second * 10, 147 + Transport: &http.Transport{ 148 + // would want this around 100ms for services doing lots of handle resolution. Impacts PLC connections as well, but not too bad. 149 + IdleConnTimeout: time.Millisecond * 1000, 150 + MaxIdleConns: 100, 151 + }, 152 + }, 153 + Resolver: net.Resolver{ 154 + Dial: func(ctx context.Context, network, address string) (net.Conn, error) { 155 + d := net.Dialer{Timeout: time.Second * 3} 156 + return d.DialContext(ctx, network, address) 157 + }, 158 + }, 159 + TryAuthoritativeDNS: true, 160 + // primary Bluesky and Tangled PDS instances only support HTTP resolution method 161 + SkipDNSDomainSuffixes: []string{".bsky.social", ".tngl.sh"}, 162 + UserAgent: "knotmirror/" + versioninfo.Short(), 163 + } 164 + return identity.NewCacheDirectory(&base, 250_000, time.Hour*24, time.Minute*2, time.Minute*5) 165 + }
+1 -1
knotmirror/xrpc/git_list_branches.go
··· 82 82 } 83 83 84 84 func (x *Xrpc) makeRepoPath(ctx context.Context, repo syntax.ATURI) (string, error) { 85 - id, err := x.resolver.ResolveIdent(ctx, repo.Authority().String()) 85 + id, err := x.dir.Lookup(ctx, repo.Authority()) 86 86 if err != nil { 87 87 return "", err 88 88 }
+1 -1
knotmirror/xrpc/proxy.go
··· 63 63 return &knotInfo{baseURL: knotURL, didSlashRepo: repo.DidSlashRepo()}, nil 64 64 } 65 65 66 - owner, err := x.resolver.ResolveIdent(ctx, repoAt.Authority().String()) 66 + owner, err := x.dir.Lookup(ctx, repoAt.Authority()) 67 67 if err != nil { 68 68 return nil, fmt.Errorf("resolving repo owner: %w", err) 69 69 }
+1 -1
knotmirror/xrpc/sync_request_crawl.go
··· 47 47 writeJson(w, http.StatusBadRequest, atclient.ErrorBody{Name: "BadRequest", Message: fmt.Sprintf("repo parameter invalid: %s", *input.EnsureRepo)}) 48 48 return 49 49 } 50 - owner, err := x.resolver.ResolveIdent(ctx, repoAt.Authority().String()) 50 + owner, err := x.dir.Lookup(ctx, repoAt.Authority()) 51 51 if err != nil || owner.Handle.IsInvalidHandle() { 52 52 l.Error("failed to resolve ident", "err", err, "owner", repoAt.Authority().String()) 53 53 writeErr(w, fmt.Errorf("failed to resolve repo owner"))
+8 -8
knotmirror/xrpc/xrpc.go
··· 9 9 "time" 10 10 11 11 "github.com/bluesky-social/indigo/atproto/atclient" 12 + "github.com/bluesky-social/indigo/atproto/identity" 12 13 "github.com/go-chi/chi/v5" 13 14 "tangled.org/core/api/tangled" 14 - "tangled.org/core/idresolver" 15 15 "tangled.org/core/knotmirror/config" 16 16 "tangled.org/core/knotmirror/knotstream" 17 17 "tangled.org/core/log" ··· 20 20 type Xrpc struct { 21 21 cfg *config.Config 22 22 db *sql.DB 23 - resolver *idresolver.Resolver 23 + dir identity.Directory 24 24 ks *knotstream.KnotStream 25 25 logger *slog.Logger 26 26 httpClient *http.Client 27 27 } 28 28 29 - func New(logger *slog.Logger, cfg *config.Config, db *sql.DB, resolver *idresolver.Resolver, ks *knotstream.KnotStream) *Xrpc { 29 + func New(logger *slog.Logger, cfg *config.Config, db *sql.DB, dir identity.Directory, ks *knotstream.KnotStream) *Xrpc { 30 30 return &Xrpc{ 31 - cfg: cfg, 32 - db: db, 33 - resolver: resolver, 34 - ks: ks, 35 - logger: log.SubLogger(logger, "xrpc"), 31 + cfg: cfg, 32 + db: db, 33 + dir: dir, 34 + ks: ks, 35 + logger: log.SubLogger(logger, "xrpc"), 36 36 httpClient: &http.Client{ 37 37 Timeout: 30 * time.Second, 38 38 },

History

1 round 0 comments
sign up or login to add to the discussion
boltless.me submitted #0
1 commit
expand
appview,knotmirror: remove use of idresolver package from knotmirror
merge conflicts detected
expand
  • knotmirror/knotmirror.go:3
  • knotmirror/xrpc/git_list_branches.go:82
  • knotmirror/xrpc/proxy.go:63
  • knotmirror/xrpc/xrpc.go:9
expand 0 comments