added the cts_limit field to Server

This commit is contained in:
hyung-hwan 2024-12-08 17:25:59 +09:00
parent 0bc765b72a
commit ebfc4010e7

View File

@ -21,6 +21,7 @@ import "google.golang.org/grpc/peer"
import "google.golang.org/grpc/stats" import "google.golang.org/grpc/stats"
const PTS_LIMIT int = 16384 const PTS_LIMIT int = 16384
const CTS_LIMIT int = 16384
type ServerConnMapByAddr = map[net.Addr]*ServerConn type ServerConnMapByAddr = map[net.Addr]*ServerConn
type ServerConnMap = map[uint32]*ServerConn type ServerConnMap = map[uint32]*ServerConn
@ -49,6 +50,7 @@ type Server struct {
rpc_wg sync.WaitGroup rpc_wg sync.WaitGroup
rpc_svr *grpc.Server rpc_svr *grpc.Server
cts_limit int
cts_mtx sync.Mutex cts_mtx sync.Mutex
cts_map ServerConnMap cts_map ServerConnMap
cts_map_by_addr ServerConnMapByAddr cts_map_by_addr ServerConnMapByAddr
@ -855,6 +857,7 @@ func NewServer(ctx context.Context, ctl_addrs []string, rpc_addrs []string, logg
s.ctltlscfg = ctltlscfg s.ctltlscfg = ctltlscfg
s.rpctlscfg = rpctlscfg s.rpctlscfg = rpctlscfg
s.ext_svcs = make([]Service, 0, 1) s.ext_svcs = make([]Service, 0, 1)
s.cts_limit = CTS_LIMIT // TODO: accept this from configuration
s.cts_map = make(ServerConnMap) s.cts_map = make(ServerConnMap)
s.cts_map_by_addr = make(ServerConnMapByAddr) s.cts_map_by_addr = make(ServerConnMapByAddr)
s.stop_chan = make(chan bool, 8) s.stop_chan = make(chan bool, 8)
@ -1058,6 +1061,10 @@ func (s *Server) AddNewServerConn(remote_addr *net.Addr, local_addr *net.Addr, p
s.cts_mtx.Lock() s.cts_mtx.Lock()
defer s.cts_mtx.Unlock() defer s.cts_mtx.Unlock()
if len(s.cts_map) > s.cts_limit {
return nil, fmt.Errorf("too many connections - %d", s.cts_limit)
}
id = rand.Uint32() id = rand.Uint32()
for { for {
_, ok = s.cts_map[id] _, ok = s.cts_map[id]