GithubHelp home page GithubHelp logo

ageiport's Issues

请教

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

关于使用的一些问题请教

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

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

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

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

导出示例执行报错

version 0.0.1

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

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

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

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

LocalMemoryBigDataCache导致的内存泄露

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

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

使用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)

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

EventBusManager 类代码存在错误

image

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

能批量导入图片吗?

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

导出示例跑不起来

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

AgeiPortOptions.Debug

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

导出样例报错

version: 0.1.6

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

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.