Requirement #2615 (closed)
Opened 14 years ago
Closed 14 years ago
Delete Refactoring and Performance improvements
Reported by: | jamoore | Owned by: | |
---|---|---|---|
Priority: | critical | Milestone: | OMERO-Beta4.2.1 |
Component: | n.a. | Keywords: | n.a. |
Cc: | cxallan, jburel, wmoore, atarkowska | Business Value: | n.a. |
Total Story Points: | n.a. | Roif: | n.a. |
Mandatory Story Points: | n.a. |
Description (last modified by jmoore)
See #2911 for the phase II work on this requirement and http://trac.openmicroscopy.org.uk/omero/wiki/Delete for user-level info on Delete.
Problem
The current (4.2.0) implementation of IDelete leaves much to be desired:
- Not enough methods to transactionally handle all deletes
- Too many objects are loaded into memory
- Too few EventLogs are created for some deletes
Solution
The intended solution is to have a central definition of "delete specifications" which can be used directly, embedded into one another, or extended by third parties via Spring. These specifications describe the ordered steps (or "delete entries") which will be performed for every id passed to the server. Clients pass any number of "delete commands" to the server for deletion in a single transaction. If any exception is thrown during processing, then all of the deletions are rolled back. Based on client-provided options, some form of exceptions can be safely ignored, so called "SOFT" deletes. Because deletions can take some time, the service is asynchronous and provides a report method as well as a cancellation method.
Options
Each delete command can also pass a string/string map of options. The key values consists of either the absolute path to a particular type like /Image/ImageAnnotationLink/Annotation or a simple path /Annotation, which will then either modify the options for all annotations attached to images or all annotations period. The value consists of one of the option settings below:
- HARD: default option which specifies that a path should be deleted if the user is the owner of the object or its group, or is an admin.
- SOFT: option for paths which should be deleted if possible, but no ConstraintViolationException should be thrown if it's not.
- FORCE: option for paths which should be deleted regardless of permissions and optimistic locks. The only thing which will prevent such a delete is a fatal DB error which will throw a FailedDeleteExcception. Note: it is not possible for non-admin users to specify the FORCE option.
Additionally for annotations, the value of the map can include namespace types which are to be excluded from the delete: "SOFT;excludes=openmicroscopy.org/example".
See also
- The official definition of the delete specifications is available in spec.xml
- Examples for using the new delete API are provided in all supported languages under trunk/examples/Delete
- For information on having your delete specifications recognized by the server, see ExtendingOmero.
Attachments (1)
Change History (25)
comment:1 Changed 14 years ago by jmoore
- Priority changed from major to critical
comment:2 Changed 14 years ago by jmoore
comment:3 Changed 14 years ago by jmoore
- Cc cxallan jburel added
- Milestone changed from Unscheduled to OMERO-Beta4.2.1
comment:4 Changed 14 years ago by jburel
- Cc wmoore added
- Description modified (diff)
comment:5 Changed 14 years ago by jburel
- Cc ome-nitpick@… added
comment:6 Changed 14 years ago by jmoore
- Description modified (diff)
comment:7 Changed 14 years ago by jmoore
- Description modified (diff)
comment:8 Changed 14 years ago by jburel
- Cc ome-nitpick@… removed
comment:9 Changed 14 years ago by jmoore
Notes from discussion (Jean-Marie, Josh, Chris):
- Ordered Steps
- Queue-based service (interface)
- Writing of fixtures (sample XML with all the objects)
- also use reports to see what was imported?
- way to remember to re-evaluate tests, say, when model is changed
- re-use loci code
- http://www.loci.wisc.edu/trac/java/browser/trunk/components/bio-formats/test/loci/formats/utests
- create a new suite for delete
- Report-blob for later re-attachment
- Gui stories
- From tree, user can delete any node
- From annotation panel, user can delete any annotations
- ...
- EventLogs via triggers
- Simple API prototype (possibly table)
comment:10 Changed 14 years ago by jburel
- Description modified (diff)
comment:11 Changed 14 years ago by jmoore
- Description modified (diff)
comment:12 Changed 14 years ago by jburel
- Cc atarkowska added
Looking at the possible cases, ROI measurements are file annotations so "attachements"
they should be removed when the ROI are removed.
We will need to be able to specify the NameSpace
comment:13 Changed 14 years ago by jburel
comment:14 Changed 14 years ago by jburel
Looking at deleting plate now (from client), we probably need to add
/PlateAcquisition? to the list of /Roots
comment:15 Changed 14 years ago by jburel
- Description modified (diff)
comment:16 Changed 14 years ago by jburel
- Description modified (diff)
comment:17 Changed 14 years ago by jmoore
comment:18 Changed 14 years ago by jmoore
- Description modified (diff)
comment:19 Changed 14 years ago by jmoore
comment:20 Changed 14 years ago by jmoore
comment:21 Changed 14 years ago by jmoore
comment:22 Changed 14 years ago by wmoore
- Description modified (diff)
comment:23 Changed 14 years ago by jmoore
- Description modified (diff)
comment:24 Changed 14 years ago by jmoore
- Resolution set to fixed
- Status changed from new to closed
4.2.1 released. Closing.
Notes from discussion (Jean-Marie, Josh, Chris):