From 06a8ec5decd2900d1359ccd1b857876e6ab00e1b Mon Sep 17 00:00:00 2001 From: GoEdgeLab Date: Tue, 30 Apr 2024 17:24:08 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BB=B6=E9=95=BF=E8=AF=BB=E5=86=99=E7=BA=BF?= =?UTF-8?q?=E7=A8=8B=E8=B6=85=E6=97=B6=E6=97=B6=E9=97=B4/=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E7=9B=B8=E5=85=B3=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/utils/fs/limiter.go | 2 +- internal/utils/fs/limiter_test.go | 47 +++++++++++++++++++++++++++++++ internal/utils/fs/os.go | 2 ++ 3 files changed, 50 insertions(+), 1 deletion(-) diff --git a/internal/utils/fs/limiter.go b/internal/utils/fs/limiter.go index c08bfd6..5206898 100644 --- a/internal/utils/fs/limiter.go +++ b/internal/utils/fs/limiter.go @@ -41,7 +41,7 @@ func (this *Limiter) Ack() { } func (this *Limiter) TryAck() bool { - const timeoutDuration = 500 * time.Millisecond + const timeoutDuration = 1 * time.Second var timeout *time.Timer select { diff --git a/internal/utils/fs/limiter_test.go b/internal/utils/fs/limiter_test.go index f54fd4d..67a1ec6 100644 --- a/internal/utils/fs/limiter_test.go +++ b/internal/utils/fs/limiter_test.go @@ -4,8 +4,10 @@ package fsutils_test import ( fsutils "github.com/TeaOSLab/EdgeNode/internal/utils/fs" + "github.com/TeaOSLab/EdgeNode/internal/utils/testutils" "github.com/iwind/TeaGo/assert" "testing" + "time" ) func TestLimiter_Ack(t *testing.T) { @@ -52,3 +54,48 @@ func TestLimiter_TryAck(t *testing.T) { a.IsTrue(limiter.FreeThreads() == 0) } } + +func TestLimiter_TryAck2(t *testing.T) { + if !testutils.IsSingleTesting() { + return + } + + var a = assert.NewAssertion(t) + + { + var limiter = fsutils.NewLimiter(4) + var count = limiter.FreeThreads() + a.IsTrue(count == 4) + for i := 0; i < count-1; i++ { + limiter.Ack() + } + a.IsTrue(limiter.FreeThreads() == 1) + a.IsTrue(limiter.TryAck()) + a.IsFalse(limiter.TryAck()) + a.IsFalse(limiter.TryAck()) + + limiter.Release() + a.IsTrue(limiter.TryAck()) + } +} + +func TestLimiter_Timout(t *testing.T) { + var timeout = time.NewTimer(100 * time.Millisecond) + + var r = make(chan bool, 1) + r <- true + + var before = time.Now() + select { + case <-r: + case <-timeout.C: + } + t.Log(time.Since(before).Seconds()*1000, "ms") + + timeout.Stop() + + before = time.Now() + timeout.Reset(100 * time.Millisecond) + <-timeout.C + t.Log(time.Since(before).Seconds()*1000, "ms") +} diff --git a/internal/utils/fs/os.go b/internal/utils/fs/os.go index bc4e0f6..51da4fe 100644 --- a/internal/utils/fs/os.go +++ b/internal/utils/fs/os.go @@ -26,6 +26,8 @@ func ReadFile(filename string) (data []byte, err error) { } func WriteFile(filename string, data []byte, perm os.FileMode) (err error) { + WriterLimiter.Ack() err = os.WriteFile(filename, data, perm) + WriterLimiter.Release() return }