十月记录


bg

存储类型

影响范围以及预估时间

数据库

  • 添加字段,旧数据兼容

模块

  • 新建存储模块
  • *FileHandler 拆分处理逻辑与存储逻辑
  • 文件下载兼容旧数据

测试

  • 由于影响的较为基础,需要测试全面覆盖

预计时间

15个工作日

br

1
docker run -d -p 3306:3306 --name mariadb -v /data/mariadb/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mariadb:latest

文件后缀名

1
2
3
4
5
/getFile
/download
/downloadZip
/

jira任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
基于jira的日报规则:
issue类型目前只统计:任务, 故事(中文), 测试用例, 缺陷, 子任务, Sub-task
issue状态只记录:Unresolved, 完成, 解决中
issue经办人是谁,代表了会将issue记入他(她)的名下
--------------------------------------------------------
时间段规则:
任务, 故事(中文) 这两种类型的issue的预计和延迟时间都会根据对应开始时间和结束时间计算
--------------------------------------------------------
时间点规则:
测试用例, 缺陷, 子任务, Sub-task 这四种类型的issue只有完成的时间,没有计划开始和计划结束时间
--------------------------------------------------------
各类型issue面向的用户角色不同:
故事(中文) -> 功能模块的owner;
任务 -> 职能线组长和组员;
子任务, Sub-task -> 职能线组长和组员;
测试用例 -> 测试人员;
缺陷 -> 测试人员;
--------------------------------------------------------
FAQ:
Q:如果组长A把issue分配给了组员B(此时改issue状态为待办),但组员B没有接受,算计入组员B的代办吗?
A:不会,只有接收者接了issue(接受之后issue才会变成处理中/正在做),此时才计入组员B的issue,没有强买强卖。
---
Q:如果开发过程中,开发人员发现需要加一个任务,怎么办?
A:如果这个任务是指派给自己的,也不是新需求,建立一个子任务派给自己就行;如果这个任务是新需求,需要通过产品的沟通,确定为真实需求让产品建,并指派给职能线组长。
---
Q:如果工作过程中,插入了不可预计的内容,如临时开会,怎么办?
A:构建子任务为开会,分给自己就行,如果会议时间太长影响了任务的正常进行,可以调整任务的结束时间。
---
Q:测试用例和缺陷都归给测试人员,有啥区别吗?
A:测试用例是测试人员自建自销的issue,而缺陷是测试人员建了给开发人员解决的issue,虽然缺陷的解决方是开发,但是还是归在测试人员名下哦。
---
Q:继上一个问题,既然缺陷解决方是开发,如果开发迟迟不解决缺陷,不是会影响测试人员的issue完成度?
A:是的,问题客观存在但迟迟不修复,这种情况需要在缺陷的备注中添加“L1~L3:延迟原因”,让项目owner知悉,并制定解决方案,避免拖太久影响整体项目进度。
---
Q;啥时候变更jira的issue状态呢?
A:建议每天下班前整理当天的任务,把一天下来干的活对应的任务/子任务点成完成。把明天要干的活设置一下startTime=明天,养成良好习惯。
---
Q:超时很多天的任务如何处理?
A:可以看到,有些故事/任务延迟了十几天二十几天,这类issue如果实际上已经完成了,就应该close掉。如果依旧处于阻塞状态,在备注中添加“L1~L3:延迟原因”。
---
Q:备注中添加“L1~L3:延迟原因”的L1、L2、L3是什么意思?
A:L1:原型图交付延期一天等。一般应对3天以内的延期
L2:缺陷设计导致功能交付打回,需要走中循环。一般应对3天~7天的延期
L3:原始需求翻了,需要重新评估导致设计开发大循环。7天以上的延期
---

RabbitMQ队列测试

受影响的消息队列

队列 交换机 路由
doc_convert_test fs_file_converter_exchange safe_convert
doc_convert_test_larger_file fs_file_converter_exchange safe_larger_file_convert
mq.document.process fs_file_converter_exchange unsafe_convert
mq.document.process.larger.file fs_file_converter_exchange unsafe_larger_file_convert

RabbitMQ消息丢失问题

9-23日,第三方服务报告pdf转换一直未完成,开始排查 登录转换服务器系统发现消息未接收到,fs系统日志显示消息已投递

涉及到的文件id如下

1
2
3
fileId=8a83802e7c0ca3f6017c108621bb00c6
fileId=8a8380307c0ca0b4017c108621cc00d8
fileId=8a8380307c0ca0b4017c1086224800db

MQ管理界面发现消费者下线了,之前有过一次UAT环境MQ无法连接的情况,fs服务无法重新连接,只能重启服务的情况。

image-20211018103310893

联系运维恢复了mq的服务,消息被灾备环境消费掉,

问题,灾备环境应同步(复制)消息,而不是将消息消费掉,导致服务恢复后消息丢失,无法继续处理。

复现方案

启动一个转换任务,由于消费者掉线,生产者的消息投递成功,但是可能被灾备环境的队列的消费者消费掉,消费者服务恢复后,消息丢失的情况

问题

消费者掉线,没有自动重连

fs任务优先级

  • onlyoffice 前端对接
  • pdf文件图片批注
  • pdf文件预览签字模块感知回调
  • 开启txt格式文件在线编辑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
1259545 2021-10-19 13:54:19.675  INFO fs-service 31851-[TID: 5015de1edd234efab213666cfaf0baef.1978.16346228593382801] --- [XNIO-3 task-2] c.t.p.f.w.u.RequestLogAspect             : 接到请求! cat: 【sourceId :null;currentId :EDC-LAB-0a0101f3-454058-550;】 URI信息:【/fil1259545 e/chunk/check】 controller:【FsClientController】 method:【getFileStatus】 param:【[chunkFileInfoRequest={"accountId":"4d7e86cd210e11e8a53900163e02f99a","appId":"edc","busType":"1","chunkSize":1887436800,"fileName":"Audit_Trail_122.xlsx","fileSize":28935646161259545 ,"forceNew":false,"tenantId":"JYSWJS2018927","totalChunk":2}]】  : 
1259546 {cat-filter-source-id=EDC-LAB-0a0101f3-454058-550, tm-header-_catchildmessageid=EDC-LAB-0a0101f3-454058-550, tm-header-_catparentmessageid=edc-background-0a0101f3-454058-29878, tm-header-_catrootmessageid=edc-background-0a0101f3-454058-29878, tm-header-accountid1259546 =4d7e86cd210e11e8a53900163e02f99a, tm-header-appid=edc, tm-header-projectid=8a81c08b688f85a80168e4f2b3ec1a75, tm-header-tenantid=JYSWJS2018927, tm-header-trailid=8a81806c7b8874bf017c96742a9848ba, tm-header-userid=8a81c08b759b650a0175af99cf256445}
1259547 2021-10-19 13:54:19.676 INFO fs-service 31851-[TID: 5015de1edd234efab213666cfaf0baef.1978.16346228593382801] --- [XNIO-3 task-2] c.t.p.f.w.u.RequestLogAspect : 接到请求! cat: 【sourceId :null;currentId :EDC-LAB-0a0101f3-454058-550;】 URI信息:【/fil1259547 e/chunk/check】 controller:【FileServiceController】 method:【getLegalExtConfig】 param:【[appId="edc"]】 :
1259548 {cat-filter-source-id=EDC-LAB-0a0101f3-454058-550, tm-header-_catchildmessageid=EDC-LAB-0a0101f3-454058-550, tm-header-_catparentmessageid=edc-background-0a0101f3-454058-29878, tm-header-_catrootmessageid=edc-background-0a0101f3-454058-29878, tm-header-accountid1259548 =4d7e86cd210e11e8a53900163e02f99a, tm-header-appid=edc, tm-header-projectid=8a81c08b688f85a80168e4f2b3ec1a75, tm-header-tenantid=JYSWJS2018927, tm-header-trailid=8a81806c7b8874bf017c96742a9848ba, tm-header-userid=8a81c08b759b650a0175af99cf256445}
1259549 2021-10-19 13:54:19.678 INFO fs-service 31851-[TID: 5015de1edd234efab213666cfaf0baef.1978.16346228593382801] --- [XNIO-3 task-2] c.t.p.f.w.u.RequestLogAspect : 调用成功 :
1259550 {cat-filter-source-id=EDC-LAB-0a0101f3-454058-550, tm-header-_catchildmessageid=EDC-LAB-0a0101f3-454058-550, tm-header-_catparentmessageid=edc-background-0a0101f3-454058-29878, tm-header-_catrootmessageid=edc-background-0a0101f3-454058-29878, tm-header-accountid1259550 =4d7e86cd210e11e8a53900163e02f99a, tm-header-appid=edc, tm-header-projectid=8a81c08b688f85a80168e4f2b3ec1a75, tm-header-tenantid=JYSWJS2018927, tm-header-trailid=8a81806c7b8874bf017c96742a9848ba, tm-header-userid=8a81c08b759b650a0175af99cf256445}
1259551 2021-10-19 13:54:19.693 INFO fs-service 31851-[TID: 5015de1edd234efab213666cfaf0baef.1978.16346228593382801] --- [XNIO-3 task-2] c.t.p.f.c.c.DefaultFsClient : Current processor is [default] :
1259552 {cat-filter-source-id=EDC-LAB-0a0101f3-454058-550, tm-header-_catchildmessageid=EDC-LAB-0a0101f3-454058-550, tm-header-_catparentmessageid=edc-background-0a0101f3-454058-29878, tm-header-_catrootmessageid=edc-background-0a0101f3-454058-29878, tm-header-accountid1259552 =4d7e86cd210e11e8a53900163e02f99a, tm-header-appid=edc, tm-header-projectid=8a81c08b688f85a80168e4f2b3ec1a75, tm-header-tenantid=JYSWJS2018927, tm-header-trailid=8a81806c7b8874bf017c96742a9848ba, tm-header-userid=8a81c08b759b650a0175af99cf256445}
1259553 2021-10-19 13:54:19.696 INFO fs-service 31851-[TID: 5015de1edd234efab213666cfaf0baef.1978.16346228593382801] --- [XNIO-3 task-2] c.t.p.f.w.e.l.FileAddEsListener : message sent to: fs_file_es | add ,message body :{"appId":"edc","createBy":"8a81c08b759b61259553 50a0175af99cf256445","createTime":1634622859695,"fileName":"8a81819f7c7e4b94017c971d69ad7f90.xlsx","filePath":"/data/upload/null/edc/8a81819f7c7e4b94017c971d69ad7f90.xlsx","fileSize":2893564616,"fileSuffix":".xlsx","fileUrl":"https://file.trialos.com/file/getFil1259553 e?fileId=8a81819f7c7e4b94017c971d69ad7f90","id":"8a81819f7c7e4b94017c971d69ad7f90","isDeleted":0,"originFileName":"Audit_Trail_122.xlsx","previewUrl":"https://file.trialos.com/file/preview/8a81819f7c7e4b94017c971d69ad7f90","processor":"alioss","relativeFileUrl":1259553 "/file/getFile?fileId=8a81819f7c7e4b94017c971d69ad7f90","relativePreviewUrl":"/file/preview/8a81819f7c7e4b94017c971d69ad7f90","tenantId":"JYSWJS2018927","updateBy":"8a81c08b759b650a0175af99cf256445","updateTime":1634622859693,"uploadState":0,"version":0} :
1259554 {cat-filter-source-id=EDC-LAB-0a0101f3-454058-550, tm-header-_catchildmessageid=EDC-LAB-0a0101f3-454058-550, tm-header-_catparentmessageid=edc-background-0a0101f3-454058-29878, tm-header-_catrootmessageid=edc-background-0a0101f3-454058-29878, tm-header-accountid1259554 =4d7e86cd210e11e8a53900163e02f99a, tm-header-appid=edc, tm-header-projectid=8a81c08b688f85a80168e4f2b3ec1a75, tm-header-tenantid=JYSWJS2018927, tm-header-trailid=8a81806c7b8874bf017c96742a9848ba, tm-header-userid=8a81c08b759b650a0175af99cf256445}
1259555 2021-10-19 13:54:19.712 ERROR fs-service 31851-[TID: 5015de1edd234efab213666cfaf0baef.1978.16346228593382801] --- [XNIO-3 task-2] c.t.p.f.w.u.RequestLogAspect : 请求失败!耗时(毫秒) 【36】 cat: 【sourceId :null;currentId :EDC-LAB-0a0101f3-454058-550;1259555 】 URI信息:【/file/chunk/check】 controller:【FsClientController】 method:【getFileStatus】 param:【[chunkFileInfoRequest={"accountId":"4d7e86cd210e11e8a53900163e02f99a","appId":"edc","busType":"1","chunkSize":1887436800,"fileName":"Audit_Trail_122.xlsx","fi1259555 leSize":2893564616,"forceNew":false,"tenantId":"JYSWJS2018927","totalChunk":2}]】 :
1259556 {cat-filter-source-id=EDC-LAB-0a0101f3-454058-550, tm-header-_catchildmessageid=EDC-LAB-0a0101f3-454058-550, tm-header-_catparentmessageid=edc-background-0a0101f3-454058-29878, tm-header-_catrootmessageid=edc-background-0a0101f3-454058-29878, tm-header-accountid1259556 =4d7e86cd210e11e8a53900163e02f99a, tm-header-appid=edc, tm-header-projectid=8a81c08b688f85a80168e4f2b3ec1a75, tm-header-tenantid=JYSWJS2018927, tm-header-trailid=8a81806c7b8874bf017c96742a9848ba, tm-header-userid=8a81c08b759b650a0175af99cf256445}
1259557 2021-10-19 13:54:19.713 ERROR fs-service 31851-[TID: 5015de1edd234efab213666cfaf0baef.1978.16346228593382801] --- [XNIO-3 task-2] c.t.f.w.DefaultExceptionHandler : request:/file/chunk/check occurs error => Non-terminating decimal expansion; no exact rep1259557 resentable decimal result. :
1259558 {cat-filter-source-id=EDC-LAB-0a0101f3-454058-550, tm-header-_catchildmessageid=EDC-LAB-0a0101f3-454058-550, tm-header-_catparentmessageid=edc-background-0a0101f3-454058-29878, tm-header-_catrootmessageid=edc-background-0a0101f3-454058-29878, tm-header-accountid1259558 =4d7e86cd210e11e8a53900163e02f99a, tm-header-appid=edc, tm-header-projectid=8a81c08b688f85a80168e4f2b3ec1a75, tm-header-tenantid=JYSWJS2018927, tm-header-trailid=8a81806c7b8874bf017c96742a9848ba, tm-header-userid=8a81c08b759b650a0175af99cf256445}
1259559 java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
1259560 at java.math.BigDecimal.divide(BigDecimal.java:1690)
1259561 at com.taimeitech.paas.fs.web.service.impl.ChunkFileServiceImpl.addUploadTask(ChunkFileServiceImpl.java:150)
1259562 at com.taimeitech.paas.fs.web.service.impl.biz.ChunkFileUploadBizServiceImpl.addOrGetFileState(ChunkFileUploadBizServiceImpl.java:132)
1259563 at com.taimeitech.paas.fs.web.controller.FsClientController.getFileStatus$original$jtuPTPMR(FsClientController.java:641)
1259564 at com.taimeitech.paas.fs.web.controller.FsClientController.getFileStatus$original$jtuPTPMR$accessor$yqWVU0Tb(FsClientController.java)
1259565 at com.taimeitech.paas.fs.web.controller.FsClientController$auxiliary$KVnhQkpb.call(Unknown Source)
1259566 at org.apache.skywalking.apm.agent.core.plugin.interceptor.enhance.InstMethodsInter.intercept(InstMethodsInter.java:86)
1259567 at com.taimeitech.paas.fs.web.controller.FsClientController.getFileStatus(FsClientController.java)
1259568 at com.taimeitech.paas.fs.web.controller.FsClientController$$FastClassBySpringCGLIB$$53c8480.invoke(<generated>)
1259569 at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
1259570 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
1259571 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
1259572 at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
1259573 at com.alibaba.csp.sentinel.annotation.aspectj.SentinelResourceAspect.invokeResourceWithSentinel(SentinelResourceAspect.java:57)
1259574 at sun.reflect.GeneratedMethodAccessor513.invoke(Unknown Source)
1259575 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
1259576 at java.lang.reflect.Method.invoke(Method.java:498)
1259577 at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)
1259578 at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:616)
1259579 at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:70)
1259580 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
1259581 at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:85)
1259582 at com.taimeitech.paas.fs.web.util.RequestLogAspect.doAround(RequestLogAspect.java:82)
1259583 at sun.reflect.GeneratedMethodAccessor208.invoke(Unknown Source)
1259584 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
1259585 at java.lang.reflect.Method.invoke(Method.java:498)
1259586 at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:627)

MQ测试

传开始时间 上传结束时间 转换完成时间 样本个数 完成个数 完成率
2021-10-21 18:40:09 2021-10-21 19:16:55 2021-10-21 20:58:15 4008 4004

问题排查:转换请求未完成,实际请求转换个数为4004个,完成率为100%

统计SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-- 上传文件的个数
select count(*) from t_fs_file where origin_file_name='2M.docx' and app_id='1234' and create_time between '2021-10-21 18:40:08' and '2021-10-21 19:16:56';

-- 转换完成个数统计 4004
select count(*) from t_fs_file where origin_file_name='2M.pdf' and create_time between '2021-10-21 18:40:08' and '2021-10-21 20:58:16';

-- 最后一个文件
select * from t_fs_file where id='8a8380307c977a90017ca291781e1fb8';
-- 开始文件
select * from t_fs_file where id='8a8380307c977a90017ca26fcf16068b';
-- 未调用转换接口查询 4
select * from t_fs_file where origin_file_name='2M.docx' and transfer_status is null and create_time between '2021-10-21 18:40:08' and '2021-10-21 19:16:56';
-- 四条未转换记录,转换状态为null
-- 8a83802e7c977f52017ca27198f20677
-- 8a83802e7c977f52017ca2917c5d1f79
-- 8a83802f7c977caa017ca26fcf150638
-- 8a8380307c977a90017ca29171a61fb4

时 间 统 计 : 597711

2021-10-20 18:20:42.490 INFO 1778390 — [io-11002-exec-3] c.c.r.r.s.impl.RabbitTest

ServiceImpl : end: 1634724644779 -start:1634725242490=:597711

2021-10-20 18:20:42.490 INFO 1778390 — [io-11002-exec-3] c.c.r.r.s.impl.RabbitTest

ServiceImpl : 时 间 统 计 : 597711

1634725422605

2021-10-20 18:35:07.004 INFO 1778789 — [ntContainer#0-1] com.cong.rabbitdemo.worke

r.Worker : 系 统 时 间 : 1634726107004

1
2
3
4
5
6
# aws-s3
fs.aws.access.key = AKIAQK6N4RH7UIVJGR3X
fs.aws.secret.key = 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
fs.aws.region.name = us-west-2
fs.aws.bucket.name = tm-fs-test
fs.aws.processors=awss3,default,image,base64image,DefaultFileHandler,cloudStorage,BaoxinCloudFileHandler,cloud,alioss

CICD

http://cicd.taimei.com/project

SQL 添加字段

1
2
-- 4028e9027186ba05017186bc63ca0038
alter table t_hls_transcoding add column message varchar(500) default null comment '消息记录';