mirror of
https://github.com/pomerium/pomerium.git
synced 2025-06-05 04:13:11 +02:00
authorize: cache warming (#5439)
* authorize: cache warming * add Authorize to test? * remove tracing querier * only update connection when it changes
This commit is contained in:
parent
b674d5c19d
commit
6e1fabec0b
9 changed files with 254 additions and 186 deletions
|
@ -4,7 +4,6 @@ import (
|
|||
"context"
|
||||
"encoding/json"
|
||||
"strconv"
|
||||
"sync"
|
||||
|
||||
"github.com/google/uuid"
|
||||
grpc "google.golang.org/grpc"
|
||||
|
@ -12,7 +11,6 @@ import (
|
|||
status "google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/encoding/protojson"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"google.golang.org/protobuf/types/known/structpb"
|
||||
timestamppb "google.golang.org/protobuf/types/known/timestamppb"
|
||||
|
||||
"github.com/pomerium/pomerium/pkg/cryptutil"
|
||||
|
@ -162,59 +160,6 @@ func (q *clientQuerier) Query(ctx context.Context, in *databroker.QueryRequest,
|
|||
return q.client.Query(ctx, in, opts...)
|
||||
}
|
||||
|
||||
// A TracingQuerier records calls to Query.
|
||||
type TracingQuerier struct {
|
||||
underlying Querier
|
||||
|
||||
mu sync.Mutex
|
||||
traces []QueryTrace
|
||||
}
|
||||
|
||||
// A QueryTrace traces a call to Query.
|
||||
type QueryTrace struct {
|
||||
ServerVersion, RecordVersion uint64
|
||||
|
||||
RecordType string
|
||||
Query string
|
||||
Filter *structpb.Struct
|
||||
}
|
||||
|
||||
// NewTracingQuerier creates a new TracingQuerier.
|
||||
func NewTracingQuerier(q Querier) *TracingQuerier {
|
||||
return &TracingQuerier{
|
||||
underlying: q,
|
||||
}
|
||||
}
|
||||
|
||||
// InvalidateCache invalidates the cache.
|
||||
func (q *TracingQuerier) InvalidateCache(ctx context.Context, in *databroker.QueryRequest) {
|
||||
q.underlying.InvalidateCache(ctx, in)
|
||||
}
|
||||
|
||||
// Query queries for records.
|
||||
func (q *TracingQuerier) Query(ctx context.Context, in *databroker.QueryRequest, opts ...grpc.CallOption) (*databroker.QueryResponse, error) {
|
||||
res, err := q.underlying.Query(ctx, in, opts...)
|
||||
if err == nil {
|
||||
q.mu.Lock()
|
||||
q.traces = append(q.traces, QueryTrace{
|
||||
RecordType: in.GetType(),
|
||||
Query: in.GetQuery(),
|
||||
Filter: in.GetFilter(),
|
||||
})
|
||||
q.mu.Unlock()
|
||||
}
|
||||
return res, err
|
||||
}
|
||||
|
||||
// Traces returns all the traces.
|
||||
func (q *TracingQuerier) Traces() []QueryTrace {
|
||||
q.mu.Lock()
|
||||
traces := make([]QueryTrace, len(q.traces))
|
||||
copy(traces, q.traces)
|
||||
q.mu.Unlock()
|
||||
return traces
|
||||
}
|
||||
|
||||
type cachingQuerier struct {
|
||||
q Querier
|
||||
cache Cache
|
||||
|
@ -240,9 +185,7 @@ func (q *cachingQuerier) InvalidateCache(ctx context.Context, in *databroker.Que
|
|||
}
|
||||
|
||||
func (q *cachingQuerier) Query(ctx context.Context, in *databroker.QueryRequest, opts ...grpc.CallOption) (*databroker.QueryResponse, error) {
|
||||
key, err := (&proto.MarshalOptions{
|
||||
Deterministic: true,
|
||||
}).Marshal(in)
|
||||
key, err := MarshalQueryRequest(in)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -252,7 +195,7 @@ func (q *cachingQuerier) Query(ctx context.Context, in *databroker.QueryRequest,
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return proto.Marshal(res)
|
||||
return MarshalQueryResponse(res)
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -265,3 +208,17 @@ func (q *cachingQuerier) Query(ctx context.Context, in *databroker.QueryRequest,
|
|||
}
|
||||
return &res, nil
|
||||
}
|
||||
|
||||
// MarshalQueryRequest marshales the query request.
|
||||
func MarshalQueryRequest(req *databroker.QueryRequest) ([]byte, error) {
|
||||
return (&proto.MarshalOptions{
|
||||
Deterministic: true,
|
||||
}).Marshal(req)
|
||||
}
|
||||
|
||||
// MarshalQueryResponse marshals the query response.
|
||||
func MarshalQueryResponse(res *databroker.QueryResponse) ([]byte, error) {
|
||||
return (&proto.MarshalOptions{
|
||||
Deterministic: true,
|
||||
}).Marshal(res)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue