fixup! Revamp the query compilation process.

This commit is contained in:
2024-05-14 11:30:42 +01:00
parent 4f438b7eac
commit 42170f9b8e
2 changed files with 25 additions and 8 deletions
+3 -3
View File
@@ -14,11 +14,11 @@ type CacheEntry struct {
} }
type Cache struct { type Cache struct {
entries sync.Map
globalTTL time.Duration
compressPool sync.Pool compressPool sync.Pool
decompressPool sync.Pool decompressPool sync.Pool
sync.RWMutex // Reintroduced to provide lock methods entries sync.Map
globalTTL time.Duration
sync.RWMutex
} }
func New(globalTTL time.Duration) *Cache { func New(globalTTL time.Duration) *Cache {
+22 -5
View File
@@ -7,14 +7,32 @@ import (
"fmt" "fmt"
"io" "io"
"net/http" "net/http"
"sync"
"time" "time"
"github.com/avast/retry-go/v4" "github.com/avast/retry-go/v4"
"github.com/goccy/go-json" "github.com/goccy/go-json"
) )
var bufferPool = sync.Pool{
New: func() interface{} {
return new(bytes.Buffer)
},
}
func (qe *QueryExecutor) executeQuery() ([]byte, error) { func (qe *QueryExecutor) executeQuery() ([]byte, error) {
httpRequest, err := http.NewRequest(http.MethodPost, qe.endpoint, bytes.NewBuffer(qe.Query)) // Reuse buffer from pool to avoid allocations
buf := bufferPool.Get().(*bytes.Buffer)
defer bufferPool.Put(buf)
buf.Reset()
_, err := buf.Write(qe.Query)
if err != nil {
qe.Logger.Error("Can't write to buffer", map[string]interface{}{"error": err})
return nil, err
}
httpRequest, err := http.NewRequest(http.MethodPost, qe.endpoint, buf)
if err != nil { if err != nil {
qe.Logger.Error("Can't create HTTP request", map[string]interface{}{"error": err}) qe.Logger.Error("Can't create HTTP request", map[string]interface{}{"error": err})
return nil, err return nil, err
@@ -54,15 +72,14 @@ func (qe *QueryExecutor) executeQuery() ([]byte, error) {
var reader io.ReadCloser var reader io.ReadCloser
encoding := httpResponse.Header.Get("Content-Encoding") encoding := httpResponse.Header.Get("Content-Encoding")
switch encoding { if encoding == "gzip" {
case "gzip":
reader, err = gzip.NewReader(httpResponse.Body) reader, err = gzip.NewReader(httpResponse.Body)
if err != nil { if err != nil {
qe.Logger.Debug("Error creating gzip reader", map[string]interface{}{"error": err.Error()}) qe.Logger.Debug("Error creating gzip reader", map[string]interface{}{"error": err.Error()})
return fmt.Errorf("error creating gzip reader: %w", err) return fmt.Errorf("error creating gzip reader: %w", err)
} }
defer reader.Close() defer reader.Close()
default: } else {
reader = httpResponse.Body reader = httpResponse.Body
} }
@@ -81,7 +98,7 @@ func (qe *QueryExecutor) executeQuery() ([]byte, error) {
return nil return nil
}, },
retry.OnRetry(func(n uint, err error) { retry.OnRetry(func(n uint, err error) {
qe.Logger.Warning("Retrying query", map[string]interface{}{"error": err.Error(), "attempt": n}) qe.Logger.Warning("Retrying query", map[string]interface{}{"error": err.Error(), "attempt": n + 1})
}), }),
retry.Attempts(uint(retriesMax)), retry.Attempts(uint(retriesMax)),
retry.DelayType(retry.BackOffDelay), retry.DelayType(retry.BackOffDelay),