From: Bryan T. <br...@th...> - 2003-12-25 14:30:44
|
All , I was just thinking about how to reuse the workflow request journeling mechansims that Guy and I developed last year. It occurred to me that we could be journeling all requests as a repostiory behavior, not only for workflow concerns. This gives us one mechanism for restoring history, analyzing DOS attackes, etc. We can also resurrect the resource versioning mechanism that I did originally and expose access to version histories as a service aspect for any resource. a. Migrate workflow request, error, log mechanisms into the core repository to provide optional journeling for all requests. The journel entry should include the request headers, should optionally include various information about the HTTP Connection, especially the source IP, etc. for use not only in being able to playback the journel to re-create a repository state but also in analyzing DOS attacks. Use the journel IDENTITY column to assign a unique local name to resources created during POST requests (unless overriden by Local-Name-Hint). This will make it possible to replay the journel without breaking any depending external URIs. b. Add optional support for snapshot based version history to the representation table. Consider whether this is the primary representation table or a secondary (and possible a set of secondary) representation tables specifically for version histories. Note that XML diff algorithms could be used here, but we are already getting most of the benefit of from the request journel that if people use XPointer and PUT to make changes in resource state. c. Entries in both the version history and journel replay mechanisms can be sunset based on coherent repository state snapshots (as an optional admin task) since the repository can always be replayed from either the zero state or any other known state using the journel. If the version history mechansism is used to restore the state of a resource, then it must be done using another PUT (walking in forward time only) otherwise the repository state can no longer be used for journel playback restoration. That is: always make corrections through the HTTP interface, whether correcting by re-establishing the state of a resource from the version history or by re-establishing the state of the repository by playback from a known historical state. Provide a mechanism to mark resources and requests that should not be re-created during playback so that the journel can be annotated such as to not re-create a journeled DOS attack during playback. d. Playback can encounter stale authentication tokens that cause problems with either the direct manipulation of the repository (if there is local network security between the repository and the playback mechanism) and with delegated requests. Such authentication can be circumvented by tunneling the playback requests. However, requests that require delegating authority across network boundaries will always need to provide a challenge to the original agent. Clearly this can only succeed under certain network architecture plans. Happy holidays to all, -bryan |