my caldav server has a custom text filter for icalendar files. when an icalendar resource is put into the server, its content is parsed and the icalendar data is indexed but not stored (well, the binary stream is, but the parsed out components, properties and parameters are not). subsequent queries for the resource are serviced wholly out of the index.
when filtering fails for some reason (say icalendar parsing fails), i'd like the PUT request to fail. in other words, the repository should communicate to the dav layer that indexing failed. but because indexing is implemented as an observation event, it doesn't appear that there is a regular code path that does what i want. one idea is to throw a specific runtime exception from the text filter and catch it in the layer that calls node.save(). that layer would have to explicitly remove the node upon catching the indexing exception. another idea is to chuck this whole index-but-dont-store strategy, which was devised in order to save storage space. our capacity goals are 10,000 users each with one 1,000 event calendar. without directly storing icalendar data in the repository, we'll need 10M nodes and 10M properties; adding icalendar components, properties and parameters might require another 100M or more of each. so you can see why storage space is at a premium :) anybody have any other suggestions?