fishy commented on code in PR #3379:
URL: https://github.com/apache/thrift/pull/3379#discussion_r3059157855
##########
lib/go/thrift/server_socket.go:
##########
@@ -26,15 +27,17 @@ import (
)
type TServerSocket struct {
- addr net.Addr
+ // TServerSocketListenerFactory abstracts how listeners are created.
+ factory func(bool) (net.Addr, net.Listener, error)
Review Comment:
now this is no longer _public_ api, but just `func(bool) (net.Addr,
net.Listener, error)` is still hard to read (figure out what's going on).
please typedef this into an internal type (uncapitalized), and write doc
comments to explain it.
##########
lib/go/thrift/server_socket.go:
##########
@@ -44,28 +47,75 @@ func NewTServerSocketTimeout(listenAddr string,
clientTimeout time.Duration) (*T
if err != nil {
return nil, err
}
- return &TServerSocket{addr: addr, clientTimeout: clientTimeout}, nil
+
+ return NewTServerSocketFromAddrTimeout(addr, clientTimeout), nil
}
-// Creates a TServerSocket from a net.Addr
func NewTServerSocketFromAddrTimeout(addr net.Addr, clientTimeout
time.Duration) *TServerSocket {
- return &TServerSocket{addr: addr, clientTimeout: clientTimeout}
+ factory := func(listen bool) (net.Addr, net.Listener, error) {
+ var listener net.Listener
+ var err error
+ if (listen){
+ listener, err = net.Listen(addr.Network(),
addr.String())
+ }
+ return addr, listener, err
+ }
+
+ return NewTServerSocketFromFactoryTimeout(factory, clientTimeout)
}
-func (p *TServerSocket) Listen() error {
+// Allows full customization (TLS, mocks, unix sockets, windows named pipes,
etc.)
Review Comment:
also, I know the old code don't always follow the go's doc comment
convention, but please follow that for new code: https://go.dev/doc/comment
##########
lib/go/thrift/server_socket.go:
##########
@@ -44,28 +47,75 @@ func NewTServerSocketTimeout(listenAddr string,
clientTimeout time.Duration) (*T
if err != nil {
return nil, err
}
- return &TServerSocket{addr: addr, clientTimeout: clientTimeout}, nil
+
+ return NewTServerSocketFromAddrTimeout(addr, clientTimeout), nil
}
-// Creates a TServerSocket from a net.Addr
func NewTServerSocketFromAddrTimeout(addr net.Addr, clientTimeout
time.Duration) *TServerSocket {
- return &TServerSocket{addr: addr, clientTimeout: clientTimeout}
+ factory := func(listen bool) (net.Addr, net.Listener, error) {
+ var listener net.Listener
+ var err error
+ if (listen){
+ listener, err = net.Listen(addr.Network(),
addr.String())
+ }
+ return addr, listener, err
+ }
+
+ return NewTServerSocketFromFactoryTimeout(factory, clientTimeout)
}
-func (p *TServerSocket) Listen() error {
+// Allows full customization (TLS, mocks, unix sockets, windows named pipes,
etc.)
+func NewTServerSocketFromFactoryAddrTimeout(proc func(addr net.Addr) (listener
net.Listener, err error),addr net.Addr, clientTimeout time.Duration)
*TServerSocket {
Review Comment:
1. maybe rename `proc` to `listen`? you are essentially asking for a custom
listener implementation here, not for a processor.
2. space between `,` and `addr net.Addr`.
3. we probably should also reword `NewTServerSocketFromFactoryAddrTimeout`
slightly. is this considered a factory in traditional/conventional sense? I
don't think we are actually going to create a lot of listeners on the fly so
probably not. maybe `NewTServerSocketFromListner`?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]