dp2 icon indicating copy to clipboard operation
dp2 copied to clipboard

dp2library日志中发现GetOperLogs() 异常情况

Open wuayang001 opened this issue 3 years ago • 1 comments

问题发现:

dp2library服务器初始化之后,打开dp2library下面的log文件,发现:dp2Library GetOperLogs() API出现异常: Type: System.ArgumentException

2022/5/18 0:18:21 馆藏地结果集创建结束 
2022/5/18 8:46:33 警告:有前端请求 GetRes(),希望连带写入存取日志,但 library.xml 中的 object/@writeGetResOperLog 属性值为 false,导致写入存取日志动作被忽略
2022/5/18 17:11:40 LibraryService 开始下降
2022/5/18 17:11:40 LibraryApplication 被停止。停止操作耗费时间 0.0019645 秒
2022/5/18 17:11:55 *********
2022/5/18 17:11:55 LoadCfg() Begin. bReload=False
2022/5/18 17:11:55 INFO: 清除临时文件目录 D:\cloud_data\hnb\library_data\temp
2022/5/18 17:11:55 序列号许可的功能: '' (-下载权限, -PDF预览)
2022/5/18 17:11:55 library (3.117.8173.30159) application 开始初始化。
2022/5/18 17:11:55 INFO: 开始装载 D:\cloud_data\hnb\library_data\library.xml 到 XMLDOM
2022/5/18 17:11:55 INFO: 初始化内存参数
2022/5/18 17:11:55 是否为调试态: False
2022/5/18 17:11:55 INFO: LoadReaderDbGroupParam
2022/5/18 17:11:55 INFO: LoadItemDbGroupParam
2022/5/18 17:11:55 INFO: InitialKdbs
2022/5/18 17:11:55 dp2Library GetOperLogs() API出现异常: Type: System.ArgumentException
Message: 路径的形式不合法。
Stack:
   在 System.IO.Path.NewNormalizePath(String path, Int32 maxPathLength, Boolean expandShortPaths)
   在 System.IO.Path.NormalizePath(String path, Boolean fullCheck, Int32 maxPathLength, Boolean expandShortPaths)
   在 System.IO.Path.GetFullPathInternal(String path)
   在 System.IO.DirectoryInfo.Init(String path, Boolean checkHost)
   在 System.IO.DirectoryInfo..ctor(String path)
   在 DigitalPlatform.LibraryServer.OperLog.GetOperLogs(String strLibraryCodeList, String strFileName, Int64 lIndex, Int64 lHint, Int32 nCount, String strStyle, String strFilter, OperLogInfo[]& records, String& strError)
   在 dp2Library.LibraryService.GetOperLogs(String strFileName, Int64 lIndex, Int64 lHint, Int32 nCount, String strStyle, String strFilter, OperLogInfo[]& records)


2022/5/18 17:11:58 INFO: CheckKernelVersion
2022/5/18 17:11:58 INFO: InitialVdbs
2022/5/18 17:11:59 INFO: 临时 session 使用完毕
2022/5/18 17:11:59 INFO: OperLog.Initial
2022/5/18 17:12:00 INFO: Statis.Initial
2022/5/18 17:12:00 INFO: InitialLibraryHostAssembly
2022/5/18 17:12:03 INFO: InitialExternalMessageInterfaces
2022/5/18 17:12:03 INFO: Message Queue
2022/5/18 17:12:03 INFO: OpenSummaryStorage
2022/5/18 17:12:03 INFO: Open HitCountDatabase
2022/5/18 17:12:03 INFO: Open AccessLogDatabase
2022/5/18 17:12:03 INFO: Open ChargingOperDatabase
2022/5/18 17:12:03 INFO: 准备下属数据库对象
2022/5/18 17:12:03 INFO: MessageCenter
2022/5/18 17:12:03 INFO: DefaultThread
2022/5/18 17:12:03 INFO: OperLogThread
2022/5/18 17:12:03 INFO: ArriveMonitor
2022/5/18 17:12:03 馆藏地结果集创建开始 

wuayang001 avatar May 18 '22 14:05 wuayang001

问题分析:

根据dp2Library GetOperLogs() API出现异常: Type: System.ArgumentException这个报错,可以看出是前端获取操作日志时失败了。

WYC补:dp2library错误日志中有异常,getoperlog异常,这是某一个前端获得日志,为什么要获得日志?因为人脸中心或指纹中心同步信息,“INFO:operlog.Initial”这是dp2library实例再启动,而getoperlog出现异常这个时间点是在operlong.initial之前,这说明开发的dp2library程序开始初始化的时候多少秒钟,这个operlog初始化以前,前端抢先来用它了。就是在初始化之前有个前端发送了获得操作日志的请求,这时服务器初始化了,如过异常是借书还书,那就失败了,而且这个“借”是不会回滚的,不会ulldo。这个getoperlog是个幂等的操作,就是失败再去做一次。猜测是指纹,人脸这两个个模块。故意造一个环境,正好在启动的时候开着人脸中心同步访问它的时候就报这种错。 改进方式:在系统启动到正真就绪以前,让API把它封锁掉。

根本原因: 前端向服务器发起了获取操作日志的请求,而这之后服务器重新初始化了,那么就导致了GetOperLogs() API出现异常。

产生因素(需测试跟进)

  1. 用户通过内务窗获取操作日志时,服务器重新初始化了
  2. 前端模块(指纹中心、人脸中心、掌纹中心)自动获取操作日志时,服务器重新初始化了。

服务器初始化原因

  1. 服务器升级了,会自动初始化
  2. 维护时人工手动重启了服务器
  3. dp2library service因某些原因停止掉了,而根据属性页的【重新启动服务】,服务自动重启了

总结

  1. 获取操作日志的动作属于“幂等”动作。不会对服务器数据产生影响,但是如果在这过程中出现了借还等操作,那么因为服务器初始化了,这个事情就会变的很麻烦,所以尽量不要在白天和工作日重启服务器。不为服务器维护带来麻烦。
  2. 经语音讨论后,发现这里还要改进下,当服务器初始化的时候会将API关闭。后续需测试跟进

wuayang001 avatar May 18 '22 14:05 wuayang001