Closed Clownsw closed 2 months ago
与 #85 类似
确认几个点:
我平时开发没怎么用windows,之前自己没有遇到过这个问题。我晚点抽空在windows试试能不能复现。
r-nacos数据是写入本地文件存储的,为了平衡性能写入后不会马上flush,而是通过定时间隔0.5秒统一写入。
服务关闭后,系统也会把缴存区的数据flush,这部分的功能和不同系统内核有关。
如果方便的话,可以按你在windows重启的方式在linux服务测试几遍,看看两个系统的表现是不是一致?
如果方便的话,可以按你在windows重启的方式在linux服务测试几遍,看看两个系统的表现是不是一致?
Linux容器倒是没这个问题
确认几个点:
- 重启过程关闭和启动间隔是不是很短?
- 重启之后,查看数据与启动时间间隔大概多长时间?
- 出现配置为空之后,过一段时间之后能查到数据吗?还是需要重启之后才能恢复?
- 出问题前,重启之前的数据量多吗?
我平时开发没怎么用windows,之前自己没有遇到过这个问题。我晚点抽空在windows试试能不能复现。
r-nacos数据是写入本地文件存储的,为了平衡性能写入后不会马上flush,而是通过定时间隔0.5秒统一写入。
服务关闭后,系统也会把缴存区的数据flush,这部分的功能和不同系统内核有关。
确认几个点:
- 重启过程关闭和启动间隔是不是很短?
- 重启之后,查看数据与启动时间间隔大概多长时间?
- 出现配置为空之后,过一段时间之后能查到数据吗?还是需要重启之后才能恢复?
- 出问题前,重启之前的数据量多吗?
我平时开发没怎么用windows,之前自己没有遇到过这个问题。我晚点抽空在windows试试能不能复现。
r-nacos数据是写入本地文件存储的,为了平衡性能写入后不会马上flush,而是通过定时间隔0.5秒统一写入。
服务关闭后,系统也会把缴存区的数据flush,这部分的功能和不同系统内核有关。
这个是一种假象(因为并没有数据变更, 只是重启出现 和 不出现), 就像启动后读取数据失败
收到,看来我得先到windows系统尝试复现确认问题。
此问题已复现并在v0.5.15解决。
其原因是:在windows环境下关闭进程后快速打开,第二次启动时可能因为第一资关闭的文件没有完全释放,导致第二次进程没能加载历史数据(数据列表为空白);重启后可以数据能重新加载恢复。
解决方案:主动引入文件锁(一个放到nacos_db目录的空文件);进程启动时先获取文件锁,如果获取不到则直接报错退出;应用应用退出时自动释放文件锁。
引入文件机制锁后,按之前的方式操作没有再出现这个现象,就当做这个问题已处理。
反复重启(停止 -> 开启)
r-nacos
, 配置、用户全部丢失假象(回到默认状态), 非连续性触发了十次有个五六次 (windows) r-nacos:0.5.7
(配置文件默认)