猫不急

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

通过一个管理端配置流程,在一个agent(来源端)扫描文件,传递到另一个agent(目的端):

 

问题1.来源端文件被占用,不可读

    描述:文件扫描是可以扫描到该文件的,但该文件可能正在写入或者修改,此时会导致读取文件失败,

    解决:约定文件名,如果正在写入的文件应为特别的后缀。准备发送文件前,应获取文件读权限,如果不能获取,则暂时不要进入发送队列。

 

问题2.已进入发送队列的文件被删除

    描述:文件之前已获得了读取权限,但在正式发送的过程中,文件被删除或读取失败。

    解决:若文件不能读,则需要进行延迟发送,重新发送时要比较文件大小或MD5,因为文件可能已经变化了。

             再次重试文件可能,依旧不能读取,此时需要记录错误日志,并停止该文件的发送

 

问题3.目的端文件系统不可写

    描述:文件达到目的端时,文件系统可能已经满了,或者挂载丢失

    解决:应主动跳过该文件,并记录失败日志。停止该文件的发送。

 

问题4.断点续传

     描述:因可能存在超大文件,如果网络断连或者系统重启,则需要进行续传,而不能重新发送整个文件

     解决:记录文件已发送的大小,但可能存在丢包的问题,故只能记录目的端已确认接收的部分,如果文件不完整,则需要重发未确认的部分,而不是只发没有发完的部分。

 

问题5:补发问题

     描述:若文件发送过程中存在失败、超时。发送端需要重发,但是接收端就可能多次接收到相同的文件或文件块

     解决:需要在接收端考虑去重处理

 

问题6:目录软链接问题

     描述:如果目录使用了软链接,则使用file.getAbsolutePath()获取的是文件的真实路径,这样在记录日志时与用户配置的不同。

      解决:需要使用file.getCanonicalPath()进行获取,但要特别注意,文件初始化路径时,不能包含../等信息。需要使用FilenameUtils.normalize(file.getCanonicalPath(), true)处理

posted on   猫不急  阅读(251)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示