optimize code

This commit is contained in:
p_caiwfeng
2021-11-12 09:11:47 +08:00
parent c4b20ab99a
commit b406bfcee7
6 changed files with 57 additions and 126 deletions

View File

@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"math"
"net"
)
@@ -36,12 +37,7 @@ func (c *Chain) IsEmpty() bool {
// DialContext connects to the address on the named network using the provided context.
func (c *Chain) DialContext(ctx context.Context, network, address string) (conn net.Conn, err error) {
retries := 1
if c != nil && c.Retries > 0 {
retries = c.Retries
}
for i := 0; i < retries; i++ {
for i := 0; i < int(math.Max(float64(1), float64(c.Retries))); i++ {
conn, err = c.dial(ctx, network, address)
if err == nil {
break
@@ -67,7 +63,7 @@ func (c *Chain) dial(ctx context.Context, network, address string) (net.Conn, er
cc, err := c.Node().Client.ConnectContext(ctx, conn, network, ipAddr)
if err != nil {
conn.Close()
_ = conn.Close()
return nil, err
}
return cc, nil
@@ -82,35 +78,10 @@ func (*Chain) resolve(addr string) string {
return addr
}
// Conn obtains a handshaked connection to the last node of the chain.
func (c *Chain) Conn() (conn net.Conn, err error) {
ctx := context.Background()
retries := 1
if c != nil && c.Retries > 0 {
retries = c.Retries
}
for i := 0; i < retries; i++ {
conn, err = c.getConn(ctx)
if err == nil {
break
}
}
return
}
// getConn obtains a connection to the last node of the chain.
func (c *Chain) getConn(_ context.Context) (conn net.Conn, err error) {
func (c *Chain) getConn(_ context.Context) (net.Conn, error) {
if c.IsEmpty() {
err = ErrorEmptyChain
return
return nil, ErrorEmptyChain
}
cc, err := c.Node().Client.Dial(c.Node().Addr)
if err != nil {
return
}
conn = cc
return
return c.Node().Client.Dial(c.Node().Addr)
}

View File

@@ -36,10 +36,7 @@ type fakeUdpHandler struct {
// TCPHandler creates a server Handler
func TCPHandler() Handler {
h := &fakeUdpHandler{}
//h.Init()
return h
return &fakeUdpHandler{}
}
func (h *fakeUdpHandler) Init(...HandlerOption) {
@@ -54,10 +51,8 @@ func (h *fakeUdpHandler) Handle(conn net.Conn) {
}
func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) {
errc := make(chan error, 2)
errChan := make(chan error, 2)
var clientAddr net.Addr
go func() {
b := util.MPool.Get().([]byte)
defer util.MPool.Put(b)
@@ -65,7 +60,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) {
for {
n, laddr, err := relay.ReadFrom(b)
if err != nil {
errc <- err
errChan <- err
return
}
if clientAddr == nil {
@@ -74,7 +69,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) {
dgram, err := ReadDatagramPacket(bytes.NewReader(b[:n]))
if err != nil {
log.Errorln(err)
errc <- err
errChan <- err
return
}
@@ -84,7 +79,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) {
continue // drop silently
}
if _, err := peer.WriteTo(dgram.Data, raddr); err != nil {
errc <- err
errChan <- err
return
}
if util.Debug {
@@ -100,7 +95,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) {
for {
n, raddr, err := peer.ReadFrom(b)
if err != nil {
errc <- err
errChan <- err
return
}
if clientAddr == nil {
@@ -110,7 +105,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) {
dgram := NewDatagramPacket(raddr, b[:n])
_ = dgram.Write(&buf)
if _, err := relay.WriteTo(buf.Bytes(), clientAddr); err != nil {
errc <- err
errChan <- err
return
}
if util.Debug {
@@ -119,7 +114,7 @@ func (h *fakeUdpHandler) transportUDP(relay, peer net.PacketConn) (err error) {
}
}()
return <-errc
return <-errChan
}
func (h *fakeUdpHandler) handleUDPTunnel(conn net.Conn) {
@@ -141,7 +136,7 @@ func (h *fakeUdpHandler) handleUDPTunnel(conn net.Conn) {
}
func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err error) {
errc := make(chan error, 2)
errChan := make(chan error, 2)
go func() {
b := util.MPool.Get().([]byte)
@@ -151,7 +146,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er
n, addr, err := pc.ReadFrom(b)
if err != nil {
log.Debugf("[udp-tun] %s : %s", cc.RemoteAddr(), err)
errc <- err
errChan <- err
return
}
@@ -159,7 +154,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er
dgram := NewDatagramPacket(addr, b[:n])
if err := dgram.Write(cc); err != nil {
log.Debugf("[tcpserver] udp-tun %s <- %s : %s", cc.RemoteAddr(), dgram.Addr(), err)
errc <- err
errChan <- err
return
}
if util.Debug {
@@ -173,7 +168,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er
dgram, err := ReadDatagramPacket(cc)
if err != nil {
log.Debugf("[udp-tun] %s -> 0 : %v", cc.RemoteAddr(), err)
errc <- err
errChan <- err
return
}
@@ -185,7 +180,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er
}
if _, err := pc.WriteTo(dgram.Data, addr); err != nil {
log.Debugf("[tcpserver] udp-tun %s -> %s : %s", cc.RemoteAddr(), addr, err)
errc <- err
errChan <- err
return
}
if util.Debug {
@@ -194,7 +189,7 @@ func (h *fakeUdpHandler) tunnelServerUDP(cc net.Conn, pc net.PacketConn) (err er
}
}()
return <-errc
return <-errChan
}
// fake udp connect over tcp

View File

@@ -17,9 +17,9 @@ import (
"golang.org/x/net/ipv6"
)
type tunRouteKey [16]byte
type key [16]byte
func ipToTunRouteKey(ip net.IP) (key tunRouteKey) {
func ipToTunRouteKey(ip net.IP) (key key) {
copy(key[:], ip.To16())
return
}
@@ -39,7 +39,6 @@ func TunHandler(opts ...HandlerOption) Handler {
for _, opt := range opts {
opt(h.options)
}
return h
}
@@ -138,7 +137,7 @@ func (h *tunHandler) findRouteFor(dst net.IP) net.Addr {
}
func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.Addr) error {
errc := make(chan error, 2)
errChan := make(chan error, 2)
defer conn.Close()
ctx, cancelFunc := context.WithCancel(context.Background())
remote.CancelFunctions = append(remote.CancelFunctions, cancelFunc)
@@ -205,7 +204,7 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
}()
if err != nil {
errc <- err
errChan <- err
return
}
}
@@ -283,7 +282,7 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
}()
if err != nil {
errc <- err
errChan <- err
cancelFunc()
return
}
@@ -291,7 +290,7 @@ func (h *tunHandler) transportTun(tun net.Conn, conn net.PacketConn, raddr net.A
}()
select {
case err := <-errc:
case err := <-errChan:
return err
case <-ctx.Done():
return nil

View File

@@ -5,7 +5,6 @@ import (
"context"
miekgdns "github.com/miekg/dns"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/wencaiwulue/kubevpn/util"
v12 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -19,7 +18,7 @@ func GetDNSServiceIPFromPod(clientset *kubernetes.Clientset, restclient *rest.RE
if ips, err := getDNSIPFromDnsPod(clientset); err == nil && len(ips) != 0 {
ipp = ips
}
if ip, err := util.Shell(clientset, restclient, config, util.TrafficManager, namespace, "cat /etc/resolv.conf"); err == nil {
if ip, err := util.Shell(clientset, restclient, config, podName, namespace, "cat /etc/resolv.conf"); err == nil {
if resolvConf, err := miekgdns.ClientConfigFromReader(bytes.NewBufferString(ip)); err == nil {
if len(ipp) != 0 {
resolvConf.Servers = append(resolvConf.Servers, make([]string, len(ipp))...)
@@ -35,7 +34,6 @@ func GetDNSServiceIPFromPod(clientset *kubernetes.Clientset, restclient *rest.RE
} else {
return nil, err
}
logrus.Fatal("this should not happened")
return nil, errors.New("this should not happened")
}

View File

@@ -6,7 +6,6 @@ import (
"encoding/json"
"fmt"
log "github.com/sirupsen/logrus"
"github.com/wencaiwulue/kubevpn/pkg"
"github.com/wencaiwulue/kubevpn/util"
v1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
@@ -25,32 +24,32 @@ import (
"time"
)
func TestCreateServer(t *testing.T) {
clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
&clientcmd.ClientConfigLoadingRules{ExplicitPath: clientcmd.RecommendedHomeFile}, nil,
)
config, err := clientConfig.ClientConfig()
if err != nil {
log.Fatal(err)
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
log.Fatal(err)
}
i := &net.IPNet{
IP: net.ParseIP("192.168.254.100"),
Mask: net.IPv4Mask(255, 255, 255, 0),
}
j := &net.IPNet{
IP: net.ParseIP("172.20.0.0"),
Mask: net.IPv4Mask(255, 255, 0, 0),
}
server, err := pkg.CreateOutboundRouterPod(clientset, "test", i, []*net.IPNet{j})
fmt.Println(server)
}
//func TestCreateServer(t *testing.T) {
// clientConfig := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
// &clientcmd.ClientConfigLoadingRules{ExplicitPath: clientcmd.RecommendedHomeFile}, nil,
// )
// config, err := clientConfig.ClientConfig()
// if err != nil {
// log.Fatal(err)
// }
// clientset, err := kubernetes.NewForConfig(config)
// if err != nil {
// log.Fatal(err)
// }
//
// i := &net.IPNet{
// IP: net.ParseIP("192.168.254.100"),
// Mask: net.IPv4Mask(255, 255, 255, 0),
// }
//
// j := &net.IPNet{
// IP: net.ParseIP("172.20.0.0"),
// Mask: net.IPv4Mask(255, 255, 0, 0),
// }
//
// server, err := pkg.CreateOutboundRouterPod(clientset, "test", i, []*net.IPNet{j})
// fmt.Println(server)
//}
func TestGetIp(t *testing.T) {
ip := &net.IPNet{
@@ -203,7 +202,7 @@ func TestGetTopController(t *testing.T) {
configFlags.KubeConfig = &clientcmd.RecommendedHomeFile
factory := cmdutil.NewFactory(cmdutil.NewMatchVersionFlags(configFlags))
clientset, _ := factory.KubernetesClientSet()
controller := util.GetTopController(factory, clientset, "test", "pods/tomcat-7449544d95-n72zb")
controller := util.GetTopController(factory, clientset, "default", "pods/productpage-69cf486c4f-z8hb9")
fmt.Println(controller.Resource)
fmt.Println(controller.Name)
fmt.Println(controller.Scale)

View File

@@ -179,7 +179,6 @@ func GetTopController(factory cmdutil.Factory, clientset *kubernetes.Clientset,
}
controller.Resource = strings.ToLower(of.Kind) + "s"
controller.Name = of.Name
controller.Scale = GetScale(object.Object)
of = GetOwnerReferences(object.Object)
}
return
@@ -301,27 +300,8 @@ func GetUnstructuredObject(f cmdutil.Factory, namespace string, workloads string
}
func GetLabelSelector(object k8sruntime.Object) *metav1.LabelSelector {
defer func() {
if err := recover(); err != nil {
log.Errorln(err)
}
}()
l := &metav1.LabelSelector{}
printer, _ := printers.NewJSONPathPrinter("{.spec.selector}")
buf := bytes.NewBuffer([]byte{})
if err := printer.PrintObj(object, buf); err != nil {
pathPrinter, _ := printers.NewJSONPathPrinter("{.metadata.labels}")
_ = pathPrinter.PrintObj(object, buf)
}
err := json2.Unmarshal([]byte(buf.String()), l)
if err != nil || len(l.MatchLabels) == 0 {
m := map[string]string{}
_ = json2.Unmarshal([]byte(buf.String()), &m)
if len(m) != 0 {
l = &metav1.LabelSelector{MatchLabels: m}
}
}
return l
labels := object.(metav1.Object).GetLabels()
return &metav1.LabelSelector{MatchLabels: labels}
}
func GetPorts(object k8sruntime.Object) []v1.ContainerPort {
@@ -357,18 +337,7 @@ func GetPorts(object k8sruntime.Object) []v1.ContainerPort {
}
func GetOwnerReferences(object k8sruntime.Object) *metav1.OwnerReference {
defer func() {
if err := recover(); err != nil {
log.Errorln(err)
}
}()
printer, _ := printers.NewJSONPathPrinter("{.metadata.ownerReferences}")
buf := bytes.NewBuffer([]byte{})
if err := printer.PrintObj(object, buf); err != nil {
return nil
}
var refs []metav1.OwnerReference
_ = json2.Unmarshal([]byte(buf.String()), &refs)
refs := object.(metav1.Object).GetOwnerReferences()
for i := range refs {
if refs[i].Controller != nil && *refs[i].Controller {
return &refs[i]