convert Key to ShortByteString
This adds the overhead of a copy when serializing and deserializing keys. I have not benchmarked much, but runtimes seem barely changed at all by that. When a lot of keys are in memory, it improves memory use. And, it prevents keys sometimes getting PINNED in memory and failing to GC, which is a problem ByteString has sometimes. In particular, git-annex sync from a borg special remote had that problem and this improved its memory use by a large amount. Sponsored-by: Shae Erisson on Patreon
This commit is contained in:
parent
012b71e471
commit
19e78816f0
15 changed files with 65 additions and 36 deletions
|
@ -47,6 +47,7 @@ import Types.Crypto
|
|||
import Types.Remote
|
||||
import Types.Key
|
||||
import Annex.SpecialRemote.Config
|
||||
import qualified Data.ByteString.Short as S (toShort)
|
||||
|
||||
{- The beginning of a Cipher is used for MAC'ing; the remainder is used
|
||||
- as the GPG symmetric encryption passphrase when using the hybrid
|
||||
|
@ -163,7 +164,7 @@ type EncKey = Key -> Key
|
|||
- on content. It does need to be repeatable. -}
|
||||
encryptKey :: Mac -> Cipher -> EncKey
|
||||
encryptKey mac c k = mkKey $ \d -> d
|
||||
{ keyName = encodeBS (macWithCipher mac c (serializeKey k))
|
||||
{ keyName = S.toShort $ encodeBS $ macWithCipher mac c (serializeKey k)
|
||||
, keyVariety = OtherKey $
|
||||
encryptedBackendNamePrefix <> encodeBS (showMac mac)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue