Skip to content

Commit 7dbbaca

Browse files
authored
Merge pull request #1750 from cloudwego/release-v0.13.1
chore: release v0.13.1
2 parents 1dd7526 + a041462 commit 7dbbaca

File tree

8 files changed

+89
-17
lines changed

8 files changed

+89
-17
lines changed

pkg/remote/trans/nphttp2/grpc/http2_client.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,8 @@ type http2Client struct {
115115
// variable.
116116
kpDormant bool
117117
onGoAway func(GoAwayReason)
118-
onClose func()
118+
// Important: when onClose is invoked, the http2Client.mu is held
119+
onClose func()
119120

120121
bufferPool *bufferPool
121122
}

pkg/remote/trans/nphttp2/grpc/http2_server.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ import (
3737
"github.com/cloudwego/kitex/pkg/remote/codec/protobuf/encoding"
3838
"github.com/cloudwego/kitex/pkg/remote/transmeta"
3939

40-
"github.com/cloudwego/netpoll"
4140
"golang.org/x/net/http2"
4241
"golang.org/x/net/http2/hpack"
4342
"google.golang.org/protobuf/proto"
4443

44+
"github.com/cloudwego/netpoll"
45+
4546
"github.com/cloudwego/kitex/pkg/gofunc"
4647
"github.com/cloudwego/kitex/pkg/klog"
4748
"github.com/cloudwego/kitex/pkg/remote/trans/nphttp2/codes"

pkg/remote/trans/nphttp2/grpc/transport_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ import (
3737
"testing"
3838
"time"
3939

40-
"github.com/cloudwego/netpoll"
4140
"golang.org/x/net/http2"
4241
"golang.org/x/net/http2/hpack"
4342

43+
"github.com/cloudwego/netpoll"
44+
4445
"github.com/cloudwego/kitex/internal/test"
4546
"github.com/cloudwego/kitex/pkg/remote/trans/nphttp2/codes"
4647
"github.com/cloudwego/kitex/pkg/remote/trans/nphttp2/grpc/grpcframe"

pkg/utils/sharedticker.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,17 @@ func (t *SharedTicker) Tick(interval time.Duration) {
108108
}
109109

110110
func (t *SharedTicker) syncExec() {
111+
var todoTasks []TickerTask
111112
t.Lock()
113+
todoTasks = make([]TickerTask, 0, len(t.tasks))
112114
for task := range t.tasks {
113-
task.Tick()
115+
todoTasks = append(todoTasks, task)
114116
}
115117
t.Unlock()
118+
119+
for _, task := range todoTasks {
120+
task.Tick()
121+
}
116122
}
117123

118124
func (t *SharedTicker) asyncExec() {

pkg/utils/sharedticker_test.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,3 +88,28 @@ func TestSharedTickerTick(t *testing.T) {
8888
time.Sleep(150 * time.Millisecond)
8989
}
9090
}
91+
92+
type concurrentTask struct {
93+
st *SharedTicker
94+
finishCh chan struct{}
95+
}
96+
97+
func (ct *concurrentTask) Tick() {
98+
// when Tick is invoked, SharedTicker.mu should not be hold
99+
ct.st.Lock()
100+
// prevents Tick from being executed multiple times due to goroutine scheduling.
101+
select {
102+
case ct.finishCh <- struct{}{}:
103+
default:
104+
}
105+
ct.st.Unlock()
106+
}
107+
108+
func TestSyncSharedTickerConcurrent(t *testing.T) {
109+
duration := 100 * time.Millisecond
110+
st := NewSyncSharedTicker(duration)
111+
finishCh := make(chan struct{}, 1)
112+
st.Add(&concurrentTask{st: st, finishCh: finishCh})
113+
time.Sleep(150 * time.Millisecond)
114+
<-finishCh
115+
}

tool/internal_pkg/prutal/prutal.go

Lines changed: 38 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"os"
2222
"path"
2323
"path/filepath"
24+
"regexp"
2425
"strings"
2526

2627
"github.com/cloudwego/kitex/tool/internal_pkg/generator"
@@ -68,7 +69,7 @@ func (pg *PrutalGen) generateClientServerFiles(f *prutalgen.Proto, p *generator.
6869
return err
6970
}
7071
for _, f := range fs {
71-
writeGoFile(f.Name, []byte(f.Content))
72+
writeFile(f.Name, []byte(f.Content))
7273
}
7374
}
7475
return nil
@@ -134,7 +135,7 @@ func (pg *PrutalGen) Process() error {
134135
return err
135136
}
136137
for _, f := range fs {
137-
writeGoFile(f.Name, []byte(f.Content))
138+
writeFile(f.Name, []byte(f.Content))
138139
}
139140
}
140141

@@ -148,7 +149,7 @@ func (pg *PrutalGen) Process() error {
148149
return err
149150
}
150151
for _, f := range fs {
151-
writeGoFile(f.Name, []byte(f.Content))
152+
writeFile(f.Name, []byte(f.Content))
152153
}
153154
}
154155
return nil
@@ -280,7 +281,7 @@ func genStructsAndKitexInterfaces(f *prutalgen.Proto, c *generator.Config, dir s
280281
fn := strings.TrimSuffix(path.Base(f.ProtoFile), ".proto") + ".pb.go"
281282
out := filepath.Join(dir, fn)
282283
f.Infof("generating %s", out)
283-
writeGoFile(out, w.Bytes())
284+
writeFile(out, w.Bytes())
284285
}
285286

286287
func genKitexServiceInterface(f *prutalgen.Proto, w *prutalgen.CodeWriter, streamx bool) {
@@ -338,17 +339,43 @@ func getImportPath(pkg, module, prefix string) (string, bool) {
338339
return path.Join(prefix, pkg), true
339340
}
340341

341-
func writeGoFile(fn string, data []byte) {
342-
formatted, err := format.Source(data)
343-
if err != nil {
344-
log.Errorf("format file %q err: %s", fn, err)
345-
formatted = data
342+
func writeFile(fn string, data []byte) {
343+
if strings.HasSuffix(fn, ".go") {
344+
formatted, err := format.Source(data)
345+
if err != nil {
346+
log.Errorf("format file %q err: %s", fn, err)
347+
} else {
348+
data = formatted
349+
}
350+
truncateFastPBFile(fn)
346351
}
347-
err = os.MkdirAll(filepath.Dir(fn), 0o755)
352+
err := os.MkdirAll(filepath.Dir(fn), 0o755)
348353
if err == nil {
349-
err = os.WriteFile(fn, formatted, 0o644)
354+
err = os.WriteFile(fn, data, 0o644)
350355
}
351356
if err != nil {
352357
log.Errorf("write file %q err: %s", fn, err)
353358
}
354359
}
360+
361+
var packageRE = regexp.MustCompile(`package\s+([a-zA-Z0-9_]+)`)
362+
363+
// truncateFastPBFile truncates xxx.pb.fast.go to avoid using FastWrite/FastRead methods.
364+
//
365+
// NOTE: or we can remove the file directly?
366+
// since *.pb.fast.go files possibly maintained by git, modifying it would be better?
367+
func truncateFastPBFile(fn string) {
368+
if !strings.HasSuffix(fn, ".pb.go") {
369+
return
370+
}
371+
fn = strings.TrimSuffix(fn, ".pb.go") + ".pb.fast.go"
372+
content, err := os.ReadFile(fn)
373+
if err != nil {
374+
// not exists?
375+
return
376+
}
377+
b := []byte("// This file was generated by Fastpb, and it's deprecated by Kitex. Free to delete.\n\n")
378+
b = append(b, packageRE.Find(content)...)
379+
b = append(b, '\n')
380+
os.WriteFile(fn, b, 0o644)
381+
}

tool/internal_pkg/prutal/prutal_test.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package prutal
1919
import (
2020
"os"
2121
"path/filepath"
22+
"strings"
2223
"testing"
2324

2425
"github.com/cloudwego/kitex/internal/test"
@@ -67,17 +68,27 @@ service ServiceC {
6768
}
6869
`), 0o644)
6970

71+
fastpbFile := filepath.Join(dir, "kitex_gen/test/test.pb.fast.go")
72+
err := os.MkdirAll(filepath.Dir(fastpbFile), 0o755)
73+
test.Assert(t, err == nil, err)
74+
err = os.WriteFile(fastpbFile, []byte("package test"), 0o644)
75+
test.Assert(t, err == nil, err)
76+
7077
c := generator.Config{IDL: fn}
7178
c.GenerateMain = true
7279
c.CombineService = true
7380
c.PackagePrefix = "github.com/cloudwego/kitex/tool/internal_pkg/prutal/kitex_gen"
7481
c.OutputPath = dir
7582
c.GenPath = "kitex_gen"
7683
p := NewPrutalGen(c)
77-
err := p.Process()
84+
err = p.Process()
7885
test.Assert(t, err == nil, err)
7986

8087
b, err := os.ReadFile(filepath.Join(dir, "kitex_gen/test/test.pb.go"))
8188
test.Assert(t, err == nil, err)
8289
t.Log(string(b))
90+
91+
b, err = os.ReadFile(fastpbFile)
92+
test.Assert(t, err == nil, err)
93+
test.Assert(t, strings.Contains(string(b), "deprecated"), string(b))
8394
}

version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,5 @@ package kitex
1919
// Name and Version info of this framework, used for statistics and debug
2020
const (
2121
Name = "Kitex"
22-
Version = "v0.13.0"
22+
Version = "v0.13.1"
2323
)

0 commit comments

Comments
 (0)