Ticket #2239 (closed: fixed)

Opened 10 years ago

Last modified 5 years ago

Progress reporting doesn't work well with the Load() algorithm

Reported by: Steve Williams Owned by: Janik Zikovsky
Priority: major Milestone: Iteration 30
Component: Mantid Keywords:
Cc: Blocked By:
Blocking: Tester: Roman Tolchenov

Description

This makes it impossible to cancel a Load operation in progress

Change History

comment:1 Changed 10 years ago by Nick Draper

  • Status changed from new to accepted
  • Owner set to Nick Draper
  • Priority changed from minor to major

comment:2 Changed 10 years ago by Nick Draper

This is more important as we want the load algorithm to be widely used, and due to the size of some files Load will probably be the most cancelled algorithm ever.

comment:3 Changed 10 years ago by Nick Draper

This change is being implemented as a general solution for all algorithms.

All algorithms will:

  1. maintain a vector of weak pointers to any subalgorithms they create. Weak pointers will not prevent the algorithms from being destructed.
  2. On receiving a cancel command will pass it on to any valid sub algorithms.
  3. delete the list of weak pointers when the algorithm is destroyed. As they are weak pointers they have no effect of the lifetime of and subalgorithms.

comment:4 Changed 10 years ago by Nick Draper

(In [8783]) re #2239

Changes to Algorithm to allow subAlgorithms to be cancelled.

Now algorithms: Maintain a vector of weak pointers to any subalgorithms they create. Weak pointers will not prevent the algorithms from being destructed. On receiving a cancel command will pass it on to any valid sub algorithms. Delete the list of weak pointers when the algorithm is destroyed. As they are weak pointers they have no effect of the lifetime of and subalgorithms.

comment:5 Changed 10 years ago by Nick Draper

  • Status changed from accepted to verify
  • Resolution set to fixed

comment:6 Changed 10 years ago by Martyn Gigg

  • Status changed from verify to reopened
  • Resolution fixed deleted

comment:7 Changed 10 years ago by Martyn Gigg

  • Status changed from reopened to verify
  • Resolution set to fixed

(In [8829]) Add some threading protection for the new child algorithm cancellation mechanism. Fixes #2239

comment:8 Changed 10 years ago by Janik Zikovsky

  • Status changed from verify to verifying
  • Tester set to Janik Zikovsky

comment:9 Changed 10 years ago by Janik Zikovsky

  • Status changed from verifying to reopened
  • Resolution fixed deleted
  • Summary changed from Progres reporting doesn't work well with the Load() algorithm to Progress reporting doesn't work well with the Load() algorithm

I tried it with a large TOPAZ event file (run 1786, TOPAZ_1786_event.nxs, 1.4 GB) and no progress reporting was seen and I could not cancel.

comment:10 Changed 10 years ago by Janik Zikovsky

Extra note: Canceling does work if you call LoadEventNexus directly, though it does not respond fast enough in some cases (Made ticket #2423 for myself).

comment:11 Changed 9 years ago by Janik Zikovsky

  • Status changed from reopened to accepted
  • Owner changed from Nick Draper to Janik Zikovsky

comment:12 Changed 9 years ago by Janik Zikovsky

  • Status changed from accepted to verify
  • Resolution set to fixed
  • Milestone changed from Unassigned to Iteration 30

This is no longer an issue in a recent test.

comment:13 Changed 9 years ago by Roman Tolchenov

  • Status changed from verify to verifying
  • Tester changed from Janik Zikovsky to Roman Tolchenov

comment:14 Changed 9 years ago by Roman Tolchenov

  • Status changed from verifying to closed

Confirmed that Algorithm class has a vector of weak pointers to sub-algorithms. Loading raw and nexus files report progress and can be cancelled.

comment:15 Changed 5 years ago by Stuart Campbell

This ticket has been transferred to github issue 3087

Note: See TracTickets for help on using tickets.