Kaynağa Gözat

Merge pull request #485 from dolonet/doctor/parallel-dc

doctor: run DC connectivity probes in parallel
pull/474/merge
Sergei Arkhipov 1 gün önce
ebeveyn
işleme
827bbd6900
No account linked to committer's email address
1 değiştirilmiş dosya ile 19 ekleme ve 4 silme
  1. 19
    4
      internal/cli/doctor.go

+ 19
- 4
internal/cli/doctor.go Dosyayı Görüntüle

@@ -10,6 +10,7 @@ import (
10 10
 	"slices"
11 11
 	"strconv"
12 12
 	"strings"
13
+	"sync"
13 14
 	"text/template"
14 15
 	"time"
15 16
 
@@ -225,18 +226,32 @@ func (d *Doctor) checkNetwork(ntw mtglib.Network) bool {
225 226
 	dcs := slices.Collect(maps.Keys(essentials.TelegramCoreAddresses))
226 227
 	slices.Sort(dcs)
227 228
 
229
+	errs := make([]error, len(dcs))
230
+
231
+	var wg sync.WaitGroup
232
+	for i, dc := range dcs {
233
+		wg.Go(func() {
234
+			defer func() {
235
+				if r := recover(); r != nil {
236
+					errs[i] = fmt.Errorf("panic: %v", r)
237
+				}
238
+			}()
239
+			errs[i] = d.checkNetworkAddresses(ntw, essentials.TelegramCoreAddresses[dc])
240
+		})
241
+	}
242
+	wg.Wait()
243
+
228 244
 	ok := true
229 245
 
230
-	for _, dc := range dcs {
231
-		err := d.checkNetworkAddresses(ntw, essentials.TelegramCoreAddresses[dc])
232
-		if err == nil {
246
+	for i, dc := range dcs {
247
+		if errs[i] == nil {
233 248
 			tplODCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck
234 249
 				"dc": dc,
235 250
 			})
236 251
 		} else {
237 252
 			tplEDCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck
238 253
 				"dc":    dc,
239
-				"error": err,
254
+				"error": errs[i],
240 255
 			})
241 256
 			ok = false
242 257
 		}

Loading…
İptal
Kaydet