You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficcontrol.apache.org by oc...@apache.org on 2023/02/10 18:34:18 UTC

[trafficcontrol] branch master updated: t3c remove stale git lock file (#7346)

This is an automated email from the ASF dual-hosted git repository.

ocket8888 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/trafficcontrol.git


The following commit(s) were added to refs/heads/master by this push:
     new dad57721e2 t3c remove stale git lock file (#7346)
dad57721e2 is described below

commit dad57721e2a82ad0fb5eb1d30ba2ca33542d68ec
Author: Joe Pappano <jo...@cable.comcast.com>
AuthorDate: Fri Feb 10 13:34:09 2023 -0500

    t3c remove stale git lock file (#7346)
    
    * added routines to find and remove old git lock files
    
    * updated to find and remove a git lock file older than 5 minutes.
    
    * added CHANGELOG entry
    
    * using filepath instead of string concatenation
    
    * added comment and time units to variable name
    
    * go routine gets file path instead of whole config
    
    * pass file path not config
    
    * fixed formatting issue
---
 CHANGELOG.md                           |  1 +
 cache-config/t3c-apply/t3c-apply.go    | 16 ++++++++++++++++
 cache-config/t3c-apply/util/gitutil.go | 20 ++++++++++++++++++++
 3 files changed, 37 insertions(+)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4205c4f8b1..c12dcd8740 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -80,6 +80,7 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
 - [#7204](https://github.com/apache/trafficcontrol/pull/7204) *Traffic Control Cache Config (t3c)* strategies.yaml hash_key only for consistent_hash
 - [#7277](https://github.com/apache/trafficcontrol/pull/7277) *Traffic Control Cache Config (t3c)* remapdotconfig: remove skip check at mids for nocache/live
 - [#7282](https://github.com/apache/trafficcontrol/pull/7282) *Traffic Ops* Fixed issue with user getting correctly logged when using an access or bearer token authentication.
+- [#7346](https://github.com/apache/trafficcontrol/pull/7346) *Traffic Control Cache Config (t3c)* Fixed issue with stale lock file when using git to track changes.
 
 ## [7.0.0] - 2022-07-19
 ### Added
diff --git a/cache-config/t3c-apply/t3c-apply.go b/cache-config/t3c-apply/t3c-apply.go
index 353e24a864..959d9f4a58 100644
--- a/cache-config/t3c-apply/t3c-apply.go
+++ b/cache-config/t3c-apply/t3c-apply.go
@@ -146,6 +146,22 @@ func Main() int {
 	}
 
 	if cfg.UseGit == config.UseGitYes || cfg.UseGit == config.UseGitAuto {
+		//need to see if there is an old lock file laying around.
+		//older than 5 minutes
+		const gitMaxLockAgeMinutes = 5
+		const gitLock = ".git/index.lock"
+		gitLockFile := filepath.Join(cfg.TsConfigDir, gitLock)
+		oldLock, err := util.IsGitLockFileOld(gitLockFile, time.Now(), gitMaxLockAgeMinutes*time.Minute)
+		if err != nil {
+			log.Errorln("checking for git lock file: " + err.Error())
+		}
+		if oldLock {
+			log.Errorf("removing git lock file older than %dm", gitMaxLockAgeMinutes)
+			err := util.RemoveGitLock(gitLockFile)
+			if err != nil {
+				log.Errorf("couldn't remove git lock file: %v", err.Error())
+			}
+		}
 		// commit anything someone else changed when we weren't looking,
 		// with a keyword indicating it wasn't our change
 		if err := util.MakeGitCommitAll(cfg, util.GitChangeNotSelf, true); err != nil {
diff --git a/cache-config/t3c-apply/util/gitutil.go b/cache-config/t3c-apply/util/gitutil.go
index 3706c3be2a..33d05b0529 100644
--- a/cache-config/t3c-apply/util/gitutil.go
+++ b/cache-config/t3c-apply/util/gitutil.go
@@ -24,6 +24,7 @@ import (
 	"errors"
 	"fmt"
 	"io/ioutil"
+	"os"
 	"os/exec"
 	"strconv"
 	"strings"
@@ -201,3 +202,22 @@ func makeGitCommitMsg(cfg config.Cfg, now time.Time, self bool, success bool) st
 	const sep = " "
 	return strings.Join([]string{appStr, selfStr, modeStr, successStr, timeStr}, sep)
 }
+
+func IsGitLockFileOld(lockFile string, now time.Time, maxAge time.Duration) (bool, error) {
+	lockFileInfo, err := os.Stat(lockFile)
+	if err != nil {
+		return false, fmt.Errorf("stat returned error: %v on file %v", err, lockFile)
+	}
+	if diff := now.Sub(lockFileInfo.ModTime()); diff > maxAge {
+		return true, nil
+	}
+	return false, nil
+}
+
+func RemoveGitLock(lockFile string) error {
+	err := os.Remove(lockFile)
+	if err != nil {
+		return fmt.Errorf("error removing file: %v, %v", lockFile, err.Error())
+	}
+	return nil
+}