浏览代码

确保停止等待时间为正数

在 `server_config.go` 中修改了 `process` 方法,使用新的 `ReadTimeDurationPositive` 函数来保证 `StopWaitTime` 为正数。同时,在 `strconvutils/time.go` 中新增了 `ReadTimeDurationPositive` 函数,该函数会将负数时间转换为零。
SongZihuan 1 周之前
父节点
当前提交
5c659949c3
共有 2 个文件被更改,包括 32 次插入23 次删除
  1. 1 1
      src/config/server_config.go
  2. 31 22
      src/utils/strconvutils/time.go

+ 1 - 1
src/config/server_config.go

@@ -33,7 +33,7 @@ func (d *ServerConfig) check(c *configInfo) (err configerror.Error) {
 }
 
 func (d *ServerConfig) process(c *configInfo) (cfgErr configerror.Error) {
-	d.StopWaitTimeDuration = strconvutils.ReadTimeDuration(d.StopWaitTime)
+	d.StopWaitTimeDuration = strconvutils.ReadTimeDurationPositive(d.StopWaitTime)
 	if d.StopWaitTimeDuration < 10*time.Second {
 		_ = configerror.NewWarningf("stop-wait-time (value: %s) is less than the recommended value of 10s", strconvutils.TimeDurationToString(d.StopWaitTimeDuration))
 	}

+ 31 - 22
src/utils/strconvutils/time.go

@@ -11,6 +11,15 @@ import (
 	"time"
 )
 
+func ReadTimeDurationPositive(str string) time.Duration {
+	res := ReadTimeDuration(str)
+	if res < 0 {
+		return 0
+	}
+
+	return res
+}
+
 func ReadTimeDuration(str string) time.Duration {
 	if str == "forever" || str == "none" {
 		return -1
@@ -18,109 +27,109 @@ func ReadTimeDuration(str string) time.Duration {
 
 	if strings.HasSuffix(strings.ToUpper(str), "Y") {
 		numStr := str[:len(str)-1]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * 365 * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "year") {
 		numStr := str[:len(str)-4]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * 365 * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "M") {
 		numStr := str[:len(str)-1]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * 31 * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "month") {
 		numStr := str[:len(str)-5]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * 31 * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "W") {
 		numStr := str[:len(str)-1]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * 7 * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "week") {
 		numStr := str[:len(str)-4]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * 7 * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "D") {
 		numStr := str[:len(str)-1]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "day") {
 		numStr := str[:len(str)-3]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * 24 * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "H") {
 		numStr := str[:len(str)-1]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "hour") {
 		numStr := str[:len(str)-4]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Hour * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "Min") { // 不能用M,否则会和 Month 冲突
 		numStr := str[:len(str)-3]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Minute * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "minute") {
 		numStr := str[:len(str)-6]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Minute * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "S") {
 		numStr := str[:len(str)-1]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Second * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "second") {
 		numStr := str[:len(str)-6]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Second * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "MS") {
 		numStr := str[:len(str)-2]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Millisecond * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "millisecond") {
 		numStr := str[:len(str)-11]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Millisecond * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "MiS") { // 不能用 MS , 否则会和 millisecond 冲突
 		numStr := str[:len(str)-3]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Microsecond * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToUpper(str), "MicroS") {
 		numStr := str[:len(str)-6]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Microsecond * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "microsecond") {
 		numStr := str[:len(str)-11]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Microsecond * time.Duration(num)
 	}
 
 	if strings.HasSuffix(strings.ToUpper(str), "NS") {
 		numStr := str[:len(str)-2]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Nanosecond * time.Duration(num)
 	} else if strings.HasSuffix(strings.ToLower(str), "nanosecond") {
 		numStr := str[:len(str)-10]
-		num, _ := strconv.ParseUint(numStr, 10, 64)
+		num, _ := strconv.ParseInt(numStr, 10, 64)
 		return time.Nanosecond * time.Duration(num)
 	}
 
-	num, _ := strconv.ParseUint(str, 10, 64)
+	num, _ := strconv.ParseInt(str, 10, 64)
 	return time.Duration(num) * time.Second
 }