Zanzana: Add config options for Check and ListObjects queries (#94619)
* Zanzana: Add config options for Check and ListObjects queries * remove fixme * pass only zanzana settings
This commit is contained in:
@@ -49,7 +49,7 @@ func ProvideZanzana(cfg *setting.Cfg, db db.DB, features featuremgmt.FeatureTogg
|
|||||||
return nil, fmt.Errorf("failed to start zanzana: %w", err)
|
return nil, fmt.Errorf("failed to start zanzana: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
srv, err := zanzana.NewServer(store, logger)
|
srv, err := zanzana.NewServer(cfg, store, logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to start zanzana: %w", err)
|
return nil, fmt.Errorf("failed to start zanzana: %w", err)
|
||||||
}
|
}
|
||||||
@@ -104,7 +104,7 @@ func (z *Zanzana) start(ctx context.Context) error {
|
|||||||
return fmt.Errorf("failed to initilize zanana store: %w", err)
|
return fmt.Errorf("failed to initilize zanana store: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
srv, err := zanzana.NewServer(store, z.logger)
|
srv, err := zanzana.NewServer(z.cfg, store, z.logger)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to start zanzana: %w", err)
|
return fmt.Errorf("failed to start zanzana: %w", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -107,7 +107,7 @@ func zanzanaServerIntegrationTest(tb testing.TB) *inprocgrpc.Channel {
|
|||||||
store, err := zstore.NewEmbeddedStore(cfg, db, logger)
|
store, err := zstore.NewEmbeddedStore(cfg, db, logger)
|
||||||
require.NoError(tb, err)
|
require.NoError(tb, err)
|
||||||
|
|
||||||
srv, err := zserver.New(store, logger)
|
srv, err := zserver.New(&cfg.Zanzana, store, logger)
|
||||||
require.NoError(tb, err)
|
require.NoError(tb, err)
|
||||||
|
|
||||||
channel := &inprocgrpc.Channel{}
|
channel := &inprocgrpc.Channel{}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import (
|
|||||||
zserver "github.com/grafana/grafana/pkg/services/authz/zanzana/server"
|
zserver "github.com/grafana/grafana/pkg/services/authz/zanzana/server"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewServer(store storage.OpenFGADatastore, logger log.Logger) (*server.Server, error) {
|
func NewServer(cfg *setting.Cfg, store storage.OpenFGADatastore, logger log.Logger) (*server.Server, error) {
|
||||||
return zserver.New(store, logger)
|
return zserver.New(&cfg.Zanzana, store, logger)
|
||||||
}
|
}
|
||||||
|
|
||||||
func StartOpenFGAHttpSever(cfg *setting.Cfg, srv grpcserver.Provider, logger log.Logger) error {
|
func StartOpenFGAHttpSever(cfg *setting.Cfg, srv grpcserver.Provider, logger log.Logger) error {
|
||||||
|
|||||||
@@ -27,11 +27,14 @@ import (
|
|||||||
zlogger "github.com/grafana/grafana/pkg/services/authz/zanzana/logger"
|
zlogger "github.com/grafana/grafana/pkg/services/authz/zanzana/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
func New(store storage.OpenFGADatastore, logger log.Logger) (*server.Server, error) {
|
func New(cfg *setting.ZanzanaSettings, store storage.OpenFGADatastore, logger log.Logger) (*server.Server, error) {
|
||||||
// FIXME(kalleep): add support for more options, tracing etc
|
|
||||||
opts := []server.OpenFGAServiceV1Option{
|
opts := []server.OpenFGAServiceV1Option{
|
||||||
server.WithDatastore(store),
|
server.WithDatastore(store),
|
||||||
server.WithLogger(zlogger.New(logger)),
|
server.WithLogger(zlogger.New(logger)),
|
||||||
|
server.WithCheckQueryCacheEnabled(cfg.CheckQueryCache),
|
||||||
|
server.WithCheckQueryCacheTTL(cfg.CheckQueryCacheTTL),
|
||||||
|
server.WithListObjectsMaxResults(cfg.ListObjectsMaxResults),
|
||||||
|
server.WithListObjectsDeadline(cfg.ListObjectsDeadline),
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME(kalleep): Interceptors
|
// FIXME(kalleep): Interceptors
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package setting
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"slices"
|
"slices"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ZanzanaMode string
|
type ZanzanaMode string
|
||||||
@@ -20,11 +21,19 @@ type ZanzanaSettings struct {
|
|||||||
ListenHTTP bool
|
ListenHTTP bool
|
||||||
// OpenFGA http server address which allows to connect with fga cli
|
// OpenFGA http server address which allows to connect with fga cli
|
||||||
HttpAddr string
|
HttpAddr string
|
||||||
// Number of check requests running concurrently
|
|
||||||
ConcurrentChecks int64
|
|
||||||
// If enabled, authorization cheks will be only performed by zanzana.
|
// If enabled, authorization cheks will be only performed by zanzana.
|
||||||
// This bypasses the performance comparison with the legacy system.
|
// This bypasses the performance comparison with the legacy system.
|
||||||
ZanzanaOnlyEvaluation bool
|
ZanzanaOnlyEvaluation bool
|
||||||
|
// Number of concurrent check requests running by Grafana.
|
||||||
|
ConcurrentChecks int64
|
||||||
|
// Enable cache for Check() requests
|
||||||
|
CheckQueryCache bool
|
||||||
|
// TTL for cached requests. Default is 10 seconds.
|
||||||
|
CheckQueryCacheTTL time.Duration
|
||||||
|
// Max number of results returned by ListObjects() query. Default is 1000.
|
||||||
|
ListObjectsMaxResults uint32
|
||||||
|
// Deadline for the ListObjects() query. Default is 3 seconds.
|
||||||
|
ListObjectsDeadline time.Duration
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cfg *Cfg) readZanzanaSettings() {
|
func (cfg *Cfg) readZanzanaSettings() {
|
||||||
@@ -45,6 +54,10 @@ func (cfg *Cfg) readZanzanaSettings() {
|
|||||||
s.HttpAddr = sec.Key("http_addr").MustString("127.0.0.1:8080")
|
s.HttpAddr = sec.Key("http_addr").MustString("127.0.0.1:8080")
|
||||||
s.ConcurrentChecks = sec.Key("concurrent_checks").MustInt64(10)
|
s.ConcurrentChecks = sec.Key("concurrent_checks").MustInt64(10)
|
||||||
s.ZanzanaOnlyEvaluation = sec.Key("zanzana_only_evaluation").MustBool(false)
|
s.ZanzanaOnlyEvaluation = sec.Key("zanzana_only_evaluation").MustBool(false)
|
||||||
|
s.CheckQueryCache = sec.Key("check_query_cache").MustBool(true)
|
||||||
|
s.CheckQueryCacheTTL = sec.Key("check_query_cache_ttl").MustDuration(10 * time.Second)
|
||||||
|
s.ListObjectsDeadline = sec.Key("list_objects_deadline").MustDuration(3 * time.Second)
|
||||||
|
s.ListObjectsMaxResults = uint32(sec.Key("list_objects_max_results").MustUint(1000))
|
||||||
|
|
||||||
cfg.Zanzana = s
|
cfg.Zanzana = s
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user