RevealBi/Reveal.Sdk

[BUG]: Error generating exported data ./ExportTool error=2, No such file or directory

Closed this issue · 4 comments

SDK Version

1.6.6

Client Framework

Angular

Server Platform

Java

Operating System

Linux

Description

We're testing Reveal 1.6.6 (up from 1.6.1) and while trying to use server-side export we got this exception:

2024-05-06 15:57:54,889 INFO  pool-4-thread-10 i.r.PlaywrightBrowser - Verifying playwright initialization: Is initialized = true {}
2024-05-06 15:57:55,174 INFO  pool-4-thread-10 i.r.PlaywrightBrowser - Evaluating function: () => getCapturesFor {}
2024-05-06 15:58:03,159 INFO  pool-4-thread-10 i.r.PlaywrightBrowser - Function evaluated {}
2024-05-06 15:58:03,270 INFO  pool-4-thread-10 i.r.ExportTool - Downloading ExportTool from site (can be turned off with 'setEnableExportToolDownload(false)')... {}
2024-05-06 15:58:04,056 INFO  pool-4-thread-10 i.r.ExportTool - ExportTool download finished (786 ms). {}
2024-05-06 15:58:05,542 ERROR pool-4-thread-10 i.r.DefaultDashboardExporter - Error when creating exported data {}
 java.lang.Exception: Error generating exported data: Cannot run program "./ExportTool" (in directory "/nonexistent/.cache/com.infragistics.reveal/ExportTool/1.6.6/linux-x64"): error=2, No such file or directory
        at com.infragistics.reveal.engine.export.DefaultDashboardExporter$3.export(DefaultDashboardExporter.java:434)
        at com.infragistics.reveal.engine.export.DefaultDashboardExporter$3.onSuccess(DefaultDashboardExporter.java:356)
        at com.infragistics.reveal.engine.export.DefaultDashboardExporter.addProcessedWidget(DefaultDashboardExporter.java:643)
        at com.infragistics.reveal.engine.export.DefaultDashboardExporter.access$600(DefaultDashboardExporter.java:65)
        at com.infragistics.reveal.engine.export.DefaultDashboardExporter$5.handleResult(DefaultDashboardExporter.java:611)
        at com.infragistics.reveal.engine.export.DefaultDashboardExporter$5.handleResult(DefaultDashboardExporter.java:605)
        at com.infragistics.reveal.engine.RevealEngine$2.invoke(RevealEngine.java:164)
        at com.infragistics.reportplus.datalayer.VisualizationDataService.postProcessResult(VisualizationDataService.java:89)
        at com.infragistics.reportplus.datalayer.VisualizationDataService.access$500(VisualizationDataService.java:15)
        at com.infragistics.reportplus.datalayer.VisualizationDataService$1$1.invoke(VisualizationDataService.java:63)
        at com.infragistics.reportplus.datalayer.DataLayerService$3.invoke(DataLayerService.java:168)
        at com.infragistics.reportplus.datalayer.DataLayerService$6.invoke(DataLayerService.java:299)
        at com.infragistics.reportplus.datalayer.TabularDataService$3.invoke(TabularDataService.java:83)
        at com.infragistics.reportplus.datalayer.TabularDataService$6.invoke(TabularDataService.java:248)
        at com.infragistics.reportplus.datalayer.engine.adhoc.AdHocBuilder$1.invoke(AdHocBuilder.java:47)
        at com.infragistics.reportplus.datalayer.engine.adhoc.HierarchyDataBuilderBase$3$1.invoke(HierarchyDataBuilderBase.java:342)
        at com.infragistics.reportplus.datalayer.TabularDataService$8.invoke(TabularDataService.java:312)
        at com.infragistics.reportplus.datalayer.TabularDataService$24.invoke(TabularDataService.java:833)
        at com.infragistics.reportplus.datalayer.engine.TabularDataCacheService$3.invoke(TabularDataCacheService.java:117)
        at com.infragistics.reportplus.datalayer.engine.InMemoryCacheStorage.storeObject(InMemoryCacheStorage.java:77)
        at com.infragistics.reportplus.datalayer.engine.TabularDataCacheService.addData(TabularDataCacheService.java:113)
        at com.infragistics.reportplus.datalayer.TabularDataService.cacheData(TabularDataService.java:829)
        at com.infragistics.reportplus.datalayer.TabularDataService.cacheDataAndHandOff(TabularDataService.java:308)
        at com.infragistics.reportplus.datalayer.TabularDataService.access$300(TabularDataService.java:14)
        at com.infragistics.reportplus.datalayer.TabularDataService$5$2$2.invoke(TabularDataService.java:226)
        at com.infragistics.reportplus.datalayer.engine.InMemoryDataset.getTabularData(InMemoryDataset.java:155)
        at com.infragistics.reportplus.datalayer.TabularDataService$5$2.invoke(TabularDataService.java:221)
        at com.infragistics.reportplus.datalayer.TabularDataService$19.invoke(TabularDataService.java:687)
        at com.infragistics.reportplus.datalayer.engine.transformations.PivotTableTransformation$2$1.invoke(PivotTableTransformation.java:142)
        at com.infragistics.reportplus.datalayer.engine.pivot.PivotTableBuilder$1$1.invoke(PivotTableBuilder.java:292)
        at com.infragistics.reportplus.datalayer.engine.InMemoryDataset.copyToLoader(InMemoryDataset.java:216)
        at com.infragistics.reportplus.datalayer.engine.pivot.PivotTableBuilder$1.invoke(PivotTableBuilder.java:268)
        at com.infragistics.reportplus.datalayer.engine.TaskExecutionService$1.run(TaskExecutionService.java:47)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
 Caused by: java.io.IOException: Cannot run program "./ExportTool" (in directory "/nonexistent/.cache/com.infragistics.reveal/ExportTool/1.6.6/linux-x64"): error=2, No such file or directory
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
        at java.base/java.lang.Runtime.exec(Runtime.java:592)
        at com.infragistics.reveal.engine.export.ExportTool.export(ExportTool.java:76)
        at com.infragistics.reveal.engine.export.DefaultDashboardExporter$3.export(DefaultDashboardExporter.java:432)
        ... 37 more
 Caused by: java.io.IOException: error=2, No such file or directory
        at java.base/java.lang.ProcessImpl.forkAndExec(Native Method)
        at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:340)
        at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:271)
        at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1107)
        ... 41 more

The folder /nonexistent is the home of the user that runs Reveal:

$ ls -l /nonexistent
total 16
drwxr-xr-x  4 nobody nogroup 4096 Feb  7 12:05 ./
drwxr-xr-x 22 root   root    4096 Apr 30 08:30 ../
drwxr-xr-x  4 nobody nogroup 4096 Feb  7 09:27 .cache/
drwxr-xr-x  3 nobody nogroup 4096 Feb  7 12:05 .java/

$ ls -l /nonexistent/.cache/com.infragistics.reveal/ExportTool/1.6.6/linux-x64
total 8
drwxr-xr-x 2 nobody nogroup 4096 May  6 15:13 ./
drwxr-xr-x 3 nobody nogroup 4096 May  6 15:13 ../
-rw-r--r-- 1 nobody nogroup    0 May  6 16:13 ExportTool.tmp

All we did for upgrading from 1.6.1 to 1.6.6 was to update our POM to pull the new Reveal version, we have not installed any new software in the server, and didn't see anything about new dependencies in the Release Notes either.

This is our version of Linux:

$ uname -a
Linux ip-172-30-0-48 5.15.0-1058-aws #64~20.04.1-Ubuntu SMP Tue Apr 9 11:12:27 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.6 LTS
Release:        20.04
Codename:       focal

I looked myself for the file, and I saw this:

$ ls -l /nonexistent/.cache/com.infragistics.reveal/ExportTool
total 106436
drwxr-xr-x 3 nobody nogroup      4096 Feb  6 20:45  1.6.0
drwxr-xr-x 3 nobody nogroup      4096 May  6 15:13  1.6.6
-rw-r--r-- 1 nobody nogroup 108977089 May  6 16:13 '1.6.6\linux-x64\ExportTool'

Notice the ExportTool file wasn't created inside of the folder 1.6.6/linux-x64 but it is literally named 1.6.6\linux-x64\ExportTool with those backslashes in the name (which explains why Linux didn't use them as path separators).

Hi @dwilches , good catch, thanks for the detailed information. If you manually fix that path, does it work?

@luispandolfi Yes, I renamed the file and moved it to the right path, then restarted my service and it worked ok after that.

Thanks @dwilches.
We already created an internal issue to track it AB#31222
We'll keep you updated here.
Thanks!