首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在快照关闭时运行清理

如何在快照关闭时运行清理
EN

Stack Overflow用户
提问于 2019-06-01 00:04:09
回答 2查看 93关注 0票数 2

我和serversession-frontend-snap一起使用serversession-backend-acid-state进行会话。

如果我使用内存版本的acid-state运行,一切工作正常:

代码语言:javascript
复制
-- create state container in memory from initial state
acidMem :: IO (AcidStorage SessionMap)
acidMem = AcidStorage <$> openMemoryState emptyState

app :: SnapletInit App App
app = makeSnaplet "app" "An snaplet example application." Nothing $ do
  conf <- getSnapletUserConfig
  h <- nestSnaplet "" heist $ heistInit "templates"
  s <- nestSnaplet "sess"sess $ SS.simpleServerSessionManager acidDisk id

通过使用以下命令,我可以成功地使用acid-state的磁盘版本:

代码语言:javascript
复制
acidDisk :: IO (AcidStorage SessionMap)
acidDisk = AcidStorage <$> openLocalState emptyState

当我关闭snap时,我的问题出现了;我不知道在哪里可以通过(createCheckpointAndClose . acidState)正确地关闭acid-state。如果没有正确的关机,我将在重新启动快照时出现错误。

我在Main.hs中看到了cleanup函数,但我不明白如何使用它来关闭acid状态。解决这一问题的最佳方法是什么?

编辑:我发现了onUnload,但不能用它包装simpleServerSessionManager。

编辑#2:我已经确定了如何使用onUnload让它与acidDisk一起工作:

代码语言:javascript
复制
    ad <- liftIO $ fmap opts . createState =<< acidDisk
    s <- nestSnaplet "sess"sess $ 
        SS.initServerSessionManager (return ad)
    onUnload (createCheckpointAndClose $ acidState $ storage ad)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-05 08:41:27

作为参考,我通过获取对酸状态的引用来解决它,然后使用onUnload关闭它:

代码语言:javascript
复制
acidDisk :: IO (AcidStorage SessionMap)
acidDisk = AcidStorage <$> openLocalState emptyState

app :: SnapletInit App App
app = makeSnaplet "app" "An snaplet example application." Nothing $ do
  conf <- getSnapletUserConfig
  h <- nestSnaplet "" heist $ heistInit "templates"

  ad <- liftIO $ fmap opts . createState =<< acidDisk
  s <- nestSnaplet "sess"sess $ 
        SS.initServerSessionManager (return ad)
  onUnload (createCheckpointAndClose $ acidState $ storage ad)
票数 0
EN

Stack Overflow用户

发布于 2019-06-04 14:53:49

如何关闭服务器?如果是通过终止进程,则需要捕获ThreadKilled和/或UserInterrupt异常,如here文档所示

(Snap似乎没有“在强制关闭的情况下”挂钩,也不是它的义务)

否则,您将不得不添加检查点指令作为任何关闭过程的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56398413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档