mirror of https://github.com/voidlizard/hbs2
wip
This commit is contained in:
parent
4249f98444
commit
191bdbcf25
|
@ -4,3 +4,31 @@ FIXME: poll-fixme-refchans
|
||||||
|
|
||||||
Сейчас не обновляются
|
Сейчас не обновляются
|
||||||
|
|
||||||
|
FIXME: commit-cache-inconsistency
|
||||||
|
|
||||||
|
Встретилась ситуация, когда commit помечен, как processed, но не все блобы
|
||||||
|
из него попали в кэш.
|
||||||
|
|
||||||
|
Похожие ситуации возникают и в hbs2-git.
|
||||||
|
|
||||||
|
Похоже, надо как-то инвертировать подход: когда искомые данные
|
||||||
|
встречаются в кэше --- отдаём из него, а когда нет --- ищем
|
||||||
|
в источнике (рефчане, дереве, репозитории).
|
||||||
|
|
||||||
|
Значит, в этих источниках должен быть некий индекс.
|
||||||
|
|
||||||
|
В git он есть.
|
||||||
|
|
||||||
|
В hbs2-git он вроде бы тоже есть.
|
||||||
|
|
||||||
|
Возможно, это будет незначительно медленнее при выдаче,
|
||||||
|
но сильно быстрее при индексации и система будет, типа,
|
||||||
|
самовосстанавливающаяся.
|
||||||
|
|
||||||
|
Возможно, это приведёт к тому, что все схемы выродятся
|
||||||
|
в таблицу "object", для ускорения доступа к которой
|
||||||
|
будут создаваться индексные таблицы (aka materialized view)
|
||||||
|
на её же основе только средствами sqlite.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -641,6 +641,7 @@ theDict = do
|
||||||
|
|
||||||
_ -> throwIO $ BadFormException @C nil
|
_ -> throwIO $ BadFormException @C nil
|
||||||
|
|
||||||
|
|
||||||
developAssetsEntry = do
|
developAssetsEntry = do
|
||||||
entry $ bindMatch "develop-assets" $ nil_ \case
|
entry $ bindMatch "develop-assets" $ nil_ \case
|
||||||
[StringLike s] -> do
|
[StringLike s] -> do
|
||||||
|
@ -668,6 +669,15 @@ theDict = do
|
||||||
-- TODO: ASAP-hide-debug-functions-from-help
|
-- TODO: ASAP-hide-debug-functions-from-help
|
||||||
|
|
||||||
debugEntries = do
|
debugEntries = do
|
||||||
|
|
||||||
|
entry $ bindMatch "debug:cache:ignore:on" $ nil_ $ const $ lift do
|
||||||
|
t <- asks _dashBoardIndexIgnoreCaches
|
||||||
|
atomically $ writeTVar t True
|
||||||
|
|
||||||
|
entry $ bindMatch "debug:cache:ignore:off" $ nil_ $ const $ lift do
|
||||||
|
t <- asks _dashBoardIndexIgnoreCaches
|
||||||
|
atomically $ writeTVar t False
|
||||||
|
|
||||||
entry $ bindMatch "debug:select-repo-fixme" $ nil_ $ const $ lift do
|
entry $ bindMatch "debug:select-repo-fixme" $ nil_ $ const $ lift do
|
||||||
rs <- selectRepoFixme
|
rs <- selectRepoFixme
|
||||||
for_ rs $ \(r,f) -> do
|
for_ rs $ \(r,f) -> do
|
||||||
|
|
|
@ -81,9 +81,9 @@ updateIndexFromPeer = do
|
||||||
Right hxs -> do
|
Right hxs -> do
|
||||||
for_ hxs $ \htx -> void $ runMaybeT do
|
for_ hxs $ \htx -> void $ runMaybeT do
|
||||||
|
|
||||||
done <- lift $ withState $ isProcessed (HashRef $ hashObject @HbSync (serialise (lw,htx)))
|
-- done <- lift $ withState $ isProcessed (HashRef $ hashObject @HbSync (serialise (lw,htx)))
|
||||||
|
|
||||||
guard (not done)
|
-- guard (not done)
|
||||||
|
|
||||||
getBlock sto (fromHashRef htx) >>= toMPlus
|
getBlock sto (fromHashRef htx) >>= toMPlus
|
||||||
<&> deserialiseOrFail @(RefLogUpdate L4Proto)
|
<&> deserialiseOrFail @(RefLogUpdate L4Proto)
|
||||||
|
@ -105,11 +105,13 @@ updateIndexFromPeer = do
|
||||||
let rlwwseq = RepoLwwSeq (fromIntegral $ lwwSeq wv)
|
let rlwwseq = RepoLwwSeq (fromIntegral $ lwwSeq wv)
|
||||||
insertRepoHead l rlwwseq (RepoRefLog rk) tx rh rhead
|
insertRepoHead l rlwwseq (RepoRefLog rk) tx rh rhead
|
||||||
|
|
||||||
insertProcessed (HashRef $ hashObject @HbSync (serialise (l,coerce @_ @HashRef tx)))
|
-- insertProcessed (HashRef $ hashObject @HbSync (serialise (l,coerce @_ @HashRef tx)))
|
||||||
|
|
||||||
for_ fme $ \f -> do
|
for_ fme $ \f -> do
|
||||||
insertRepoFixme l rlwwseq f
|
insertRepoFixme l rlwwseq f
|
||||||
|
|
||||||
|
buildCommitTreeIndex (coerce lw)
|
||||||
|
|
||||||
fxe <- selectRepoFixme
|
fxe <- selectRepoFixme
|
||||||
|
|
||||||
for_ fxe $ \(r,f) -> do
|
for_ fxe $ \(r,f) -> do
|
||||||
|
@ -119,3 +121,4 @@ updateIndexFromPeer = do
|
||||||
addJob (withDashBoardEnv env $ updateFixmeFor r f)
|
addJob (withDashBoardEnv env $ updateFixmeFor r f)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,7 @@ data DashBoardEnv =
|
||||||
, _pipeline :: TQueue (IO ())
|
, _pipeline :: TQueue (IO ())
|
||||||
, _dashBoardHttpPort :: TVar (Maybe Word16)
|
, _dashBoardHttpPort :: TVar (Maybe Word16)
|
||||||
, _dashBoardDevAssets :: TVar (Maybe FilePath)
|
, _dashBoardDevAssets :: TVar (Maybe FilePath)
|
||||||
|
, _dashBoardIndexIgnoreCaches :: TVar Bool
|
||||||
}
|
}
|
||||||
|
|
||||||
makeLenses 'DashBoardEnv
|
makeLenses 'DashBoardEnv
|
||||||
|
@ -94,6 +95,7 @@ newDashBoardEnv ddir peer rlog rchan lww sto = do
|
||||||
<*> newTQueueIO
|
<*> newTQueueIO
|
||||||
<*> newTVarIO (Just 8911)
|
<*> newTVarIO (Just 8911)
|
||||||
<*> newTVarIO Nothing
|
<*> newTVarIO Nothing
|
||||||
|
<*> newTVarIO False
|
||||||
|
|
||||||
getHttpPortNumber :: (MonadIO m, MonadReader DashBoardEnv m, Integral a) => m a
|
getHttpPortNumber :: (MonadIO m, MonadReader DashBoardEnv m, Integral a) => m a
|
||||||
getHttpPortNumber = do
|
getHttpPortNumber = do
|
||||||
|
@ -106,6 +108,12 @@ getDevAssets = do
|
||||||
asks _dashBoardDevAssets
|
asks _dashBoardDevAssets
|
||||||
>>= readTVarIO
|
>>= readTVarIO
|
||||||
|
|
||||||
|
|
||||||
|
getIgnoreCaches :: (MonadIO m, MonadReader DashBoardEnv m, Integral a) => m Bool
|
||||||
|
getIgnoreCaches = do
|
||||||
|
asks _dashBoardIndexIgnoreCaches
|
||||||
|
>>= readTVarIO
|
||||||
|
|
||||||
withDashBoardEnv :: Monad m => DashBoardEnv -> DashBoardM m a -> m a
|
withDashBoardEnv :: Monad m => DashBoardEnv -> DashBoardM m a -> m a
|
||||||
withDashBoardEnv env m = runReaderT (fromDashBoardM m) env
|
withDashBoardEnv env m = runReaderT (fromDashBoardM m) env
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue