fix: query organization directly from event store (#10463)

Querying an organization by id allowed to trigger the org projection.
This could lead to performance impacts if the projection gets triggered
too often.

Instead of executing the trigger the organization by id query is now
always executed on the eventstore and reduces all event types required
of the organization requested.

---------

Co-authored-by: Livio Spring <livio.a@gmail.com>
This commit is contained in:
Silvan
2025-08-12 11:37:08 +02:00
committed by adlerhurst
parent 5a29e8909a
commit 1470ae08fc
16 changed files with 39 additions and 77 deletions

View File

@@ -310,7 +310,7 @@ func importOrg1(ctx context.Context, s *Server, errors *[]*admin_pb.ImportDataEr
_, err = s.command.AddOrgWithID(ctx, org.GetOrg().GetName(), ctxData.UserID, ctxData.ResourceOwner, org.GetOrgId(), setOrgInactive, []string{}) _, err = s.command.AddOrgWithID(ctx, org.GetOrg().GetName(), ctxData.UserID, ctxData.ResourceOwner, org.GetOrgId(), setOrgInactive, []string{})
if err != nil { if err != nil {
*errors = append(*errors, &admin_pb.ImportDataError{Type: "org", Id: org.GetOrgId(), Message: err.Error()}) *errors = append(*errors, &admin_pb.ImportDataError{Type: "org", Id: org.GetOrgId(), Message: err.Error()})
if _, err := s.query.OrgByID(ctx, true, org.OrgId); err != nil { if _, err := s.query.OrgByID(ctx, org.OrgId); err != nil {
// TODO: Only nil if err != not found // TODO: Only nil if err != not found
return nil return nil
} }

View File

@@ -38,7 +38,7 @@ func (s *Server) RemoveOrg(ctx context.Context, req *admin_pb.RemoveOrgRequest)
} }
func (s *Server) GetDefaultOrg(ctx context.Context, _ *admin_pb.GetDefaultOrgRequest) (*admin_pb.GetDefaultOrgResponse, error) { func (s *Server) GetDefaultOrg(ctx context.Context, _ *admin_pb.GetDefaultOrgRequest) (*admin_pb.GetDefaultOrgResponse, error) {
org, err := s.query.OrgByID(ctx, true, authz.GetInstance(ctx).DefaultOrganisationID()) org, err := s.query.OrgByID(ctx, authz.GetInstance(ctx).DefaultOrganisationID())
if err != nil { if err != nil {
return nil, err return nil, err
} }
@@ -46,7 +46,7 @@ func (s *Server) GetDefaultOrg(ctx context.Context, _ *admin_pb.GetDefaultOrgReq
} }
func (s *Server) GetOrgByID(ctx context.Context, req *admin_pb.GetOrgByIDRequest) (*admin_pb.GetOrgByIDResponse, error) { func (s *Server) GetOrgByID(ctx context.Context, req *admin_pb.GetOrgByIDRequest) (*admin_pb.GetOrgByIDResponse, error) {
org, err := s.query.OrgByID(ctx, true, req.Id) org, err := s.query.OrgByID(ctx, req.Id)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -164,8 +164,6 @@ func improvedPerformanceTypeToPb(typ feature.ImprovedPerformanceType) feature_pb
switch typ { switch typ {
case feature.ImprovedPerformanceTypeUnspecified: case feature.ImprovedPerformanceTypeUnspecified:
return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED
case feature.ImprovedPerformanceTypeOrgByID:
return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID
case feature.ImprovedPerformanceTypeProjectGrant: case feature.ImprovedPerformanceTypeProjectGrant:
return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT
case feature.ImprovedPerformanceTypeProject: case feature.ImprovedPerformanceTypeProject:
@@ -196,8 +194,6 @@ func improvedPerformanceToDomain(typ feature_pb.ImprovedPerformance) feature.Imp
switch typ { switch typ {
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED: case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED:
return feature.ImprovedPerformanceTypeUnspecified return feature.ImprovedPerformanceTypeUnspecified
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID:
return feature.ImprovedPerformanceTypeOrgByID
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT: case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT:
return feature.ImprovedPerformanceTypeProjectGrant return feature.ImprovedPerformanceTypeProjectGrant
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT: case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT:

View File

@@ -66,7 +66,7 @@ func Test_systemFeaturesToPb(t *testing.T) {
}, },
ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{
Level: feature.LevelSystem, Level: feature.LevelSystem,
Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgByID}, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified},
}, },
OIDCSingleV1SessionTermination: query.FeatureSource[bool]{ OIDCSingleV1SessionTermination: query.FeatureSource[bool]{
Level: feature.LevelSystem, Level: feature.LevelSystem,
@@ -107,7 +107,7 @@ func Test_systemFeaturesToPb(t *testing.T) {
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{
ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID}, ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_DOMAIN_VERIFIED},
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
OidcSingleV1SessionTermination: &feature_pb.FeatureFlag{ OidcSingleV1SessionTermination: &feature_pb.FeatureFlag{
@@ -191,7 +191,7 @@ func Test_instanceFeaturesToPb(t *testing.T) {
}, },
ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{
Level: feature.LevelSystem, Level: feature.LevelSystem,
Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgByID}, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified},
}, },
OIDCSingleV1SessionTermination: query.FeatureSource[bool]{ OIDCSingleV1SessionTermination: query.FeatureSource[bool]{
Level: feature.LevelInstance, Level: feature.LevelInstance,
@@ -236,7 +236,7 @@ func Test_instanceFeaturesToPb(t *testing.T) {
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{
ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID}, ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_DOMAIN_VERIFIED},
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
DebugOidcParentError: &feature_pb.FeatureFlag{ DebugOidcParentError: &feature_pb.FeatureFlag{

View File

@@ -101,8 +101,6 @@ func improvedPerformanceTypeToPb(typ feature.ImprovedPerformanceType) feature_pb
switch typ { switch typ {
case feature.ImprovedPerformanceTypeUnspecified: case feature.ImprovedPerformanceTypeUnspecified:
return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED
case feature.ImprovedPerformanceTypeOrgByID:
return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID
case feature.ImprovedPerformanceTypeProjectGrant: case feature.ImprovedPerformanceTypeProjectGrant:
return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT return feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT
case feature.ImprovedPerformanceTypeProject: case feature.ImprovedPerformanceTypeProject:
@@ -133,8 +131,6 @@ func improvedPerformanceToDomain(typ feature_pb.ImprovedPerformance) feature.Imp
switch typ { switch typ {
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED: case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_UNSPECIFIED:
return feature.ImprovedPerformanceTypeUnspecified return feature.ImprovedPerformanceTypeUnspecified
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID:
return feature.ImprovedPerformanceTypeOrgByID
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT: case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT_GRANT:
return feature.ImprovedPerformanceTypeProjectGrant return feature.ImprovedPerformanceTypeProjectGrant
case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT: case feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_PROJECT:

View File

@@ -56,7 +56,7 @@ func Test_systemFeaturesToPb(t *testing.T) {
}, },
ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{
Level: feature.LevelSystem, Level: feature.LevelSystem,
Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgByID}, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified},
}, },
OIDCSingleV1SessionTermination: query.FeatureSource[bool]{ OIDCSingleV1SessionTermination: query.FeatureSource[bool]{
Level: feature.LevelSystem, Level: feature.LevelSystem,
@@ -82,7 +82,7 @@ func Test_systemFeaturesToPb(t *testing.T) {
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{
ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID}, ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_DOMAIN_VERIFIED},
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
OidcSingleV1SessionTermination: &feature_pb.FeatureFlag{ OidcSingleV1SessionTermination: &feature_pb.FeatureFlag{
@@ -134,7 +134,7 @@ func Test_instanceFeaturesToPb(t *testing.T) {
}, },
ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{ ImprovedPerformance: query.FeatureSource[[]feature.ImprovedPerformanceType]{
Level: feature.LevelSystem, Level: feature.LevelSystem,
Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgByID}, Value: []feature.ImprovedPerformanceType{feature.ImprovedPerformanceTypeOrgDomainVerified},
}, },
OIDCSingleV1SessionTermination: query.FeatureSource[bool]{ OIDCSingleV1SessionTermination: query.FeatureSource[bool]{
Level: feature.LevelInstance, Level: feature.LevelInstance,
@@ -160,7 +160,7 @@ func Test_instanceFeaturesToPb(t *testing.T) {
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{ ImprovedPerformance: &feature_pb.ImprovedPerformanceFeatureFlag{
ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_BY_ID}, ExecutionPaths: []feature_pb.ImprovedPerformance{feature_pb.ImprovedPerformance_IMPROVED_PERFORMANCE_ORG_DOMAIN_VERIFIED},
Source: feature_pb.Source_SOURCE_SYSTEM, Source: feature_pb.Source_SOURCE_SYSTEM,
}, },
DebugOidcParentError: &feature_pb.FeatureFlag{ DebugOidcParentError: &feature_pb.FeatureFlag{

View File

@@ -21,7 +21,7 @@ import (
) )
func (s *Server) GetMyOrg(ctx context.Context, req *mgmt_pb.GetMyOrgRequest) (*mgmt_pb.GetMyOrgResponse, error) { func (s *Server) GetMyOrg(ctx context.Context, req *mgmt_pb.GetMyOrgRequest) (*mgmt_pb.GetMyOrgResponse, error) {
org, err := s.query.OrgByID(ctx, true, authz.GetCtxData(ctx).OrgID) org, err := s.query.OrgByID(ctx, authz.GetCtxData(ctx).OrgID)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -261,7 +261,7 @@ func (s *Server) checkOrgScopes(ctx context.Context, resourceOwner string, scope
if slices.ContainsFunc(scopes, func(scope string) bool { if slices.ContainsFunc(scopes, func(scope string) bool {
return strings.HasPrefix(scope, domain.OrgDomainPrimaryScope) return strings.HasPrefix(scope, domain.OrgDomainPrimaryScope)
}) { }) {
org, err := s.query.OrgByID(ctx, false, resourceOwner) org, err := s.query.OrgByID(ctx, resourceOwner)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -571,7 +571,7 @@ func (l *Login) getOrgPrimaryDomain(r *http.Request, authReq *domain.AuthRequest
if authReq != nil && authReq.RequestedPrimaryDomain != "" { if authReq != nil && authReq.RequestedPrimaryDomain != "" {
return authReq.RequestedPrimaryDomain return authReq.RequestedPrimaryDomain
} }
org, err := l.query.OrgByID(r.Context(), false, orgID) org, err := l.query.OrgByID(r.Context(), orgID)
if err != nil { if err != nil {
logging.New().WithError(err).Error("cannot get default org") logging.New().WithError(err).Error("cannot get default org")
return "" return ""

View File

@@ -114,7 +114,7 @@ type userCommandProvider interface {
} }
type orgViewProvider interface { type orgViewProvider interface {
OrgByID(context.Context, bool, string) (*query.Org, error) OrgByID(context.Context, string) (*query.Org, error)
OrgByPrimaryDomain(context.Context, string) (*query.Org, error) OrgByPrimaryDomain(context.Context, string) (*query.Org, error)
} }
@@ -1548,7 +1548,7 @@ func (repo *AuthRequestRepo) getDomainPolicy(ctx context.Context, orgID string)
func setOrgID(ctx context.Context, orgViewProvider orgViewProvider, request *domain.AuthRequest) error { func setOrgID(ctx context.Context, orgViewProvider orgViewProvider, request *domain.AuthRequest) error {
orgID := request.GetScopeOrgID() orgID := request.GetScopeOrgID()
if orgID != "" { if orgID != "" {
org, err := orgViewProvider.OrgByID(ctx, false, orgID) org, err := orgViewProvider.OrgByID(ctx, orgID)
if err != nil { if err != nil {
return err return err
} }
@@ -1721,7 +1721,7 @@ func activeUserByID(ctx context.Context, userViewProvider userViewProvider, user
if !(user.State == user_model.UserStateActive || user.State == user_model.UserStateInitial) { if !(user.State == user_model.UserStateActive || user.State == user_model.UserStateInitial) {
return nil, zerrors.ThrowPreconditionFailed(nil, "EVENT-FJ262", "Errors.User.NotActive") return nil, zerrors.ThrowPreconditionFailed(nil, "EVENT-FJ262", "Errors.User.NotActive")
} }
org, err := queries.OrgByID(ctx, false, user.ResourceOwner) org, err := queries.OrgByID(ctx, user.ResourceOwner)
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@@ -237,7 +237,7 @@ type mockViewOrg struct {
State domain.OrgState State domain.OrgState
} }
func (m *mockViewOrg) OrgByID(context.Context, bool, string) (*query.Org, error) { func (m *mockViewOrg) OrgByID(context.Context, string) (*query.Org, error) {
return &query.Org{ return &query.Org{
State: m.State, State: m.State,
}, nil }, nil
@@ -251,7 +251,7 @@ func (m *mockViewOrg) OrgByPrimaryDomain(context.Context, string) (*query.Org, e
type mockViewErrOrg struct{} type mockViewErrOrg struct{}
func (m *mockViewErrOrg) OrgByID(context.Context, bool, string) (*query.Org, error) { func (m *mockViewErrOrg) OrgByID(context.Context, string) (*query.Org, error) {
return nil, zerrors.ThrowInternal(nil, "id", "internal error") return nil, zerrors.ThrowInternal(nil, "id", "internal error")
} }

View File

@@ -57,12 +57,13 @@ type Features struct {
type ImprovedPerformanceType int32 type ImprovedPerformanceType int32
const ( const (
ImprovedPerformanceTypeUnspecified ImprovedPerformanceType = iota // Reserved: 1
ImprovedPerformanceTypeOrgByID
ImprovedPerformanceTypeProjectGrant ImprovedPerformanceTypeUnspecified ImprovedPerformanceType = 0
ImprovedPerformanceTypeProject ImprovedPerformanceTypeProjectGrant ImprovedPerformanceType = 2
ImprovedPerformanceTypeUserGrant ImprovedPerformanceTypeProject ImprovedPerformanceType = 3
ImprovedPerformanceTypeOrgDomainVerified ImprovedPerformanceTypeUserGrant ImprovedPerformanceType = 4
ImprovedPerformanceTypeOrgDomainVerified ImprovedPerformanceType = 5
) )
func (f Features) ShouldUseImprovedPerformance(typ ImprovedPerformanceType) bool { func (f Features) ShouldUseImprovedPerformance(typ ImprovedPerformanceType) bool {

View File

@@ -8,13 +8,10 @@ import (
"time" "time"
sq "github.com/Masterminds/squirrel" sq "github.com/Masterminds/squirrel"
"github.com/zitadel/logging"
"github.com/zitadel/zitadel/internal/api/authz" "github.com/zitadel/zitadel/internal/api/authz"
domain_pkg "github.com/zitadel/zitadel/internal/domain" domain_pkg "github.com/zitadel/zitadel/internal/domain"
es "github.com/zitadel/zitadel/internal/eventstore" es "github.com/zitadel/zitadel/internal/eventstore"
"github.com/zitadel/zitadel/internal/eventstore/handler/v2"
"github.com/zitadel/zitadel/internal/feature"
"github.com/zitadel/zitadel/internal/query/projection" "github.com/zitadel/zitadel/internal/query/projection"
"github.com/zitadel/zitadel/internal/telemetry/tracing" "github.com/zitadel/zitadel/internal/telemetry/tracing"
"github.com/zitadel/zitadel/internal/v2/eventstore" "github.com/zitadel/zitadel/internal/v2/eventstore"
@@ -121,7 +118,7 @@ func (q *OrgSearchQueries) toQuery(query sq.SelectBuilder) sq.SelectBuilder {
return query return query
} }
func (q *Queries) OrgByID(ctx context.Context, shouldTriggerBulk bool, id string) (org *Org, err error) { func (q *Queries) OrgByID(ctx context.Context, id string) (org *Org, err error) {
ctx, span := tracing.NewSpan(ctx) ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }() defer func() { span.EndWithError(err) }()
@@ -134,10 +131,6 @@ func (q *Queries) OrgByID(ctx context.Context, shouldTriggerBulk bool, id string
} }
}() }()
if !authz.GetInstance(ctx).Features().ShouldUseImprovedPerformance(feature.ImprovedPerformanceTypeOrgByID) {
return q.oldOrgByID(ctx, shouldTriggerBulk, id)
}
foundOrg := readmodel.NewOrg(id) foundOrg := readmodel.NewOrg(id)
eventCount, err := q.eventStoreV4.Query( eventCount, err := q.eventStoreV4.Query(
ctx, ctx,
@@ -168,33 +161,6 @@ func (q *Queries) OrgByID(ctx context.Context, shouldTriggerBulk bool, id string
}, nil }, nil
} }
func (q *Queries) oldOrgByID(ctx context.Context, shouldTriggerBulk bool, id string) (org *Org, err error) {
ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }()
if shouldTriggerBulk {
_, traceSpan := tracing.NewNamedSpan(ctx, "TriggerOrgProjection")
ctx, err = projection.OrgProjection.Trigger(ctx, handler.WithAwaitRunning())
logging.OnError(err).Debug("trigger failed")
traceSpan.EndWithError(err)
}
stmt, scan := prepareOrgQuery()
query, args, err := stmt.Where(sq.Eq{
OrgColumnID.identifier(): id,
OrgColumnInstanceID.identifier(): authz.GetInstance(ctx).InstanceID(),
}).ToSql()
if err != nil {
return nil, zerrors.ThrowInternal(err, "QUERY-AWx52", "Errors.Query.SQLStatement")
}
err = q.client.QueryRowContext(ctx, func(row *sql.Row) error {
org, err = scan(row)
return err
}, query, args...)
return org, err
}
func (q *Queries) OrgByPrimaryDomain(ctx context.Context, domain string) (org *Org, err error) { func (q *Queries) OrgByPrimaryDomain(ctx context.Context, domain string) (org *Org, err error) {
ctx, span := tracing.NewSpan(ctx) ctx, span := tracing.NewSpan(ctx)
defer func() { span.EndWithError(err) }() defer func() { span.EndWithError(err) }()
@@ -288,7 +254,7 @@ func (q *Queries) ExistsOrg(ctx context.Context, id, domain string) (verifiedID
var org *Org var org *Org
if id != "" { if id != "" {
org, err = q.OrgByID(ctx, true, id) org, err = q.OrgByID(ctx, id)
} else { } else {
org, err = q.OrgByVerifiedDomain(ctx, domain) org, err = q.OrgByVerifiedDomain(ctx, domain)
} }

View File

@@ -9,8 +9,11 @@ breaking:
- FILE - FILE
- FIELD_NO_DELETE_UNLESS_NAME_RESERVED - FIELD_NO_DELETE_UNLESS_NAME_RESERVED
- FIELD_NO_DELETE_UNLESS_NUMBER_RESERVED - FIELD_NO_DELETE_UNLESS_NUMBER_RESERVED
- ENUM_VALUE_NO_DELETE_UNLESS_NAME_RESERVED
- ENUM_VALUE_NO_DELETE_UNLESS_NUMBER_RESERVED
except: except:
- FIELD_NO_DELETE - FIELD_NO_DELETE
- ENUM_VALUE_NO_DELETE
ignore_unstable_packages: true ignore_unstable_packages: true
lint: lint:
use: use:

View File

@@ -60,13 +60,13 @@ message LoginV2FeatureFlag {
} }
enum ImprovedPerformance { enum ImprovedPerformance {
reserved 1;
reserved "IMPROVED_PERFORMANCE_ORG_BY_ID";
IMPROVED_PERFORMANCE_UNSPECIFIED = 0; IMPROVED_PERFORMANCE_UNSPECIFIED = 0;
// Uses the eventstore to query the org by id
// instead of the sql table.
IMPROVED_PERFORMANCE_ORG_BY_ID = 1;
// Improves performance on write side by using // Improves performance on write side by using
// optimized processes to query data to determine // optimized processes to query data to determine
// correctnes of data. // correctness of data.
IMPROVED_PERFORMANCE_PROJECT_GRANT = 2; IMPROVED_PERFORMANCE_PROJECT_GRANT = 2;
IMPROVED_PERFORMANCE_PROJECT = 3; IMPROVED_PERFORMANCE_PROJECT = 3;
IMPROVED_PERFORMANCE_USER_GRANT = 4; IMPROVED_PERFORMANCE_USER_GRANT = 4;

View File

@@ -50,13 +50,13 @@ message ImprovedPerformanceFeatureFlag {
} }
enum ImprovedPerformance { enum ImprovedPerformance {
reserved 1;
reserved "IMPROVED_PERFORMANCE_ORG_BY_ID";
IMPROVED_PERFORMANCE_UNSPECIFIED = 0; IMPROVED_PERFORMANCE_UNSPECIFIED = 0;
// Uses the eventstore to query the org by id
// instead of the sql table.
IMPROVED_PERFORMANCE_ORG_BY_ID = 1;
// Improves performance on write side by using // Improves performance on write side by using
// optimized processes to query data to determine // optimized processes to query data to determine
// correctnes of data. // correctness of data.
IMPROVED_PERFORMANCE_PROJECT_GRANT = 2; IMPROVED_PERFORMANCE_PROJECT_GRANT = 2;
IMPROVED_PERFORMANCE_PROJECT = 3; IMPROVED_PERFORMANCE_PROJECT = 3;
IMPROVED_PERFORMANCE_USER_GRANT = 4; IMPROVED_PERFORMANCE_USER_GRANT = 4;