From 2707991b577ac46bcc4677056cd770503153f2ea Mon Sep 17 00:00:00 2001 From: Matt Drollette Date: Sat, 13 Sep 2014 15:31:22 -0500 Subject: [PATCH] store routerInfos in memory --- reseeder.go | 43 +++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/reseeder.go b/reseeder.go index b665977..15e0d37 100644 --- a/reseeder.go +++ b/reseeder.go @@ -15,6 +15,7 @@ package main // https://geti2p.net/en/docs/spec/updates import ( + "bytes" "fmt" "github.com/PuerkitoBio/throttled" "github.com/PuerkitoBio/throttled/store" @@ -32,7 +33,7 @@ import ( ) const ( - LIST_TEMPLATE = `NetDB` + LIST_TEMPLATE = `NetDB` ) func proxiedHandler(h http.Handler) http.Handler { @@ -106,7 +107,7 @@ func Run(config *Config) { } func NewLegacyReseeder(netdbDir string) *LegacyReseeder { - return &LegacyReseeder{netdbDir: netdbDir, nextMap: make(chan []string)} + return &LegacyReseeder{netdbDir: netdbDir, nextMap: make(chan map[string][]byte)} } func NewSu3Reseeder(netdbDir string) *Su3Reseeder { @@ -126,14 +127,14 @@ func (rs *Su3Reseeder) Su3Handler(w http.ResponseWriter, r *http.Request) { } type LegacyReseeder struct { - nextMap chan []string + nextMap chan map[string][]byte netdbDir string listTemplate *template.Template } func (r *LegacyReseeder) Start(refreshInterval time.Duration) { go func() { - var m []string + var m map[string][]byte for { select { case m = <-r.nextMap: @@ -145,7 +146,7 @@ func (r *LegacyReseeder) Start(refreshInterval time.Duration) { go func() { for { log.Println("Updating routerInfos") - r.Refresh() + r.Refresh(r.netdbDir) time.Sleep(refreshInterval) } }() @@ -159,10 +160,10 @@ func (r *LegacyReseeder) Start(refreshInterval time.Duration) { } } -func (r *LegacyReseeder) Refresh() { - var m []string +func (r *LegacyReseeder) Refresh(netdbDir string) { + m := make(map[string][]byte) - src, err := ioutil.ReadDir(r.netdbDir) + src, err := ioutil.ReadDir(netdbDir) if nil != err { log.Fatalln("error reading netdb dir", err) return @@ -178,7 +179,19 @@ func (r *LegacyReseeder) Refresh() { added := 0 for _, file := range files { if match, _ := regexp.MatchString("^routerInfo-[A-Za-z0-9-=~]+.dat$", file.Name()); match { - m = append(m, file.Name()) + fi, err := os.Open(netdbDir + "/" + file.Name()) + if err != nil { + log.Println("Error reading routerInfo file", err) + continue + } + fileData, err := ioutil.ReadAll(fi) + if nil != err { + log.Println("Error reading routerInfo file", err) + continue + } + fi.Close() + + m[file.Name()] = fileData added++ } if added >= 50 { @@ -199,11 +212,13 @@ func (lr *LegacyReseeder) ListHandler(w http.ResponseWriter, r *http.Request) { func (rs *LegacyReseeder) RouterInfoHandler(w http.ResponseWriter, r *http.Request) { vars := mux.Vars(r) fileName := "routerInfo-" + vars["hash"] + ".dat" - f, err := os.Open(rs.netdbDir + "/" + fileName) - if nil != err { - http.NotFound(w, r) - log.Println("error sending file", err) + + m := <-rs.nextMap + if b, ok := m[fileName]; ok { + io.Copy(w, bytes.NewReader(b)) return } - io.Copy(w, f) + + http.NotFound(w, r) + log.Println("error sending file", fileName) }