mirror of
https://github.com/lukaszraczylo/go-simple-graphql.git
synced 2026-10-14 00:58:32 +00:00
fixup! Revamp the query compilation process.
This commit is contained in:
Vendored
+3
-3
@@ -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
@@ -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),
|
||||||
|
|||||||
Reference in New Issue
Block a user