glean-0.1.0.0: glean/hs/Glean/Backend/Retry.hs
{-
Copyright (c) Meta Platforms, Inc. and affiliates.
All rights reserved.
This source code is licensed under the BSD-style license found in the
LICENSE file in the root directory of this source tree.
-}
module Glean.Backend.Retry
( RetryWritesBackend(..)
, backendRetryWrites
, RetryReadsBackend(..)
, backendRetryReads
) where
import Glean.Backend.Types
import Glean.Util.RetryChannelException
import Glean.Util.Some
data RetryWritesBackend = RetryWritesBackend RetryPolicy (Some Backend)
-- | Make a 'Backend' that will retry all write-related operations
-- according to the given 'RetryPolicy'
backendRetryWrites :: Backend b => b -> RetryPolicy -> RetryWritesBackend
backendRetryWrites backend policy = RetryWritesBackend policy (Some backend)
instance Backend RetryWritesBackend where
queryFact (RetryWritesBackend _ backend) = queryFact backend
factIdRange (RetryWritesBackend _ backend) = factIdRange backend
getSchemaInfo (RetryWritesBackend _ backend) = getSchemaInfo backend
validateSchema (RetryWritesBackend _ backend) = validateSchema backend
predicateStats (RetryWritesBackend _ backend) = predicateStats backend
listDatabases (RetryWritesBackend _ backend) = listDatabases backend
getDatabase (RetryWritesBackend _ backend) = getDatabase backend
userQueryFacts (RetryWritesBackend _ backend) = userQueryFacts backend
userQuery (RetryWritesBackend _ backend) = userQuery backend
userQueryBatch (RetryWritesBackend _ backend) = userQueryBatch backend
deriveStored (RetryWritesBackend _ backend) = deriveStored backend
kickOffDatabase (RetryWritesBackend policy backend) kickOff =
retryChannelExceptions policy $ kickOffDatabase backend kickOff
finishDatabase (RetryWritesBackend policy backend) repo =
retryChannelExceptions policy $ finishDatabase backend repo
finalizeDatabase (RetryWritesBackend policy backend) repo =
retryChannelExceptions policy $ finalizeDatabase backend repo
updateProperties (RetryWritesBackend policy backend) repo props vals =
retryChannelExceptions policy $ updateProperties backend repo props vals
completePredicates_ (RetryWritesBackend policy backend) repo preds =
retryChannelExceptions policy $ completePredicates_ backend repo preds
restoreDatabase (RetryWritesBackend _ backend) = restoreDatabase backend
deleteDatabase (RetryWritesBackend _ backend) = deleteDatabase backend
enqueueBatch (RetryWritesBackend policy backend) batch =
retryChannelExceptions policy $ enqueueBatch backend batch
enqueueJsonBatch (RetryWritesBackend policy backend) repo batch =
retryChannelExceptions policy $ enqueueJsonBatch backend repo batch
enqueueBatchDescriptor (RetryWritesBackend policy backend)
repo batch waitPolicy =
retryChannelExceptions policy
$ enqueueBatchDescriptor backend repo batch waitPolicy
pollBatch (RetryWritesBackend policy backend) handle =
retryChannelExceptions policy $ pollBatch backend handle
displayBackend (RetryWritesBackend _ backend) = displayBackend backend
hasDatabase (RetryWritesBackend _ backend) = hasDatabase backend
schemaId (RetryWritesBackend _ backend) = schemaId backend
usingShards (RetryWritesBackend _ backend) = usingShards backend
initGlobalState (RetryWritesBackend _ backend) = initGlobalState backend
data RetryReadsBackend = RetryReadsBackend RetryPolicy (Some Backend)
-- | Make a 'Backend' that will retry all read-related operations
-- according to the given 'RetryPolicy'
backendRetryReads :: Backend b => b -> RetryPolicy -> RetryReadsBackend
backendRetryReads backend policy = RetryReadsBackend policy (Some backend)
instance Backend RetryReadsBackend where
queryFact (RetryReadsBackend policy backend) repo id =
retryChannelExceptions policy $ queryFact backend repo id
factIdRange (RetryReadsBackend policy backend) repo =
retryChannelExceptions policy $ factIdRange backend repo
getSchemaInfo (RetryReadsBackend policy backend) repo opts =
retryChannelExceptions policy $ getSchemaInfo backend repo opts
validateSchema (RetryReadsBackend policy backend) req =
retryChannelExceptions policy $ validateSchema backend req
predicateStats (RetryReadsBackend policy backend) repo opts =
retryChannelExceptions policy $ predicateStats backend repo opts
listDatabases (RetryReadsBackend policy backend) req =
retryChannelExceptions policy $ listDatabases backend req
getDatabase (RetryReadsBackend policy backend) repo =
retryChannelExceptions policy $ getDatabase backend repo
userQueryFacts (RetryReadsBackend policy backend) repo req =
retryChannelExceptions policy $ userQueryFacts backend repo req
userQuery (RetryReadsBackend policy backend) repo req =
retryChannelExceptions policy $ userQuery backend repo req
userQueryBatch (RetryReadsBackend policy backend) repo req =
retryChannelExceptions policy $ userQueryBatch backend repo req
deriveStored (RetryReadsBackend _ backend) = deriveStored backend
kickOffDatabase (RetryReadsBackend _ backend) = kickOffDatabase backend
finishDatabase (RetryReadsBackend _ backend) = finishDatabase backend
finalizeDatabase (RetryReadsBackend _ backend) = finalizeDatabase backend
updateProperties (RetryReadsBackend _ backend) = updateProperties backend
completePredicates_ (RetryReadsBackend _ backend) =
completePredicates_ backend
restoreDatabase (RetryReadsBackend _ backend) = restoreDatabase backend
deleteDatabase (RetryReadsBackend _ backend) = deleteDatabase backend
enqueueBatch (RetryReadsBackend _ backend) = enqueueBatch backend
enqueueJsonBatch (RetryReadsBackend _ backend) = enqueueJsonBatch backend
enqueueBatchDescriptor (RetryReadsBackend _ backend) =
enqueueBatchDescriptor backend
pollBatch (RetryReadsBackend _ backend) = pollBatch backend
displayBackend (RetryReadsBackend _ backend) = displayBackend backend
hasDatabase (RetryReadsBackend _ backend) = hasDatabase backend
schemaId (RetryReadsBackend _ backend) = schemaId backend
usingShards (RetryReadsBackend _ backend) = usingShards backend
initGlobalState (RetryReadsBackend _ backend) = initGlobalState backend