@@ -19,7 +19,6 @@ import (
1919 "github.com/acmore/okdev/internal/session"
2020)
2121
22- const sessionLeaseDuration = 2 * time .Minute
2322const sessionHeartbeatInterval = 5 * time .Minute
2423
2524var invalidOwnerChars = regexp .MustCompile (`[^a-z0-9._-]` )
@@ -125,37 +124,6 @@ func runConnectWithClient(k *kube.Client, namespace, sessionName string, command
125124 return connect .Run (ctx , k , namespace , podName (sessionName ), command , tty , os .Stdin , os .Stdout , os .Stderr )
126125}
127126
128- func ensureSessionLock (opts * Options , cfg * config.DevEnvironment , namespace , sessionName string , out io.Writer ) error {
129- stopRenew , err := acquireSessionLockWithClient (newKubeClient (opts ), cfg , namespace , sessionName , out )
130- if err != nil {
131- return err
132- }
133- stopRenew ()
134- return nil
135- }
136-
137- func acquireSessionLock (opts * Options , cfg * config.DevEnvironment , namespace , sessionName string , out io.Writer ) (func (), error ) {
138- return acquireSessionLockWithClient (newKubeClient (opts ), cfg , namespace , sessionName , out )
139- }
140-
141- func acquireSessionLockWithClient (k * kube.Client , cfg * config.DevEnvironment , namespace , sessionName string , out io.Writer ) (func (), error ) {
142- if cfg .Spec .Session .LockMode == "none" {
143- return func () {}, nil
144- }
145- holder := sessionHolderIdentity ()
146- leaseName := "okdev-" + sessionName
147- ctx , cancel := context .WithTimeout (context .Background (), 15 * time .Second )
148- defer cancel ()
149- res , err := k .AcquireLease (ctx , namespace , leaseName , holder , cfg .Spec .Session .LockMode , sessionLeaseDuration )
150- if err != nil {
151- return nil , err
152- }
153- if ! res .Acquired && cfg .Spec .Session .LockMode == "advisory" {
154- fmt .Fprintf (out , "warning: session lock currently held by %s\n " , res .CurrentHolder )
155- }
156- return func () {}, nil
157- }
158-
159127func startSessionHeartbeat (opts * Options , namespace , sessionName string , out io.Writer , interval time.Duration ) func () {
160128 return startSessionHeartbeatWithClient (newKubeClient (opts ), namespace , sessionName , out , interval )
161129}
@@ -192,52 +160,19 @@ func startSessionMaintenance(opts *Options, cfg *config.DevEnvironment, namespac
192160}
193161
194162func startSessionMaintenanceWithClient (k * kube.Client , cfg * config.DevEnvironment , namespace , sessionName string , out io.Writer , renewLock bool , emitHeartbeat bool ) func () {
195- if ! renewLock && ! emitHeartbeat {
163+ _ = cfg
164+ _ = renewLock
165+ if ! emitHeartbeat {
196166 return func () {}
197167 }
198- holder := sessionHolderIdentity ()
199- leaseName := "okdev-" + sessionName
200168 pod := podName (sessionName )
201169 ctx , cancel := context .WithCancel (context .Background ())
202170
203171 go func () {
204- var renewTicker * time.Ticker
205- var renewCh <- chan time.Time
206- if renewLock && cfg .Spec .Session .LockMode != "none" {
207- renewTicker = time .NewTicker (sessionLeaseDuration / 2 )
208- renewCh = renewTicker .C
209- defer renewTicker .Stop ()
210- }
211- var heartbeatTicker * time.Ticker
212- var heartbeatCh <- chan time.Time
213- if emitHeartbeat {
214- heartbeatTicker = time .NewTicker (sessionHeartbeatInterval )
215- heartbeatCh = heartbeatTicker .C
216- defer heartbeatTicker .Stop ()
217- }
218-
219- doRenew := func () {
220- if ! renewLock || cfg .Spec .Session .LockMode == "none" {
221- return
222- }
223- renewCtx , renewCancel := context .WithTimeout (context .Background (), 15 * time .Second )
224- renewRes , renewErr := k .AcquireLease (renewCtx , namespace , leaseName , holder , cfg .Spec .Session .LockMode , sessionLeaseDuration )
225- renewCancel ()
226- if renewErr != nil {
227- slog .Warn ("session lock renewal failed" , "namespace" , namespace , "session" , sessionName , "holder" , holder , "error" , renewErr )
228- fmt .Fprintf (out , "warning: failed to renew session lock: %v\n " , renewErr )
229- return
230- }
231- if ! renewRes .Acquired && cfg .Spec .Session .LockMode == "advisory" {
232- slog .Warn ("session advisory lock not acquired on renewal" , "namespace" , namespace , "session" , sessionName , "holder" , holder , "current_holder" , renewRes .CurrentHolder )
233- fmt .Fprintf (out , "warning: session lock now held by %s\n " , renewRes .CurrentHolder )
234- }
235- }
172+ heartbeatTicker := time .NewTicker (sessionHeartbeatInterval )
173+ defer heartbeatTicker .Stop ()
236174
237175 doHeartbeat := func () {
238- if ! emitHeartbeat {
239- return
240- }
241176 beatCtx , beatCancel := context .WithTimeout (context .Background (), 10 * time .Second )
242177 err := k .TouchPodActivity (beatCtx , namespace , pod )
243178 beatCancel ()
@@ -252,9 +187,7 @@ func startSessionMaintenanceWithClient(k *kube.Client, cfg *config.DevEnvironmen
252187 select {
253188 case <- ctx .Done ():
254189 return
255- case <- renewCh :
256- doRenew ()
257- case <- heartbeatCh :
190+ case <- heartbeatTicker .C :
258191 doHeartbeat ()
259192 }
260193 }
@@ -263,15 +196,6 @@ func startSessionMaintenanceWithClient(k *kube.Client, cfg *config.DevEnvironmen
263196 return cancel
264197}
265198
266- func sessionHolderIdentity () string {
267- user := currentOwner (nil )
268- host , err := os .Hostname ()
269- if err != nil || host == "" {
270- host = "unknown-host"
271- }
272- return user + "@" + host
273- }
274-
275199func currentOwner (opts * Options ) string {
276200 if opts != nil {
277201 if v := normalizeOwner (opts .Owner ); v != "" {
0 commit comments