Coder Social home page Coder Social logo

ageiport's People

Contributors

22gnus avatar clsaa avatar hly3825 avatar jadechenfei avatar peterjiao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ageiport's Issues

导出示例执行报错

version 0.0.1

java.lang.NullPointerException: null
at com.alibaba.ageiport.processor.core.spi.service.TaskServiceImpl.executeTask(TaskServiceImpl.java:41)

使用HttpApiTest改造为读取真实的容器应用初始化报错

代码片段

String url = ''http://ageiport-task-server.demo.xxxxx.com.cn";
AgeiPortOptions options = new AgeiPortOptions();
        HttpTaskServerClientOptions clientOptions = new HttpTaskServerClientOptions();
        clientOptions.setEndpoint(host);
        clientOptions.setPort(80);
        options.setTaskServerClientOptions(clientOptions);
        AgeiPort ageiPort = AgeiPort.ageiPort(options);

调试出调用了
请求url http://ageiport-task-server.demo.xxxxx.com.cn:80/v1/CreateTaskSpecification

请求json:

{
    "action": "CreateTaskSpecification",
    "domain": "http://ageiport-task-server.demo.xxxxx.com.cn:80",
    "responseClass": "com.alibaba.ageiport.task.server.model.CreateTaskSpecificationResponse",
    "taskCode": "CSVExportProcessor",
    "taskDesc": "",
    "taskExecuteType": "STANDALONE",
    "taskHandler": "com.alibaba.ageiport.test.processor.core.exporter.CSVExportProcessor",
    "taskName": "CSVExportProcessor",
    "taskType": "EXPORT",
    "timestamp": 0,
    "url": "/v1/CreateTaskSpecification",
    "version": "v1"
}

task-server控制台报错

2023-07-04 23:57:29,986 ERROR [com.ali.age.tas.ser.htt.TaskSpecificationApiV1] (vert.x-eventloop-thread-1) TaskSpecificationApiV1#create failed, request:CreateTaskSpecificationRequest(taskCode=CSVExportProcessor, taskName=CSVExportProcessor, taskDesc=, taskType=EXPORT, taskExecuteType=STANDALONE, taskHandler=com.alibaba.ageiport.test.processor.core.exporter.CSVExportProcessor): javax.persistence.PersistenceException: org.hibernate.HibernateException: java.util.concurrent.CompletionException: org.hibernate.PropertyValueException: not-null property references a null or transient value : com.alibaba.ageiport.task.server.entity.TaskSpecificationEntity.app
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:154)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.reactive.session.impl.ReactiveExceptionConverter.convert(ReactiveExceptionConverter.java:31)
at org.hibernate.reactive.session.impl.ReactiveSessionImpl.lambda$firePersist$18(ReactiveSessionImpl.java:685)
at java.base/java.util.concurrent.CompletableFuture.uniHandle(CompletableFuture.java:930)
at java.base/java.util.concurrent.CompletableFuture.uniHandleStage(CompletableFuture.java:946)
at java.base/java.util.concurrent.CompletableFuture.handle(CompletableFuture.java:2266)

数据库表都是空表,从文档中的建表语句创建的

请教

开发者,你好,我完全按照你的导出示例来跑,还是会报出:java.lang.NullPointerException: null at com.alibaba.ageiport.processor.core.spi.service.TaskServiceImpl.executeTask(TaskServiceImpl.java:41)的错误,名称我都核对了,请问为啥呢?

EventBusManager 类代码存在错误

image

EventBusOptions clusterEventBusOptions = options.getLocal().getEventBusOptions();
应该是 EventBusOptions clusterEventBusOptions = options.getCluster().getEventBusOptions();

导出示例跑不起来

image
如图,这个jar包好像缺失了类
image
导致debug第一步就报错了,麻烦确认下是不是我maven导包的问题导致
image

ExcelFileWriter的空指针问题

AGEIPort版本:0.0.9
问题:执行非MultiSheetExportProcessorTest以外的测试用例都会失败,原因NPE
错误堆栈:
17:35:41.685 [AGEI-MainWorker-t-2] DEBUG com.alibaba.excel.context.WriteContextImpl - Initialization 'WriteContextImpl' complete 2023-01-11 17:35:41.687 [AGEI-MainWorker-t-2] ERROR c.a.a.p.c.t.exporter.worker.ExportMainTaskWorker - StandaloneExportMainTaskWorker#doReduce failed, main:20230111173540-65bdcde1 java.lang.NullPointerException: Cannot invoke "java.util.Map.get(Object)" because "meta" is null at com.alibaba.ageiport.processor.core.file.excel.ExcelFileWriter.write(ExcelFileWriter.java:85) at com.alibaba.ageiport.processor.core.task.exporter.worker.ExportMainTaskWorker.doReduce(ExportMainTaskWorker.java:194) at com.alibaba.ageiport.processor.core.spi.task.factory.MainTaskWorker.run(MainTaskWorker.java:34) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at com.alibaba.ageiport.common.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:95) at com.alibaba.ageiport.common.concurrent.InterruptibleTask.run(InterruptibleTask.java:50) at com.alibaba.ageiport.common.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) 2023-01-11 17:35:41.688 [AGEI-MainWorker-t-2] INFO c.a.a.test.processor.core.TestMainTaskCallback - ---beforeError:20230111173540-65bdcde1 2023-01-11 17:35:41.690 [AGEI-MainWorker-t-2] INFO c.a.a.p.core.spi.task.monitor.TaskStageEvent - main:20230111173540-65bdcde1, stage:执行失败, cost:-ms 2023-01-11 17:35:41.690 [AGEI-MainWorker-t-2] INFO c.a.a.test.processor.core.TestMainTaskCallback - ---afterError:20230111173540-65bdcde1 2023-01-11 17:35:41.690 [AGEI-eb-local-t-2] INFO c.a.a.p.core.task.monitor.TaskProgressServiceImpl - update progress, main:20230111173540-65bdcde1, stage:执行失败 17:35:41.910 [AGEI-MainWorker-t-2] DEBUG com.alibaba.excel.context.WriteContextImpl - Finished write. 17:35:41.937 [main] INFO com.alibaba.ageiport.test.processor.core.TestHelper - getTaskProgress, percent:1.0, stageName:主任务执行失败

空指针原因:ExcelFileWriter执行write函数时未对meta进行判空或者初始化。只有需要多sheet页导出时,在实现ExportProcessor的group方法时才会设置meta数据,其余场景未设置meta的ExportProcessor在执行时都会由此问题。
修改建议:判空然后初始化meta
image

导出样例报错

version: 0.1.6

java.lang.IllegalStateException: No such extension com.alibaba.ageiport.processor.core.spi.task.callback.MainTaskCallback by name TestMainTaskCallback

导出示例问题一大堆 遇到的问题的解决办法 最后 建议文档进行修改以及完善

1、TestHelper中 assertWithFile和assertWithoutFile 方法中 GetTaskProgressParam 这个类有误
解决办法: 将其修改为TaskProgressParam 而不是GetTaskProgressParam
2、重点 扩展类找不到 文档中的描述

  1. 项目目录的resources文件夹下创建META-INF文件夹
  2. META-INF文件夹下创建名为com.alibaba.ageiport.processor.core.Processor的文本文件
    解决办法 一路debug下去发现 扩展类要放到 resources/META-INF/ageiport 目录下扩展类才能被加载到
    image

可使用如下方式测试扩展有无加载成功

@Slf4j
public class StandaloneExportProcessorTest {
   
    @Test
    public void test1() {
        Set<Processor> instances = ExtensionLoader.getExtensionLoader(Processor.class).getSupportedExtensionInstances();
        log.info(instances);
    }
}

也可以查看打印的示例是否是自己的
3、导出测试类中报错

AgeiPortOptions.Debug debug = new AgeiPortOptions.debug();
#不存在这个属性。。
options.setDebug(debug);

解决办法:注释掉即可
3、依赖下载不到 (可能是网络原因?)

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>ageiport-processor-core</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

官方文件推荐如上 依赖无法下载
解决办法:源码构建 在主pom ageiport-parent 中注释掉maven的插件 maven-gpg-plugin 和 maven-javadoc-plugin (可选 不然可能遇到很多坑。。需要使用经验)
源码构建成功 install到本地 可直接使用

<dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>ageiport-processor-core</artifactId>
      <version>0.0.4</version>
      <scope>compile</scope>
</dependency>

4、示例无法跑起来 以及没有正确的配置步骤
遇到agei-server-task 未配置的问题

ImportProcessor返回的View数据, 无法生成文件

ImportMainTaskWorker.java中doReduce()中对existView赋值逻辑有误,导致View数据, 无法生成文件
image

验证
前提:只有两个子任务
测试代码基于ClusterImportProcessorTest.java改造

public BizImportResult<View, Data> convertAndCheck(BizUser user, Query query, List<View> views) {
      BizImportResultImpl<View, Data> result = new BizImportResultImpl<>();

      List<Data> data = new ArrayList<>();
      for (View view : views) {
          Data datum = new Data();
          datum.setId(view.getId());
          datum.setName(view.getName());
          datum.setGender(view.getGender());
          data.add(datum);
      }

      result.setData(data);
      ImportSubTaskContextImpl context = getContext();
      String subTaskId = context.getSubTask().getSubTaskId();
      String no = subTaskId.substring(subTaskId.lastIndexOf("_") + 1);
      // 第一个子任务输出View
      if ("1".equals(no)){
          result.setView(views);
      }else{
          // 最后一个子任务没有输出View
          result.setView(new ArrayList<>());
      }
      return result;
  }

导入测试文件ClusterImportProcessor.xlsx

测试结果:
image
image

关于使用的一些问题请教

1.测试类中的示例最终好像都是基于反射调用的,这样对于使用 spring 管理的 bean(比如使用 @resource 或者 @Autowired 修饰),反射构建执行时会报出空指针,因此需要对实现类做特殊处理,请问有比较优雅的使用示例嘛,求解
image

2.测试示例的使用方式就是生产使用的最终形态嘛,是否有其他构建和调用的方式,如果有,方便给出示例不
image

AgeiPortOptions.Debug

AgeiPortOptions.Debug debug = new AgeiPortOptions.Debug();
这里的Debug是私有的 我本地做demo的时候会引用不到

能批量导入图片吗?

我们会有很多图片压缩成zip。服务端需要解压Zip,拿到一张张图片,服务将图片一张张上传到文件中心获得文件ID,根据规则解析图片名称,将文件ID按照要求存库。不知道这个框架能否导入含有图片的ZIP包

导入时存在错误数据并设置导出错误数据时有问题

在分为多片导入时,其中一个子任务存在错误,并将错误数据进行导出时,主任务结束后
com.alibaba.ageiport.processor.core.task.importer.worker.ImportMainTaskWorker#doReduce方法中
image
由于循环导致最后的existView变量为false而无法生成错误数据的文件。

LocalMemoryBigDataCache导致的内存泄露

在执行Standalone模式的Processor时,subtask使用LocalMemoryBigDataCache作为缓存,但是在MainTask进行merge操作之后,并没有清理缓存,最终导致这部分内存无法回收。
com.alibaba.ageiport.processor.core.task.exporter.worker.ExportMainTaskWorker#doReduce
image

Jprofiler的最大对象显示LocalMemoryBigDataCache占用内存
image
老年代内存占满,且gc无法回收这部分内存
image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.