avoid allocs for guest alert etags
use phrase file modtime instead of instance start time for routeAPIPhrases to avoid cache churn
This commit is contained in:
parent
42550269cc
commit
f3bdfffbed
|
@ -14,8 +14,8 @@ import (
|
|||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
qgen "github.com/Azareal/Gosora/query_gen"
|
||||
meta "github.com/Azareal/Gosora/common/meta"
|
||||
qgen "github.com/Azareal/Gosora/query_gen"
|
||||
)
|
||||
|
||||
var SoftwareVersion = Version{Major: 0, Minor: 3, Patch: 0, Tag: "dev"}
|
||||
|
@ -35,6 +35,8 @@ const Terabyte int = Gigabyte * 1024
|
|||
const Petabyte int = Terabyte * 1024
|
||||
|
||||
var StartTime time.Time
|
||||
var GzipStartEtag string
|
||||
var StartEtag string
|
||||
var TmplPtrMap = make(map[string]interface{})
|
||||
|
||||
// Anti-spam token with rotated key
|
||||
|
@ -176,4 +178,4 @@ func eachall(stmt *sql.Stmt, f func(r *sql.Rows) error) error {
|
|||
}
|
||||
}
|
||||
return rows.Err()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -263,7 +263,7 @@ func (list SFileList) Init() error {
|
|||
return err
|
||||
}
|
||||
path = strings.TrimPrefix(path, "public/")
|
||||
var ext = filepath.Ext("/public/" + path)
|
||||
ext := filepath.Ext("/public/" + path)
|
||||
mimetype := mime.TypeByExtension(ext)
|
||||
|
||||
// Get a checksum for CSPs and cache busting
|
||||
|
|
|
@ -18,6 +18,7 @@ import (
|
|||
"strings"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
// TODO: Add a phrase store?
|
||||
|
@ -39,6 +40,7 @@ type LevelPhrases struct {
|
|||
type LanguagePack struct {
|
||||
Name string
|
||||
IsoCode string
|
||||
ModTime time.Time
|
||||
//LastUpdated string
|
||||
|
||||
// Should we use a sync map or a struct for these? It would be nice, if we could keep all the phrases consistent.
|
||||
|
@ -90,6 +92,7 @@ func InitPhrases(lang string) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
langPack.ModTime = f.ModTime()
|
||||
|
||||
langPack.ErrorsBytes = make(map[string][]byte)
|
||||
for name, phrase := range langPack.Errors {
|
||||
|
|
3
main.go
3
main.go
|
@ -57,6 +57,9 @@ func afterDBInit() (err error) {
|
|||
}
|
||||
log.Print("Exitted storeInit")
|
||||
|
||||
c.GzipStartEtag = "\"" + strconv.FormatInt(c.StartTime.Unix(), 10) + "-ng\""
|
||||
c.StartEtag = "\"" + strconv.FormatInt(c.StartTime.Unix(), 10) + "-n\""
|
||||
|
||||
var uids []int
|
||||
tc := c.Topics.GetCache()
|
||||
if tc != nil {
|
||||
|
|
18
routes.go
18
routes.go
|
@ -75,9 +75,9 @@ func routeAPI(w http.ResponseWriter, r *http.Request, user c.User) c.RouteError
|
|||
var etag string
|
||||
_, ok := w.(c.GzipResponseWriter)
|
||||
if ok {
|
||||
etag = "\"" + strconv.FormatInt(c.StartTime.Unix(), 10) + "-ng\""
|
||||
etag = c.GzipStartEtag
|
||||
} else {
|
||||
etag = "\"" + strconv.FormatInt(c.StartTime.Unix(), 10) + "-n\""
|
||||
etag = c.StartEtag
|
||||
}
|
||||
w.Header().Set("ETag", etag)
|
||||
if match := r.Header.Get("If-None-Match"); match != "" {
|
||||
|
@ -219,15 +219,15 @@ func routeAPIPhrases(w http.ResponseWriter, r *http.Request, user c.User) c.Rout
|
|||
queryBit = strings.TrimSpace(queryBit)
|
||||
if queryBit[0] == '!' && len(queryBit) > 1 {
|
||||
queryBit = strings.TrimPrefix(queryBit, "!")
|
||||
for _, char := range queryBit {
|
||||
if !unicode.IsLetter(char) && char != '-' && char != '_' {
|
||||
for _, ch := range queryBit {
|
||||
if !unicode.IsLetter(ch) && ch != '-' && ch != '_' {
|
||||
return c.PreErrorJS("No symbols allowed, only - and _", w, r)
|
||||
}
|
||||
}
|
||||
negations = append(negations, queryBit)
|
||||
} else {
|
||||
for _, char := range queryBit {
|
||||
if !unicode.IsLetter(char) && char != '-' && char != '_' {
|
||||
for _, ch := range queryBit {
|
||||
if !unicode.IsLetter(ch) && ch != '-' && ch != '_' {
|
||||
return c.PreErrorJS("No symbols allowed, only - and _", w, r)
|
||||
}
|
||||
}
|
||||
|
@ -242,14 +242,14 @@ func routeAPIPhrases(w http.ResponseWriter, r *http.Request, user c.User) c.Rout
|
|||
var etag string
|
||||
_, ok := w.(c.GzipResponseWriter)
|
||||
if ok {
|
||||
etag = "\"" + strconv.FormatInt(c.StartTime.Unix(), 10) + "-g\""
|
||||
etag = "\"" + strconv.FormatInt(phrases.GetCurrentLangPack().ModTime.Unix(), 10) + "-ng\""
|
||||
} else {
|
||||
etag = "\"" + strconv.FormatInt(c.StartTime.Unix(), 10) + "\""
|
||||
etag = "\"" + strconv.FormatInt(phrases.GetCurrentLangPack().ModTime.Unix(), 10) + "-n\""
|
||||
}
|
||||
|
||||
var plist map[string]string
|
||||
var notModified, private bool
|
||||
var posLoop = func(positive string) c.RouteError {
|
||||
posLoop := func(positive string) c.RouteError {
|
||||
// ! Constrain it to a subset of phrases for now
|
||||
for _, item := range phraseWhitelist {
|
||||
if strings.HasPrefix(positive, item) {
|
||||
|
|
Loading…
Reference in New Issue