minor speedup

This commit is contained in:
Dmitry Zuikov 2023-09-27 10:26:27 +03:00
parent a3a5cf8f7f
commit e22834f0f2
4 changed files with 20 additions and 25 deletions

View File

@ -177,19 +177,6 @@ instance NonceFrom SK.Nonce BS.ByteString where
$ BS.take typicalNonceLength $ BS.take typicalNonceLength
$ bs <> BS.replicate typicalNonceLength 0 $ bs <> BS.replicate typicalNonceLength 0
-- Раз уж такое, то будем писать метаинформацию
-- В блок #0,
-- А HashRef#1 - будет ссылка на групповой ключ
-- Таким образом, мы обеспечим прозрачное скачивание
-- блоков, не будем экспонировать лишнюю метаинформацию,
-- но вместе с тем раздуваем количество раундтрипов,
-- это вообще касается такого способа сохранения
-- Merkle Tree.
-- Но накладные расходны не так велики, упрощается
-- сборка мусора, упрощается код. Нам не надо делать
-- специальную обработку на каждый тип данных,
-- достаточно иметь [HashRef].
instance ( MonadIO m instance ( MonadIO m
, MonadError OperationError m , MonadError OperationError m
, Storage sto h ByteString m , Storage sto h ByteString m

View File

@ -47,6 +47,7 @@ readChunked handle size = fuu
S.yield chunk S.yield chunk
next next
-- TODO: sparse-merkle-tree-representation -- TODO: sparse-merkle-tree-representation
-- Блоки пишутся таким образом потому, -- Блоки пишутся таким образом потому,
-- что хотелось, что бы листы являлись частями -- что хотелось, что бы листы являлись частями

View File

@ -39,6 +39,8 @@ import Data.ByteString.Char8 qualified as BS8
import Data.ByteString.Lazy (ByteString) import Data.ByteString.Lazy (ByteString)
import Data.ByteString.Lazy qualified as LBS import Data.ByteString.Lazy qualified as LBS
import Data.ByteString qualified as BS import Data.ByteString qualified as BS
import Data.ByteArray.Hash (SipHash(..), SipKey(..))
import Data.ByteArray.Hash qualified as BA
import Data.Either import Data.Either
import Data.Function import Data.Function
import Data.Functor import Data.Functor
@ -56,6 +58,7 @@ import System.Exit qualified as Exit
import System.IO qualified as IO import System.IO qualified as IO
import System.IO.Temp (emptySystemTempFile) import System.IO.Temp (emptySystemTempFile)
import UnliftIO import UnliftIO
import Network.ByteOrder qualified as N
tracePrefix :: SetLoggerEntry tracePrefix :: SetLoggerEntry
@ -318,7 +321,6 @@ runStore opts ss = runResourceT do
(liftIO . removeFile) (liftIO . removeFile)
SB.writeFile fn (SB.fromHandle stdin) SB.writeFile fn (SB.fromHandle stdin)
debug $ "It worked out!" <+> pretty fn
pure fn pure fn
maybe (pure stdin) (flip openFile ReadMode . unOptFile) fname maybe (pure stdin) (flip openFile ReadMode . unOptFile) fname
@ -364,21 +366,25 @@ runStore opts ss = runResourceT do
gks <- pure (Symm.lookupGroupKey (snd sk) pk gk) `orDie` ("can't find secret key for " <> show (pretty (AsBase58 (fst sk)))) gks <- pure (Symm.lookupGroupKey (snd sk) pk gk) `orDie` ("can't find secret key for " <> show (pretty (AsBase58 (fst sk))))
HbSyncHash nonce <- liftIO $ LBS.readFile inputFile <&> hashObject @HbSync void $ liftIO $ IO.withFile inputFile IO.ReadMode $ \fh -> do
let reader = readChunked fh (fromIntegral defBlockSize)
qqq <- S.toList_ $ reader
& S.map (BA.sipHash (SipKey 2716310006254639645 507093936407764973) . LBS.toStrict)
& S.map \(SipHash w) -> w
debug $ "NONCE FUCKING CALCULATED:" <+> pretty (AsBase58 nonce) let (HbSyncHash nonce) = hashObject @HbSync (serialise qqq)
fh <- liftIO $ IO.openFile inputFile IO.ReadMode IO.hSeek fh IO.AbsoluteSeek 0
let segments = readChunked fh (fromIntegral defBlockSize) let segments = readChunked fh (fromIntegral defBlockSize)
let source = ToEncryptSymmBS gks nonce segments gk let source = ToEncryptSymmBS gks nonce segments gk
r <- runExceptT $ writeAsMerkle ss source r <- runExceptT $ writeAsMerkle ss source
case r of case r of
Left e -> die (show e) Left e -> die (show e)
Right h -> hPrint stdout (pretty h) Right h -> hPrint stdout (pretty h)
Just (EncAsymm gk) -> liftIO $ IO.withFile inputFile IO.ReadMode $ \ha -> do Just (EncAsymm gk) -> liftIO $ IO.withFile inputFile IO.ReadMode $ \ha -> do
@ -516,8 +522,8 @@ main :: IO ()
main = join . customExecParser (prefs showHelpOnError) $ main = join . customExecParser (prefs showHelpOnError) $
info (helper <*> parser) info (helper <*> parser)
( fullDesc ( fullDesc
<> header "hbsync block fetch" <> header "hbs2"
<> progDesc "fetches blocks from hbsync peers" <> progDesc "hbs2 tools"
) )
where where
parser :: Parser (IO ()) parser :: Parser (IO ())

View File

@ -97,6 +97,7 @@ executable hbs2
, terminal-progress-bar , terminal-progress-bar
, stm , stm
, unliftio , unliftio
, network-byte-order
hs-source-dirs: . hs-source-dirs: .
default-language: Haskell2010 default-language: Haskell2010