chore: changes to reconcile release/jubilee with dev

This commit is contained in:
Atanas Janeshliev
2025-05-28 15:06:03 +02:00
parent 8109b384c5
commit 2aa8acfb5b
6 changed files with 31 additions and 37 deletions

9
go.sum
View File

@ -36,15 +36,6 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE
github.com/ProtonMail/bcrypt v0.0.0-20210511135022-227b4adcab57/go.mod h1:HecWFHognK8GfRDGnFQbW/LiV7A3MX3gZVs45vk5h8I= github.com/ProtonMail/bcrypt v0.0.0-20210511135022-227b4adcab57/go.mod h1:HecWFHognK8GfRDGnFQbW/LiV7A3MX3gZVs45vk5h8I=
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf h1:yc9daCCYUefEs69zUkSzubzjBbL+cmOXgnmt9Fyd9ug= github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf h1:yc9daCCYUefEs69zUkSzubzjBbL+cmOXgnmt9Fyd9ug=
github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf/go.mod h1:o0ESU9p83twszAU8LBeJKFAAMX14tISa0yk4Oo5TOqo= github.com/ProtonMail/bcrypt v0.0.0-20211005172633-e235017c1baf/go.mod h1:o0ESU9p83twszAU8LBeJKFAAMX14tISa0yk4Oo5TOqo=
github.com/ProtonMail/gluon v0.17.1-0.20250513141309-843796a505bc h1:2oppv7H5ZeFnRDohTbLZW5A8I1ylhoX2QEi3RtKxrLE=
github.com/ProtonMail/gluon v0.17.1-0.20250513141309-843796a505bc/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8=
github.com/ProtonMail/gluon v0.17.1-0.20250514104052-2f93fdfc4850 h1:OFMVeakcDS9nHW5kQ/CuBXri84iPBqPgZFHz5Xs/8jo=
github.com/ProtonMail/gluon v0.17.1-0.20250514104052-2f93fdfc4850/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8=
github.com/ProtonMail/gluon v0.17.1-0.20250515084749-4afe6a076ac4 h1:L1JeVS2op3VIcPKctS493+qOBFGhr488mMkYVSLr9eY=
github.com/ProtonMail/gluon v0.17.1-0.20250515084749-4afe6a076ac4/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8=
github.com/ProtonMail/gluon v0.17.1-0.20250516132429-a4b2de331311 h1:8oEkpmF8PD7GyCQjmTto+4yhz4vE1tTT2djL2BgJcBI=
github.com/ProtonMail/gluon v0.17.1-0.20250516132429-a4b2de331311/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8=
github.com/ProtonMail/gluon v0.17.1-0.20250527153202-a7383713882a/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8=
github.com/ProtonMail/gluon v0.17.1-0.20250528125353-9b611f58b753 h1:Zym7WHKLOu1RAUc9b8vkhwEaEU2Gi6MkaurCm7zpK6E= github.com/ProtonMail/gluon v0.17.1-0.20250528125353-9b611f58b753 h1:Zym7WHKLOu1RAUc9b8vkhwEaEU2Gi6MkaurCm7zpK6E=
github.com/ProtonMail/gluon v0.17.1-0.20250528125353-9b611f58b753/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8= github.com/ProtonMail/gluon v0.17.1-0.20250528125353-9b611f58b753/go.mod h1:0/c03TzZPNiSgY5UDJK1iRDkjlDPwWugxTT6et2qDu8=
github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE= github.com/ProtonMail/go-crypto v0.0.0-20230321155629-9a39f2531310/go.mod h1:8TI4H3IbrackdNgv+92dI+rhpCaLqM0IfpgCgenFvRE=

View File

@ -54,7 +54,7 @@ type LabelConflictManager struct {
gluonIDProvider gluonIDProvider gluonIDProvider gluonIDProvider
client apiClient client apiClient
reporter sentryReporter reporter sentryReporter
getFeatureFlagValueFn unleash.GetFlagValueFn featureFlagProvider unleash.FeatureFlagValueProvider
} }
func NewLabelConflictManager( func NewLabelConflictManager(
@ -62,13 +62,13 @@ func NewLabelConflictManager(
gluonIDProvider gluonIDProvider, gluonIDProvider gluonIDProvider,
client apiClient, client apiClient,
reporter sentryReporter, reporter sentryReporter,
getFeatureFlagValueFn unleash.GetFlagValueFn) *LabelConflictManager { featureFlagProvider unleash.FeatureFlagValueProvider) *LabelConflictManager {
return &LabelConflictManager{ return &LabelConflictManager{
gluonLabelNameProvider: gluonLabelNameProvider, gluonLabelNameProvider: gluonLabelNameProvider,
gluonIDProvider: gluonIDProvider, gluonIDProvider: gluonIDProvider,
client: client, client: client,
reporter: reporter, reporter: reporter,
getFeatureFlagValueFn: getFeatureFlagValueFn, featureFlagProvider: featureFlagProvider,
} }
} }
@ -104,7 +104,7 @@ func (r *nullLabelConflictResolverImpl) ResolveConflict(_ context.Context, _ pro
} }
func (m *LabelConflictManager) NewConflictResolver(connectors []*Connector) LabelConflictResolver { func (m *LabelConflictManager) NewConflictResolver(connectors []*Connector) LabelConflictResolver {
if m.getFeatureFlagValueFn(unleash.LabelConflictResolverDisabled) { if m.featureFlagProvider.GetFlagValue(unleash.LabelConflictResolverDisabled) {
return &nullLabelConflictResolverImpl{} return &nullLabelConflictResolverImpl{}
} }

View File

@ -33,10 +33,17 @@ import (
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
) )
func getFeatureFlagValueMock(_ string) bool { type ffProviderFalse struct{}
type ffProviderTrue struct{}
func (f ffProviderFalse) GetFlagValue(_ string) bool {
return false return false
} }
func (f ffProviderTrue) GetFlagValue(_ string) bool {
return true
}
type mockLabelNameProvider struct { type mockLabelNameProvider struct {
mock.Mock mock.Mock
} }
@ -113,7 +120,7 @@ func TestResolveConflict_UnexpectedLabelConflict(t *testing.T) {
connector := &imapservice.Connector{} connector := &imapservice.Connector{}
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock). resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}).
NewConflictResolver([]*imapservice.Connector{connector}) NewConflictResolver([]*imapservice.Connector{connector})
visited := make(map[string]bool) visited := make(map[string]bool)
@ -144,7 +151,7 @@ func TestResolveDiscrepancy_LabelDoesNotExist(t *testing.T) {
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
visited := make(map[string]bool) visited := make(map[string]bool)
@ -177,7 +184,7 @@ func TestResolveConflict_MailboxFetchError(t *testing.T) {
connector := &imapservice.Connector{} connector := &imapservice.Connector{}
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock). resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}).
NewConflictResolver([]*imapservice.Connector{connector}) NewConflictResolver([]*imapservice.Connector{connector})
visited := make(map[string]bool) visited := make(map[string]bool)
@ -215,7 +222,7 @@ func TestResolveDiscrepancy_ConflictingLabelDeletedRemotely(t *testing.T) {
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
visited := make(map[string]bool) visited := make(map[string]bool)
@ -258,7 +265,7 @@ func TestResolveDiscrepancy_LabelAlreadyCorrect(t *testing.T) {
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
visited := make(map[string]bool) visited := make(map[string]bool)
@ -287,7 +294,7 @@ func TestResolveConflict_DeepNestedPath(t *testing.T) {
connector := &imapservice.Connector{} connector := &imapservice.Connector{}
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock). resolver := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{}).
NewConflictResolver([]*imapservice.Connector{connector}) NewConflictResolver([]*imapservice.Connector{connector})
visited := make(map[string]bool) visited := make(map[string]bool)
@ -352,7 +359,7 @@ func TestResolveLabelDiscrepancy_LabelSwap(t *testing.T) {
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
visited := make(map[string]bool) visited := make(map[string]bool)
@ -445,7 +452,7 @@ func TestResolveLabelDiscrepancy_LabelSwapExtended(t *testing.T) {
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
fn, err := resolver.ResolveConflict(context.Background(), apiLabels[0], make(map[string]bool)) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[0], make(map[string]bool))
@ -530,7 +537,7 @@ func TestResolveLabelDiscrepancy_LabelSwapCyclic(t *testing.T) {
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
fn, err := resolver.ResolveConflict(context.Background(), apiLabels[0], make(map[string]bool)) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[0], make(map[string]bool))
@ -604,7 +611,7 @@ func TestResolveLabelDiscrepancy_LabelSwapCyclicWithDeletedLabel(t *testing.T) {
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagValueMock) manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderFalse{})
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
fn, err := resolver.ResolveConflict(context.Background(), apiLabels[2], make(map[string]bool)) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[2], make(map[string]bool))
@ -667,11 +674,7 @@ func TestResolveLabelDiscrepancy_LabelSwapCyclicWithDeletedLabel_KillSwitchEnabl
connector.SetAddrIDTest("addr-1") connector.SetAddrIDTest("addr-1")
connectors := []*imapservice.Connector{connector} connectors := []*imapservice.Connector{connector}
getFeatureFlagFn := func(_ string) bool { manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, ffProviderTrue{})
return true
}
manager := imapservice.NewLabelConflictManager(mockLabelProvider, mockIDProvider, mockClient, mockReporter, getFeatureFlagFn)
resolver := manager.NewConflictResolver(connectors) resolver := manager.NewConflictResolver(connectors)
fn, err := resolver.ResolveConflict(context.Background(), apiLabels[2], make(map[string]bool)) fn, err := resolver.ResolveConflict(context.Background(), apiLabels[2], make(map[string]bool))

View File

@ -114,7 +114,7 @@ func NewService(
maxSyncMemory uint64, maxSyncMemory uint64,
showAllMail bool, showAllMail bool,
observabilitySender observability.Sender, observabilitySender observability.Sender,
getFeatureFlagValueFn unleash.GetFlagValueFn, featureFlagProvider unleash.FeatureFlagValueProvider,
) *Service { ) *Service {
subscriberName := fmt.Sprintf("imap-%v", identityState.User.ID) subscriberName := fmt.Sprintf("imap-%v", identityState.User.ID)
@ -124,7 +124,7 @@ func NewService(
}) })
rwIdentity := newRWIdentity(identityState, bridgePassProvider, keyPassProvider) rwIdentity := newRWIdentity(identityState, bridgePassProvider, keyPassProvider)
labelConflictManager := NewLabelConflictManager(serverManager, gluonIDProvider, client, reporter, getFeatureFlagValueFn) labelConflictManager := NewLabelConflictManager(serverManager, gluonIDProvider, client, reporter, featureFlagProvider)
syncUpdateApplier := NewSyncUpdateApplier(labelConflictManager) syncUpdateApplier := NewSyncUpdateApplier(labelConflictManager)
syncMessageBuilder := NewSyncMessageBuilder(rwIdentity) syncMessageBuilder := NewSyncMessageBuilder(rwIdentity)
syncReporter := newSyncReporter(identityState.User.ID, eventPublisher, time.Second) syncReporter := newSyncReporter(identityState.User.ID, eventPublisher, time.Second)

View File

@ -37,11 +37,11 @@ var pollJitter = 2 * time.Minute //nolint:gochecknoglobals
const filename = "unleash_flags" const filename = "unleash_flags"
const ( const (
EventLoopNotificationDisabled = "InboxBridgeEventLoopNotificationDisabled" EventLoopNotificationDisabled = "InboxBridgeEventLoopNotificationDisabled"
IMAPAuthenticateCommandDisabled = "InboxBridgeImapAuthenticateCommandDisabled" IMAPAuthenticateCommandDisabled = "InboxBridgeImapAuthenticateCommandDisabled"
UserRemovalGluonDataCleanupDisabled = "InboxBridgeUserRemovalGluonDataCleanupDisabled" UserRemovalGluonDataCleanupDisabled = "InboxBridgeUserRemovalGluonDataCleanupDisabled"
UpdateUseNewVersionFileStructureDisabled = "InboxBridgeUpdateWithOsFilterDisabled" UpdateUseNewVersionFileStructureDisabled = "InboxBridgeUpdateWithOsFilterDisabled"
LabelConflictResolverDisabled = "InboxBridgeLabelConflictResolverDisabled" LabelConflictResolverDisabled = "InboxBridgeLabelConflictResolverDisabled"
SMTPSubmissionRequestSentryReportDisabled = "InboxBridgeSmtpSubmissionRequestSentryReportDisabled" SMTPSubmissionRequestSentryReportDisabled = "InboxBridgeSmtpSubmissionRequestSentryReportDisabled"
) )

View File

@ -284,7 +284,7 @@ func newImpl(
user.maxSyncMemory, user.maxSyncMemory,
showAllMail, showAllMail,
observabilityService, observabilityService,
getFlagValueFn, featureFlagValueProvider,
) )
user.notificationService = notifications.NewService(user.id, user.eventService, user, notificationStore, featureFlagValueProvider, observabilityService) user.notificationService = notifications.NewService(user.id, user.eventService, user, notificationStore, featureFlagValueProvider, observabilityService)