This commit is contained in:
voidlizard 2025-07-13 09:04:56 +03:00
parent 2f77530e60
commit 263347f9fc
1 changed files with 13 additions and 7 deletions

View File

@ -388,7 +388,7 @@ ncqStorageRun2 ncq@NCQStorage2{..} = flip runContT pure do
closeFd fh
-- notice $ yellow "indexing" <+> pretty fname
idx <- ncqRunTaskNoMatterWhat ncq (ncqIndexFile ncq (DataFile fk))
ncqStateUpdate ncq [F 0 fk]
ncqRunTaskNoMatterWhat ncq $ ncqStateUpdate ncq [F 0 fk]
-- ncqAddTrackedFile ncq (DataFile fk)
nwayHashMMapReadOnly idx >>= \case
Nothing -> err $ "can't open index" <+> pretty idx
@ -412,7 +412,8 @@ ncqStorageRun2 ncq@NCQStorage2{..} = flip runContT pure do
mq <- newEmptyTMVarIO
spawnJob $ do
merged <- ncqStorageMergeStep ncq
-- merged <- ncqStorageMergeStep ncq
let merged = True
atomically $ putTMVar mq merged
-- TODO: detect-dead-merge
@ -457,6 +458,8 @@ ncqStorageRun2 ncq@NCQStorage2{..} = flip runContT pure do
pure w
else do
appendTailSection fh >> liftIO (fileSynchronise fh)
-- FIXME: slow!
liftIO (ncqStateUpdate ncq [F 0 fk])
atomically do
writeTVar ncqStorageSyncReq False
modifyTVar' ncqSyncNo succ
@ -758,16 +761,17 @@ ncqStateUpdate :: MonadUnliftIO m => NCQStorage2 -> [StateOP] -> m Bool
ncqStateUpdate me@NCQStorage2{..} ops' = flip runContT pure $ callCC \exit -> do
t1 <- fromIntegral <$> liftIO getTimeCoarse
keys0 <- readTVarIO ncqTrackedFiles <&> HPSQ.keys
ops <- for ops' $ \case
f@(F _ fk) -> do
let idxFile = ncqGetFileName me (toFileName $ IndexFile fk)
-- let idxFile = ncqGetFileName me (toFileName $ IndexFile fk)
let datFile = ncqGetFileName me (toFileName $ DataFile fk)
e1 <- doesFileExist idxFile
e2 <- doesFileExist datFile
unless (e1 && e2) do
err $ "ncqStateUpdate invariant fail" <+> pretty idxFile <+> pretty datFile
unless e2 do
err $ "ncqStateUpdate invariant fail" <+> pretty datFile
exit False
ts <- liftIO (getFileStatus datFile) <&>
@ -798,7 +802,9 @@ ncqStateUpdate me@NCQStorage2{..} ops' = flip runContT pure $ callCC \exit -> do
modifyTVar' ncqStateUsage (IntMap.alter doAlter k0)
pure c
k1 <- readTVar ncqTrackedFiles <&> HPSQ.keys
pure (c && k1 /= keys0)
when changed (lift $ ncqDumpCurrentState me)