You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by je...@apache.org on 2017/05/18 21:25:42 UTC
thrift git commit: THRIFT-4203 thrift server stop gracefully Client:
Go Patch: libinbin
Repository: thrift
Updated Branches:
refs/heads/master d1380d529 -> a57689639
THRIFT-4203 thrift server stop gracefully
Client: Go
Patch: libinbin <li...@17paipai.cn>
This closes #1271
Project: http://git-wip-us.apache.org/repos/asf/thrift/repo
Commit: http://git-wip-us.apache.org/repos/asf/thrift/commit/a5768963
Tree: http://git-wip-us.apache.org/repos/asf/thrift/tree/a5768963
Diff: http://git-wip-us.apache.org/repos/asf/thrift/diff/a5768963
Branch: refs/heads/master
Commit: a576896398f03d1854f128479d31659446c51027
Parents: d1380d5
Author: libinbin <li...@17paipai.cn>
Authored: Thu May 18 14:18:28 2017 +0800
Committer: Jens Geyer <je...@apache.org>
Committed: Thu May 18 23:24:52 2017 +0200
----------------------------------------------------------------------
lib/go/thrift/simple_server.go | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/thrift/blob/a5768963/lib/go/thrift/simple_server.go
----------------------------------------------------------------------
diff --git a/lib/go/thrift/simple_server.go b/lib/go/thrift/simple_server.go
index e207bd9..5c848f2 100644
--- a/lib/go/thrift/simple_server.go
+++ b/lib/go/thrift/simple_server.go
@@ -39,6 +39,7 @@ type TSimpleServer struct {
outputTransportFactory TTransportFactory
inputProtocolFactory TProtocolFactory
outputProtocolFactory TProtocolFactory
+ sync.WaitGroup
}
func NewTSimpleServer2(processor TProcessor, serverTransport TServerTransport) *TSimpleServer {
@@ -135,6 +136,7 @@ func (p *TSimpleServer) AcceptLoop() error {
return err
}
if client != nil {
+ p.Add(1)
go func() {
if err := p.processRequests(client); err != nil {
log.Println("error processing request:", err)
@@ -157,14 +159,17 @@ var once sync.Once
func (p *TSimpleServer) Stop() error {
q := func() {
- p.quit <- struct{}{}
+ close(p.quit)
p.serverTransport.Interrupt()
+ p.Wait()
}
once.Do(q)
return nil
}
func (p *TSimpleServer) processRequests(client TTransport) error {
+ defer p.Done()
+
processor := p.processorFactory.GetProcessor(client)
inputTransport := p.inputTransportFactory.GetTransport(client)
outputTransport := p.outputTransportFactory.GetTransport(client)
@@ -175,6 +180,7 @@ func (p *TSimpleServer) processRequests(client TTransport) error {
log.Printf("panic in processor: %s: %s", e, debug.Stack())
}
}()
+
if inputTransport != nil {
defer inputTransport.Close()
}
@@ -182,6 +188,12 @@ func (p *TSimpleServer) processRequests(client TTransport) error {
defer outputTransport.Close()
}
for {
+ select {
+ case <-p.quit:
+ return nil
+ default:
+ }
+
ok, err := processor.Process(inputProtocol, outputProtocol)
if err, ok := err.(TTransportException); ok && err.TypeId() == END_OF_FILE {
return nil
@@ -191,7 +203,7 @@ func (p *TSimpleServer) processRequests(client TTransport) error {
if err, ok := err.(TApplicationException); ok && err.TypeId() == UNKNOWN_METHOD {
continue
}
- if !ok {
+ if !ok {
break
}
}