apache / dubbo-js

The Typescript implementation of Apache Dubbo. An RPC and microservice framework for Node.js and Web development.
https://dubbo.apache.org/
Apache License 2.0
767 stars 160 forks source link

Intercept cannot filter elapse time. #145

Closed AtarisMio closed 2 years ago

AtarisMio commented 5 years ago

Describe the bug intercept a jar not filter the elapse time. Sometime the stdout of jexpose is panic. The elapse time will concat to path.

To Reproduce Steps to reproduce the behavior:

  1. To produce a jar, jexpose some time output like this
    
    Output at: /tmp/jexpose16670633053273592728

elapsed: 1.295s

2. the intercept cannot filter the elapse time.

**Expected behavior**
Run correctly.

**Screenshots**

```shell
read jar ast file /tmp/jexpose7663512919774279510
elapsed: 1.358s/output/deflated.json
{ [Error: ENOENT: no such file or directory, open '/tmp/jexpose7663512919774279510
elapsed: 1.358s/output/deflated.json']
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path:
   '/tmp/jexpose7663512919774279510\nelapsed: 1.358s/output/deflated.json' }

WeWork Helper20191031122152

hufeng commented 5 years ago

@creasy2010

AtarisMio commented 5 years ago

@hufeng 或者这个从jexpose那边修也行

Maybe, this bug should be fixed by jexpose.

hufeng commented 5 years ago

好来,我来review下 😄

Ataris notifications@github.com 于2019年11月1日周五 下午5:17写道:

@hufeng https://github.com/hufeng 或者这个从jexpose那边修也行

Maybe, this bug should be fixed by jexpose.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/apache/dubbo-js/issues/145?email_source=notifications&email_token=AAECEEDE6LCDXM7HOZ54SPLQRPX33A5CNFSM4JHECSHKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEC2M2YI#issuecomment-548719969, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAECEEBKYFN4C7WBZF5MYZTQRPX33ANCNFSM4JHECSHA .

sunchuanleihit commented 5 years ago

image 这段删掉就万事大吉了

AtarisMio commented 5 years ago

@sunchuanleihit 直接删除不太好吧,,,可能加个什么参数,然后有参数的时候不输出好些。这个我感觉应该算是jexpose的一个feature吧

hsiaosiyuan0 commented 5 years ago

@AtarisMio

Sometime the stdout of jexpose is panic.

没有明白,可以麻烦具体说一下为什么 jexpose 的 stdout 会 panic 吗? 我回忆到之前有一个 PR 往 jexpose 提交,也是去掉 elapsed time,当我回复了为什么要去掉的时候,作者就关了 PR, 估计是我的回复让他感觉我不会合并他的代码了 - -

我感觉和 @AtarisMio 说的差不多。这个 elapsed time 说是 feature 也略牵强,但是通过移除这个输出也是没有解决问题的根本。问题的根本是目前 jexpose 和 下游的 translator 之间的信息传递方式是不恰当的。jexpose 应该提供一个参数让下游指定输出的位置,然后 jexpose 把目前输出到 stdout 的内容结构化地输出到该位置。比如,下游指定输出到 /tmp/some-random-path.json,然后 /tmp/some-random-path.json 的内容为:

{
 "code": 0,
 "data": {},
 "message": ""
}

这样下游才能准确地得到执行的结果。

我们接下来的计划是把用 jexpose 实现的部分用 ts 重写,合并到这个项目中,这样以后不会要分别维护两个不同的 codebase 而且是不同的语言实现。

当然现阶段的问题也是需要解决的,所以如果目前没有好的方案,而 @sunchuanleihit 的建议改动又最小的话,我觉得也不失为一个解决方案。因为接下来计划对 jexpose 和 translator 进行重构,所以比较大的修改希望可以尽可能的先避免。

AtarisMio commented 5 years ago

@hsiaosiyuan0 原因的话,大致是因为这个,可能遇jre版本有关系。我这里提供了我运行的dockerfile,我在这个环境中可以稳定复现。

FROM maven:3-jdk-13-alpine

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories

# set timezone for alpine
RUN apk add --no-cache tzdata \
    && /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && apk del tzdata
RUN echo 'Asia/Shanghai' >/etc/timezone
ENV NODE_VERSION 10.17.0

RUN addgroup -g 1000 node \
    && adduser -u 1000 -G node -s /bin/sh -D node \
    && apk add --no-cache \
        libstdc++ \
    && apk add --no-cache --virtual .build-deps \
        curl \
        tar \
        xz
RUN echo "Building from source" \
    && apk add --no-cache --virtual .build-deps-full \
        binutils-gold \
        g++ \
        gcc \
        gnupg \
        libgcc \
        linux-headers \
        make \
        python
RUN curl -fsSLO --compressed "https://npm.taobao.org/mirrors/node/v$NODE_VERSION/node-v$NODE_VERSION.tar.xz" \
    && ls "node-v$NODE_VERSION.tar.xz" \
    && tar -xf "node-v$NODE_VERSION.tar.xz" \
    && cd "node-v$NODE_VERSION" \
    && ./configure \
    && make -j$(getconf _NPROCESSORS_ONLN) V= \
    && make install \
    && apk del .build-deps-full \
    && cd .. \
    && rm -Rf "node-v$NODE_VERSION" \
    && rm "node-v$NODE_VERSION.tar.xz" \
    && apk del .build-deps

ENV YARN_VERSION 1.19.1

RUN apk add --no-cache --virtual .build-deps-yarn curl gnupg tar
RUN curl -fsSLO --compressed "https://npm.taobao.org/mirrors/yarn/v$YARN_VERSION/yarn-v$YARN_VERSION.tar.gz" \
    && ls \
    && mkdir -p /opt \
    && tar -xzf yarn-v$YARN_VERSION.tar.gz -C /opt/ \
    && ln -s /opt/yarn-v$YARN_VERSION/bin/yarn /usr/local/bin/yarn \
    && ln -s /opt/yarn-v$YARN_VERSION/bin/yarnpkg /usr/local/bin/yarnpkg \
    && rm yarn-v$YARN_VERSION.tar.gz \
    && apk del .build-deps-yarn

RUN apk add --no-cache git

CMD [ "node" ]
hsiaosiyuan0 commented 5 years ago

@AtarisMio 不是吧,那个问题是因为 + 导致自动调用了 char[] 类型上的 toString() 方法吧,那个问题也不是“混乱”吧 [C @ 56e5b723 前面的 [C 应该表示的就是打印的对象的类型吧(后面是啥忘记了)

我猜是不是上面的 PrintStream 我设置了 autoFlush 而这个 API 在不同的版本里面有差异?

AtarisMio commented 5 years ago

@hsiaosiyuan0 哦对不起 最近睡得有点少,,,有点犯迷糊看错了

lileilei commented 4 years ago

这个问题是因为 有时候 println 2此输出被合并成一条输出返回了。偶现。所以导致根据Output at 字符串的判断失效问题。