ExtractSurface causes the whole pipeline to execute twice when using MPI
Hi all,
I have noticed that sometimes Paraview executes twice some filters even when it is not needed when using MPI. This happens when the ExtractSurface filter is present in the Pipeline.
I use MPI 4.0.3 and Paraview 5.10.1 to which I added a line of code:
std::cout<< "In Here"<<std::endl;
The line is added at the beginning of the RequestData function of the file VTK/Filters/Core/vtkThreshold.cxx and is only here to show that Threshold executes twice.
Here is my pipeline (with the file here):
Wavelet > Threshold > ExtractSurface
Both Threshold and ExtractSurface are visible. I then execute this on Paraview, using:
mpirun -n 2 pvserver
and
paraview
When this is executed, I can see that the message "In Here" appears 4 times, even though it is only supposed to be shown twice. Threshold is therefore executed twice. This also happens when the Pipeline is in Python code and executed with pvbatch
. However, if executed on only one process, the bug doesn't appear.
This is a problem for me as my Paraview plugin cashes information and the second execution can cause errors.
This was confirmed by @mwestphal
Thanks for any help.
==========================================================
Steps to reproduce (master and 5.11)
- mpiexec -np 2 ./bin/pvserer
- ./bin/paraview
- connect to server
- Wavelet, Apply
- Treshold, Apply
- Hide wavelet
- Extract Surface, Apply
- Show Treshold
- Tools -> TimerLog -> Refresh/Clear/ShowAll
- Change the treshold value slightly, Apply
- Refresh timer log
Execute Threshold1 id: 31612, 0.001968 seconds
Execute Threshold1(UnstructuredGridRepresentation)/SurfaceRepresentation id: 31836, 0.001843 seconds
Execute Threshold1(ExtractSelection:0) id: 31613, 1.9e-05 seconds
Execute Threshold1 id: 31612, 0.000968 seconds
The last line is supplementary, shows that it is run two times and should not happen.
If you change any of the following parameters, the bug does not happen.
- Do not add the extract surface
- Replace the extract surface by any other filter (eg AppendDataset)
- run the server without MPI or builtin