Просмотр исходного кода

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

doctor: run DC connectivity probes in parallel
pull/474/merge
Sergei Arkhipov 1 день назад
Родитель
Сommit
827bbd6900
Аккаунт пользователя с таким Email не найден
1 измененных файлов: 19 добавлений и 4 удалений
  1. 19
    4
      internal/cli/doctor.go

+ 19
- 4
internal/cli/doctor.go Просмотреть файл

10
 	"slices"
10
 	"slices"
11
 	"strconv"
11
 	"strconv"
12
 	"strings"
12
 	"strings"
13
+	"sync"
13
 	"text/template"
14
 	"text/template"
14
 	"time"
15
 	"time"
15
 
16
 
225
 	dcs := slices.Collect(maps.Keys(essentials.TelegramCoreAddresses))
226
 	dcs := slices.Collect(maps.Keys(essentials.TelegramCoreAddresses))
226
 	slices.Sort(dcs)
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
 	ok := true
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
 			tplODCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck
248
 			tplODCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck
234
 				"dc": dc,
249
 				"dc": dc,
235
 			})
250
 			})
236
 		} else {
251
 		} else {
237
 			tplEDCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck
252
 			tplEDCConnect.Execute(os.Stdout, map[string]any{ //nolint: errcheck
238
 				"dc":    dc,
253
 				"dc":    dc,
239
-				"error": err,
254
+				"error": errs[i],
240
 			})
255
 			})
241
 			ok = false
256
 			ok = false
242
 		}
257
 		}

Загрузка…
Отмена
Сохранить