From b8cc548d4140347205461134401865a8f5291fc7 Mon Sep 17 00:00:00 2001 From: Simone Basso Date: Sun, 28 Aug 2022 12:02:17 +0200 Subject: [PATCH] fix(oohelperd): enforce timeout for each measurement step (#888) While working on https://github.com/ooni/probe/issues/2237, I noticed there's no enforced timeout for measurement tasks. So, this diff introduces the following timeouts: 1. use a 4 seconds timeout for the DNS lookup; 2. use a 10 seconds timeout for TCP; 3. use a 15 seconds timeout for HTTP. They are a bit stricter than what we have on the probe because the TH should supposedly have better bandwidth and connectivity. --- internal/cmd/oohelperd/dns.go | 4 ++++ internal/cmd/oohelperd/http.go | 4 ++++ internal/cmd/oohelperd/tcpconnect.go | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/internal/cmd/oohelperd/dns.go b/internal/cmd/oohelperd/dns.go index 7f71e83..6b64940 100644 --- a/internal/cmd/oohelperd/dns.go +++ b/internal/cmd/oohelperd/dns.go @@ -7,6 +7,7 @@ package main import ( "context" "sync" + "time" "github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity" "github.com/ooni/probe-cli/v3/internal/model" @@ -38,6 +39,9 @@ type dnsConfig struct { // dnsDo performs the DNS check. func dnsDo(ctx context.Context, config *dnsConfig) { + const timeout = 4 * time.Second + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() defer config.Wg.Done() reso := config.NewResolver() defer reso.CloseIdleConnections() diff --git a/internal/cmd/oohelperd/http.go b/internal/cmd/oohelperd/http.go index d177d3c..596404c 100644 --- a/internal/cmd/oohelperd/http.go +++ b/internal/cmd/oohelperd/http.go @@ -10,6 +10,7 @@ import ( "net/http" "strings" "sync" + "time" "github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity" "github.com/ooni/probe-cli/v3/internal/model" @@ -44,6 +45,9 @@ type httpConfig struct { // httpDo performs the HTTP check. func httpDo(ctx context.Context, config *httpConfig) { + const timeout = 15 * time.Second + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() defer config.Wg.Done() req, err := http.NewRequestWithContext(ctx, "GET", config.URL, nil) if err != nil { diff --git a/internal/cmd/oohelperd/tcpconnect.go b/internal/cmd/oohelperd/tcpconnect.go index 8611893..b2df17b 100644 --- a/internal/cmd/oohelperd/tcpconnect.go +++ b/internal/cmd/oohelperd/tcpconnect.go @@ -7,6 +7,7 @@ package main import ( "context" "sync" + "time" "github.com/ooni/probe-cli/v3/internal/engine/experiment/webconnectivity" "github.com/ooni/probe-cli/v3/internal/model" @@ -42,6 +43,9 @@ type tcpConfig struct { // tcpDo performs the TCP check. func tcpDo(ctx context.Context, config *tcpConfig) { + const timeout = 10 * time.Second + ctx, cancel := context.WithTimeout(ctx, timeout) + defer cancel() defer config.Wg.Done() dialer := config.NewDialer() defer dialer.CloseIdleConnections()