in pkg/seqno/seqno.go [50:120]
func FindSeqNum(el logging.ILogger, configFolder string) (uint, error) {
// try getting the sequence number from the environment first
seqNoString := os.Getenv(configSequenceNumber)
if seqNoString == "" {
el.Info("could not read environment variable %s for getting sequence number", configSequenceNumber)
} else {
seqNo, err := strconv.ParseUint(seqNoString, 10, 64)
if err != nil {
el.Info("could not read sequence number string %s into unsigned integer", seqNoString)
} else {
el.Info("using sequence number %d from environment variable %s", seqNo, configSequenceNumber)
return uint(seqNo), nil
}
}
g, err := filepath.Glob(configFolder + "/*.settings")
if err != nil {
return 0, err
}
// Start by finding the file with the latest time
files, err := ioutil.ReadDir(configFolder)
if err != nil {
return 0, err
}
var modTime time.Time
var names []string
for _, fi := range files {
if fi.Mode().IsRegular() && strings.HasSuffix(fi.Name(), ".settings") {
if !fi.ModTime().Before(modTime) {
if fi.ModTime().After(modTime) {
modTime = fi.ModTime()
names = names[:0]
}
// Unlikely - but just in case the files have the same time
names = append(names, fi.Name())
}
}
}
if len(names) == 0 {
el.Error("Cannot find the seqNo from %s. Not enough files", configFolder)
return 0, extensionerrors.ErrNoSettingsFiles
} else if len(names) == 1 {
i, err := strconv.Atoi(strings.Replace(names[0], ".settings", "", 1))
if err != nil {
el.Error("Can't parse int from filename: %s", names[0])
return 0, extensionerrors.ErrInvalidSettingsFileName
}
return uint(i), nil
} else {
// For some reason we have two or more files with the same time stamp.
// Revert to choosing the highest number.
seqs := make([]int, len(g))
for _, v := range g {
f := filepath.Base(v)
i, err := strconv.Atoi(strings.Replace(f, ".settings", "", 1))
if err != nil {
el.Error("Can't parse int from filename: %s", f)
return 0, extensionerrors.ErrInvalidSettingsFileName
}
seqs = append(seqs, i)
}
sort.Sort(sort.Reverse(sort.IntSlice(seqs)))
return uint(seqs[0]), nil
}
}