this repo has no description
0
fork

Configure Feed

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

Use a custom resolver for DNS lookups

+31 -3
+21 -2
api/extra.go
··· 77 77 78 78 type ProdHandleResolver struct { 79 79 client *http.Client 80 + resolver *net.Resolver 80 81 ReqMod func(*http.Request, string) error 81 82 FailCache *arc.ARCCache[string, *failCacheItem] 82 83 } 83 84 84 - func NewProdHandleResolver(failureCacheSize int) (*ProdHandleResolver, error) { 85 + func NewProdHandleResolver(failureCacheSize int, resolveAddr string, forceUDP bool) (*ProdHandleResolver, error) { 85 86 failureCache, err := arc.NewARC[string, *failCacheItem](failureCacheSize) 86 87 if err != nil { 87 88 return nil, err 88 89 } 89 90 91 + if resolveAddr == "" { 92 + resolveAddr = "1.1.1.1:53" 93 + } 94 + 90 95 c := http.Client{ 91 96 Transport: otelhttp.NewTransport(http.DefaultTransport), 92 97 Timeout: time.Second * 10, 93 98 } 94 99 100 + r := &net.Resolver{ 101 + PreferGo: true, 102 + Dial: func(ctx context.Context, network, address string) (net.Conn, error) { 103 + d := net.Dialer{ 104 + Timeout: time.Second * 10, 105 + } 106 + if forceUDP { 107 + network = "udp" 108 + } 109 + return d.DialContext(ctx, network, resolveAddr) 110 + }, 111 + } 112 + 95 113 return &ProdHandleResolver{ 96 114 FailCache: failureCache, 97 115 client: &c, 116 + resolver: r, 98 117 }, nil 99 118 } 100 119 ··· 212 231 } 213 232 214 233 func (dr *ProdHandleResolver) resolveDNS(ctx context.Context, handle string) (string, error) { 215 - res, err := net.LookupTXT("_atproto." + handle) 234 + res, err := dr.resolver.LookupTXT(ctx, "_atproto."+handle) 216 235 if err != nil { 217 236 return "", fmt.Errorf("handle lookup failed: %w", err) 218 237 }
+10 -1
cmd/bigsky/main.go
··· 145 145 Value: 4 * time.Hour, 146 146 Usage: "interval between compaction runs, set to 0 to disable scheduled compaction", 147 147 }, 148 + &cli.StringFlag{ 149 + Name: "resolve-address", 150 + EnvVars: []string{"RESOLVE_ADDRESS"}, 151 + Value: "1.1.1.1:53", 152 + }, 153 + &cli.BoolFlag{ 154 + Name: "force-dns-udp", 155 + EnvVars: []string{"FORCE_DNS_UDP"}, 156 + }, 148 157 } 149 158 150 159 app.Action = Bigsky ··· 323 332 blobstore = &blobs.DiskBlobStore{Dir: bsdir} 324 333 } 325 334 326 - prodHR, err := api.NewProdHandleResolver(100_000) 335 + prodHR, err := api.NewProdHandleResolver(100_000, cctx.String("resolve-address"), cctx.Bool("force-dns-udp")) 327 336 if err != nil { 328 337 return fmt.Errorf("failed to set up handle resolver: %w", err) 329 338 }