mirror of
https://blitiri.com.ar/repos/chasquid
synced 2025-12-18 14:47:03 +00:00
aliases: Add files unconditionally, to allow for reloads
Today, if the aliases file does not exist when chasquid starts up, the entire domain will be skipped from aliases resolution. That's a bug, as it means we don't perform character and suffix replacements for known domains, and is also an inconvenience as it forces us to reload the daemon when adding a file for a known domain. This patch fixes this by adding them unconditionally, even if the file does not exist.
This commit is contained in:
@@ -159,14 +159,12 @@ func loadDomain(name, dir string, s *Server, aliasesR *aliases.Resolver) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err := os.Stat(dir + "/aliases"); err == nil {
|
|
||||||
glog.Infof(" adding aliases")
|
glog.Infof(" adding aliases")
|
||||||
err := aliasesR.AddAliasesFile(name, dir+"/aliases")
|
err := aliasesR.AddAliasesFile(name, dir+"/aliases")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf(" error: %v", err)
|
glog.Errorf(" error: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
// Flush logs periodically, to help troubleshooting if there isn't that much
|
// Flush logs periodically, to help troubleshooting if there isn't that much
|
||||||
// traffic.
|
// traffic.
|
||||||
@@ -276,7 +274,7 @@ func (s *Server) InitQueue(path string, aliasesR *aliases.Resolver,
|
|||||||
// Launch the periodic reload of aliases, now that the queue may care
|
// Launch the periodic reload of aliases, now that the queue may care
|
||||||
// about them.
|
// about them.
|
||||||
go func() {
|
go func() {
|
||||||
for range time.Tick(1 * time.Minute) {
|
for range time.Tick(30 * time.Second) {
|
||||||
err := aliasesR.Reload()
|
err := aliasesR.Reload()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Errorf("Error reloading aliases: %v")
|
glog.Errorf("Error reloading aliases: %v")
|
||||||
|
|||||||
@@ -173,16 +173,26 @@ func (v *Resolver) AddDomain(domain string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (v *Resolver) AddAliasesFile(domain, path string) error {
|
func (v *Resolver) AddAliasesFile(domain, path string) error {
|
||||||
|
// We inconditionally add the domain and file on our list.
|
||||||
|
// Even if the file does not exist now, it may later. This makes it be
|
||||||
|
// consider when doing Reload.
|
||||||
|
// Adding it to the domains mean that we will do drop character and suffix
|
||||||
|
// manipulation even if there are no aliases for it.
|
||||||
|
v.mu.Lock()
|
||||||
|
v.files[domain] = append(v.files[domain], path)
|
||||||
|
v.domains[domain] = true
|
||||||
|
v.mu.Unlock()
|
||||||
|
|
||||||
aliases, err := parseFile(domain, path)
|
aliases, err := parseFile(domain, path)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
v.mu.Lock()
|
|
||||||
v.files[domain] = append(v.files[domain], path)
|
|
||||||
v.domains[domain] = true
|
|
||||||
|
|
||||||
// Add the aliases to the resolver, overriding any previous values.
|
// Add the aliases to the resolver, overriding any previous values.
|
||||||
|
v.mu.Lock()
|
||||||
for addr, rs := range aliases {
|
for addr, rs := range aliases {
|
||||||
v.aliases[addr] = rs
|
v.aliases[addr] = rs
|
||||||
}
|
}
|
||||||
@@ -201,6 +211,9 @@ func (v *Resolver) Reload() error {
|
|||||||
for domain, paths := range v.files {
|
for domain, paths := range v.files {
|
||||||
for _, path := range paths {
|
for _, path := range paths {
|
||||||
aliases, err := parseFile(domain, path)
|
aliases, err := parseFile(domain, path)
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("Error parsing %q: %v", path, err)
|
return fmt.Errorf("Error parsing %q: %v", path, err)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user