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]

Reply via email to