Skip to content

Commit ce66b34

Browse files
committed
fix: use galleyOpts instead of add fields in background-worker options
1 parent 3b4878b commit ce66b34

5 files changed

Lines changed: 61 additions & 88 deletions

File tree

services/background-worker/src/Wire/BackgroundWorker/Env.hs

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import Control.Monad.Base
2626
import Control.Monad.Catch
2727
import Control.Monad.Trans.Control
2828
import Data.Domain (Domain)
29+
import Data.Id (TeamId)
2930
import Data.Map.Strict qualified as Map
3031
import Data.Misc (HttpsUrl)
3132
import HTTP2.Client.Manager
@@ -44,7 +45,10 @@ import System.Logger qualified as Log
4445
import System.Logger.Class (Logger, MonadLogger (..))
4546
import System.Logger.Extended qualified as Log
4647
import Util.Options
48+
import Wire.API.Conversation.Protocol (ProtocolTag)
49+
import Wire.API.Team.FeatureFlags (FanoutLimit)
4750
import Wire.BackgroundWorker.Options
51+
import Wire.Options.Galley (GuestLinkTTLSeconds)
4852
import Wire.Options.Galley qualified as Galley
4953
import Wire.PostgresMigrationOpts
5054
import Wire.RateLimit.Interpreter (RateLimitEnv, newRateLimitEnv)
@@ -90,7 +94,14 @@ data Env = Env
9094
sparEndpoint :: Endpoint,
9195
galleyEndpoint :: Endpoint,
9296
brigEndpoint :: Endpoint,
93-
settings :: Settings,
97+
maxTeamSize :: !Word32,
98+
maxFanoutSize :: !(Maybe FanoutLimit),
99+
exposeInvitationURLsTeamAllowlist :: !(Maybe [TeamId]),
100+
intraListing :: !Bool,
101+
federationProtocols :: !(Maybe [ProtocolTag]),
102+
guestLinkTTLSeconds :: !(Maybe GuestLinkTTLSeconds),
103+
passwordHashingOptions :: !PasswordHashingOptions,
104+
checkGroupInfo :: !(Maybe Bool),
94105
convCodeURI :: Either HttpsUrl (Map Text HttpsUrl),
95106
passwordHashingRateLimitEnv :: RateLimitEnv
96107
}
@@ -143,14 +154,14 @@ mkEnv opts galleyOpts = do
143154
galleyEndpoint = opts.galley
144155
gundeckEndpoint = opts.gundeck
145156
sparEndpoint = opts.spar
146-
settings = opts.settings
147-
let errMsg = "Either conversationCodeURI or multiIngress needs to be set."
148-
convCodeURI <- case (settings.conversationCodeURI, settings.multiIngress) of
149-
(Nothing, Nothing) -> error errMsg
150-
(Nothing, Just mi) -> pure (Right mi)
151-
(Just uri, Nothing) -> pure (Left uri)
152-
(Just _, Just _) -> error errMsg
153-
passwordHashingRateLimitEnv <- newRateLimitEnv settings.passwordHashingRateLimit
157+
maxTeamSize = galleyOpts._settings._maxTeamSize
158+
maxFanoutSize = galleyOpts._settings._maxFanoutSize
159+
exposeInvitationURLsTeamAllowlist = galleyOpts._settings._exposeInvitationURLsTeamAllowlist
160+
intraListing = galleyOpts._settings._intraListing
161+
federationProtocols = galleyOpts._settings._federationProtocols
162+
guestLinkTTLSeconds = galleyOpts._settings._guestLinkTTLSeconds
163+
passwordHashingOptions = galleyOpts._settings._passwordHashingOptions
164+
checkGroupInfo = galleyOpts._settings._checkGroupInfo
154165
workerRunningGauge <- mkWorkerRunningGauge
155166
hasqlPool <- initPostgresPool opts.postgresqlPool galleyOpts._postgresql galleyOpts._postgresqlPassword
156167
amqpJobsPublisherChannel <-
@@ -159,6 +170,13 @@ mkEnv opts galleyOpts = do
159170
amqpBackendNotificationsChannel <-
160171
mkRabbitMqChannelMVar logger (Just "background-worker-backend-notifications") $
161172
either id demoteOpts opts.rabbitmq.unRabbitMqOpts
173+
let errMsg = "Either conversationCodeURI or multiIngress needs to be set."
174+
convCodeURI <- case (galleyOpts._settings._conversationCodeURI, galleyOpts._settings._multiIngress) of
175+
(Nothing, Nothing) -> error errMsg
176+
(Nothing, Just mi) -> pure (Right mi)
177+
(Just uri, Nothing) -> pure (Left uri)
178+
(Just _, Just _) -> error errMsg
179+
passwordHashingRateLimitEnv <- newRateLimitEnv galleyOpts._settings._passwordHashingRateLimit
162180
pure Env {..}
163181

164182
initHttp2Manager :: IO Http2Manager

services/background-worker/src/Wire/BackgroundWorker/Jobs/Registry.hs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ import Wire.BackgroundJobsPublisher.RabbitMQ (interpretBackgroundJobsPublisherRa
6565
import Wire.BackgroundJobsRunner (runJob)
6666
import Wire.BackgroundJobsRunner.Interpreter hiding (runJob)
6767
import Wire.BackgroundWorker.Env (AppT, Env (..))
68-
import Wire.BackgroundWorker.Options (Settings (..))
6968
import Wire.BrigAPIAccess.Rpc
7069
import Wire.ClientSubsystem.Error (ClientError)
7170
import Wire.CodeStore.Cassandra (interpretCodeStoreToCassandra)
@@ -230,12 +229,12 @@ dispatchJob job = do
230229
. runInputConst @(FeatureDefaults LegalholdConfig) FeatureLegalHoldDisabledPermanently
231230
. runInputConst @ClientState env.cassandraGalley
232231
. runInputConst @LegalHoldEnv legalHoldEnv
233-
. runInputConst @ExposeInvitationURLsAllowlist (ExposeInvitationURLsAllowlist $ fromMaybe [] env.settings.exposeInvitationURLsTeamAllowlist)
232+
. runInputConst @ExposeInvitationURLsAllowlist (ExposeInvitationURLsAllowlist $ fromMaybe [] env.exposeInvitationURLsTeamAllowlist)
234233
. runInputConst @(Either HttpsUrl (Map Text HttpsUrl)) env.convCodeURI
235-
. runInputConst @IntraListing (IntraListing env.settings.intraListing)
236-
. runInputConst @(Maybe GroupInfoCheckEnabled) (GroupInfoCheckEnabled <$> env.settings.checkGroupInfo)
237-
. runInputConst @(Maybe GuestLinkTTLSeconds) env.settings.guestLinkTTLSeconds
238-
. runInputConst @FanoutLimit (currentFanoutLimit env.settings.maxTeamSize env.settings.maxFanoutSize)
234+
. runInputConst @IntraListing (IntraListing env.intraListing)
235+
. runInputConst @(Maybe GroupInfoCheckEnabled) (GroupInfoCheckEnabled <$> env.checkGroupInfo)
236+
. runInputConst @(Maybe GuestLinkTTLSeconds) env.guestLinkTTLSeconds
237+
. runInputConst @FanoutLimit (currentFanoutLimit env.maxTeamSize env.maxFanoutSize)
239238
. interpretMLSCommitLockStoreToCassandra env.cassandraGalley
240239
. interpretProposalStoreToCassandra
241240
. interpretServiceStoreToCassandra env.cassandraBrig
@@ -262,7 +261,7 @@ dispatchJob job = do
262261
. runInputSem getConversationSubsystemConfig
263262
. runInputSem @(Maybe (MLSKeysByPurpose MLSPrivateKeys)) (inputs @ConversationSubsystemConfig (.mlsKeys))
264263
. runInputSem getConfiguredFeatureFlags
265-
. runHashPassword env.settings.passwordHashingOptions
264+
. runHashPassword env.passwordHashingOptions
266265
. interpretRateLimit env.passwordHashingRateLimitEnv
267266
. convCodesStoreInterpreter
268267
. interpretExternalAccess extEnv

services/background-worker/src/Wire/BackgroundWorker/Options.hs

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,22 +18,16 @@
1818
module Wire.BackgroundWorker.Options where
1919

2020
import Data.Aeson
21-
import Data.Domain (Domain)
22-
import Data.Id (TeamId)
2321
import Data.Misc
2422
import Data.Range (Range)
2523
import GHC.Generics
2624
import Hasql.Pool.Extended
2725
import Imports
2826
import Network.AMQP.Extended
29-
import System.Logger.Extended hiding (Settings)
27+
import System.Logger.Extended
3028
import Util.Options
31-
import Wire.API.Conversation.Protocol (ProtocolTag)
32-
import Wire.API.Team.FeatureFlags (FanoutLimit)
3329
import Wire.Migration
34-
import Wire.Options.Galley (GuestLinkTTLSeconds)
3530
import Wire.PostgresMigrationOpts
36-
import Wire.RateLimit.Interpreter (RateLimitConfig)
3731

3832
data Opts = Opts
3933
{ logLevel :: !Level,
@@ -56,30 +50,11 @@ data Opts = Opts
5650
migrateConversationsOptions :: !MigrationOptions,
5751
migrateConversationCodes :: !Bool,
5852
migrateTeamFeatures :: !Bool,
59-
backgroundJobs :: BackgroundJobsConfig,
60-
federationDomain :: Domain,
61-
settings :: !Settings
53+
backgroundJobs :: BackgroundJobsConfig
6254
}
6355
deriving (Show, Generic)
6456
deriving (FromJSON) via Generically Opts
6557

66-
data Settings = Settings
67-
{ maxTeamSize :: !Word32,
68-
maxFanoutSize :: !(Maybe FanoutLimit),
69-
exposeInvitationURLsTeamAllowlist :: !(Maybe [TeamId]),
70-
maxConvSize :: !Word16,
71-
intraListing :: !Bool,
72-
conversationCodeURI :: !(Maybe HttpsUrl),
73-
multiIngress :: !(Maybe (Map Text HttpsUrl)),
74-
federationProtocols :: !(Maybe [ProtocolTag]),
75-
guestLinkTTLSeconds :: !(Maybe GuestLinkTTLSeconds),
76-
passwordHashingOptions :: !PasswordHashingOptions,
77-
passwordHashingRateLimit :: !RateLimitConfig,
78-
checkGroupInfo :: !(Maybe Bool)
79-
}
80-
deriving (Show, Generic)
81-
deriving (FromJSON) via Generically Settings
82-
8358
data BackendNotificationsConfig = BackendNotificationsConfig
8459
{ -- | Minimum amount of time (in microseconds) to wait before doing the first
8560
-- retry in pushing a notification. Futher retries are done in a jittered

services/background-worker/test/Test/Wire/BackendNotificationPusherSpec.hs

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -372,22 +372,16 @@ spec = do
372372
brigEndpoint = undefined
373373
sparEndpoint = undefined
374374
galleyEndpoint = undefined
375-
settings =
376-
Settings
377-
{ maxTeamSize = 1000,
378-
maxFanoutSize = Nothing,
379-
exposeInvitationURLsTeamAllowlist = Nothing,
380-
maxConvSize = 1000,
381-
intraListing = True,
382-
conversationCodeURI = Nothing,
383-
multiIngress = Nothing,
384-
federationProtocols = Nothing,
385-
guestLinkTTLSeconds = Nothing,
386-
passwordHashingOptions = undefined,
387-
passwordHashingRateLimit = undefined,
388-
checkGroupInfo = Nothing
389-
}
375+
maxTeamSize = 1000
376+
maxFanoutSize = Nothing
377+
exposeInvitationURLsTeamAllowlist = Nothing
378+
intraListing = True
379+
federationProtocols = Nothing
380+
guestLinkTTLSeconds = Nothing
381+
passwordHashingOptions = undefined
382+
checkGroupInfo = Nothing
390383
convCodeURI = Left (fromRight (error "Failed to parse test HttpsUrl") $ httpsUrlFromText "https://localhost")
384+
391385
passwordHashingRateLimitEnv <- newRateLimitEnv undefined
392386
backendNotificationMetrics <- mkBackendNotificationMetrics
393387
workerRunningGauge <- mkWorkerRunningGauge
@@ -429,22 +423,16 @@ spec = do
429423
brigEndpoint = undefined
430424
sparEndpoint = undefined
431425
galleyEndpoint = undefined
432-
settings =
433-
Settings
434-
{ maxTeamSize = 1000,
435-
maxFanoutSize = Nothing,
436-
exposeInvitationURLsTeamAllowlist = Nothing,
437-
maxConvSize = 1000,
438-
intraListing = True,
439-
conversationCodeURI = Nothing,
440-
multiIngress = Nothing,
441-
federationProtocols = Nothing,
442-
guestLinkTTLSeconds = Nothing,
443-
passwordHashingOptions = undefined,
444-
passwordHashingRateLimit = undefined,
445-
checkGroupInfo = Nothing
446-
}
426+
maxTeamSize = 1000
427+
maxFanoutSize = Nothing
428+
exposeInvitationURLsTeamAllowlist = Nothing
429+
intraListing = True
430+
federationProtocols = Nothing
431+
guestLinkTTLSeconds = Nothing
432+
passwordHashingOptions = undefined
433+
checkGroupInfo = Nothing
447434
convCodeURI = Left (fromRight (error "Failed to parse test HttpsUrl") $ httpsUrlFromText "https://localhost")
435+
448436
passwordHashingRateLimitEnv <- newRateLimitEnv undefined
449437
backendNotificationMetrics <- mkBackendNotificationMetrics
450438
workerRunningGauge <- mkWorkerRunningGauge

services/background-worker/test/Test/Wire/Util.hs

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -69,21 +69,14 @@ testEnv = do
6969
brigEndpoint = undefined
7070
sparEndpoint = Endpoint "localhost" 0
7171
galleyEndpoint = undefined
72-
settings =
73-
Settings
74-
{ maxTeamSize = 1000,
75-
maxFanoutSize = Nothing,
76-
exposeInvitationURLsTeamAllowlist = Nothing,
77-
maxConvSize = 1000,
78-
intraListing = True,
79-
conversationCodeURI = Nothing,
80-
multiIngress = Nothing,
81-
federationProtocols = Nothing,
82-
guestLinkTTLSeconds = Nothing,
83-
passwordHashingOptions = undefined,
84-
passwordHashingRateLimit = undefined,
85-
checkGroupInfo = Nothing
86-
}
72+
maxTeamSize = 1000
73+
maxFanoutSize = Nothing
74+
exposeInvitationURLsTeamAllowlist = Nothing
75+
intraListing = True
76+
federationProtocols = Nothing
77+
guestLinkTTLSeconds = Nothing
78+
passwordHashingOptions = undefined
79+
checkGroupInfo = Nothing
8780
convCodeURI = Left (fromRight (error "Failed to parse test HttpsUrl") $ httpsUrlFromText "https://localhost")
8881
passwordHashingRateLimitEnv <- newRateLimitEnv undefined
8982
pure Env {..}

0 commit comments

Comments
 (0)