Skip to content

Commit e1e98d0

Browse files
committed
fix panic in port forward
1 parent 3e120f1 commit e1e98d0

5 files changed

Lines changed: 63 additions & 24 deletions

File tree

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
build:
2+
go build -o k8sdebug ./cmd/
3+

cmd/main.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ func main() {
1818
PersistentPostRun: func(cmd *cobra.Command, args []string) {
1919
content := ""
2020
content += pkg.LOGS_PATH + "=" + pkg.ConfigData.LogsPath + "\n"
21-
cmd.Println(pkg.ColorLine(fmt.Sprintf("Loggger ID = %d", pkg.ConfigData.LoggerPID), pkg.ColorGreen))
2221
pid, err := strconv.Atoi(strconv.Itoa(pkg.ConfigData.LoggerPID))
2322
if err != nil {
2423
cmd.Println("Error converting LoggerPID to string:", err)

pkg/logs/record.go

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,24 +23,52 @@ func newRecordCommand() *cobra.Command {
2323
Use: "record",
2424
Short: "Record logs of a pod",
2525
Args: cobra.ExactArgs(1),
26-
Run: func(cmd *cobra.Command, args []string) {
27-
cmd.Println("Record command executed")
28-
switch args[0] {
29-
case "run":
30-
startLogger()
31-
case "stop":
32-
stopLogger()
33-
case "restart":
34-
stopLogger()
35-
time.Sleep(1 * time.Second) // TODO: Sync better than sleeping.
36-
startLogger()
37-
default:
38-
cmd.Println("Invalid argument. Use 'run' or 'stop'.")
39-
}
26+
PreRun: func(cmd *cobra.Command, args []string) {
27+
cmd.Println(pkg.ColorLine("NOTE: Currently only 1 recorder is supported at a time.", pkg.ColorYellow))
4028
},
4129
}
30+
cmd.AddCommand(&cobra.Command{
31+
Use: "run",
32+
Run: func(cmd *cobra.Command, args []string) {
33+
cmd.Println("Starting logger...")
34+
startLogger()
35+
},
36+
Args: cobra.NoArgs,
37+
Short: "Start the logger",
38+
})
39+
cmd.AddCommand(&cobra.Command{
40+
Use: "stop",
41+
Run: func(cmd *cobra.Command, args []string) {
42+
cmd.Println("Starting logger...")
43+
stopLogger()
44+
},
45+
Args: cobra.NoArgs,
46+
Short: "Start the logger",
47+
})
48+
cmd.AddCommand(&cobra.Command{
49+
Use: "restart",
50+
Run: func(cmd *cobra.Command, args []string) {
51+
stopLogger()
52+
time.Sleep(1 * time.Second) // TODO: Sync better than sleeping.
53+
startLogger()
54+
},
55+
Args: cobra.NoArgs,
56+
Short: "Start the logger",
57+
})
4258

43-
cmd.Flags().StringVarP(&labels, "labels", "l", "", "list of key value pairs to use as labels while filtering pods.")
59+
cmd.AddCommand(&cobra.Command{
60+
Use: "status",
61+
Run: func(cmd *cobra.Command, args []string) {
62+
if pkg.ConfigData.LoggerPID != 0 {
63+
fmt.Println("Logger is running with PID:", pkg.ConfigData.LoggerPID)
64+
} else {
65+
fmt.Println("Logger is not running.")
66+
}
67+
},
68+
Args: cobra.NoArgs,
69+
Short: "Status of the logger",
70+
})
71+
cmd.PersistentFlags().StringVarP(&labels, "labels", "l", "", "list of key value pairs to use as labels while filtering pods.")
4472
return cmd
4573
}
4674

@@ -111,6 +139,7 @@ func stopLogger() {
111139
return
112140
}
113141
fmt.Println("STOPPED")
142+
pkg.ConfigData.LoggerPID = 0
114143
}
115144
func init() {
116145
home, err := os.UserHomeDir()

pkg/portforward/portforward.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ func forwardToPod(hostConn net.Conn, podCon net.Conn) {
5050

5151
func getPodConnection(fw forwarder.Forwarder) (net.Conn, error) {
5252
port := fw.NextPort()
53+
if port == "" {
54+
return nil, fmt.Errorf("no available port")
55+
}
5356
podConn, err := net.Dial("tcp", fmt.Sprintf(":%s", port))
5457
if err != nil {
5558
return nil, err
@@ -60,7 +63,7 @@ func getPodConnection(fw forwarder.Forwarder) (net.Conn, error) {
6063
func getForwarder(policy string) forwarder.Forwarder {
6164
switch policy {
6265
case "round-robin":
63-
return roundrobin.New(connPool)
66+
return roundrobin.New(&connPool)
6467
case "mock":
6568
return mock.New()
6669
}
@@ -153,15 +156,13 @@ func NewCommand() *cobra.Command {
153156
close(stopChan)
154157
delete(indexToStopChan, i)
155158
}
156-
fmt.Println("WILL TRY TO CREATE AT INDEX", i)
157159
req := cs.CoreV1().RESTClient().Post().
158160
Resource("pods").
159161
Namespace(namespace).
160162
Name(pod.Name).
161163
SubResource("portforward")
162164
transporter, upgrader, err := spdy.RoundTripperFor(config)
163165
if err != nil {
164-
fmt.Println("coudnot open connection for pod", pod.Name)
165166
return "", err
166167
}
167168
dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transporter}, "POST", req.URL())
@@ -180,7 +181,6 @@ func NewCommand() *cobra.Command {
180181
return "", fmt.Errorf("port-forward setup failed: %v", err)
181182
}
182183
go func() {
183-
fmt.Println("FORWARDER WILL RUN FOR ", hostPortStr)
184184
if err := forwarder.ForwardPorts(); err != nil {
185185
fmt.Println("coud not forward connection for pod", pod.Name)
186186
}

pkg/portforward/roundrobin/roundrobin.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@ import (
1212
type RoundRobin struct {
1313
connNumber int
1414
mx sync.Mutex
15-
connPool []string
15+
connPool *[]string
1616
}
1717

18-
func New(connPool []string) forwarder.Forwarder {
18+
func New(connPool *[]string) forwarder.Forwarder {
19+
fmt.Println("NEW CALLED WITH ", &connPool)
1920
return &RoundRobin{
2021
connPool: connPool,
2122
}
@@ -25,9 +26,16 @@ func (rr *RoundRobin) NextPort() string {
2526
defer rr.mx.Unlock()
2627

2728
initial := rr.connNumber
29+
fmt.Println("CONN POOL in next port", &rr.connPool)
30+
if rr.connPool == nil {
31+
return ""
32+
}
33+
if len(*rr.connPool) == 0 {
34+
return ""
35+
}
2836
for {
29-
rr.connNumber = (rr.connNumber + 1) % len(rr.connPool)
30-
portNum := rr.connPool[rr.connNumber]
37+
rr.connNumber = (rr.connNumber + 1) % len(*rr.connPool)
38+
portNum := (*rr.connPool)[rr.connNumber]
3139
if portNum != "" {
3240
// Check if port is actually listening
3341
conn, err := net.DialTimeout("tcp", ":"+portNum, 50*time.Millisecond)

0 commit comments

Comments
 (0)