Menu

#20 message version checking

open
nobody
None
2
2003-07-03
2003-03-08
Eric Parker
No

We want to be able to verify the compatibility of
messages over time. First a few bounding notes:
- this has nothing to do with the revisionNumber
of a SandPersistMessage. That's the version of
the data, not the version of the struct def.
- messages serialized to XML may be transformed
by the adaptor nodes either inbound or outbound
or both. That's separate processing on a
per-application basis.
This RFE deals with autogenerated validation of
message versions and recovery hooking. This is
not a substitute for adaptor nodes, it's an
additional mechanism.

Phew. Ok, here's the idea. Each transmittable
message also has a getStructVersion() method, which
typically returns the CVS version (or whatever is
specified). The generator will need to be able to
load a class to support other systems, but this
method is written automatically.

The message receiver checks the version number of
the message to see if it is the same as what it
understands. What it understands was also
generated at compile time. If the receiver does
not understand then it first calls it's own
versionConvertTo method. If this fails, then
- if the message was received asynchronously,
then the node shuts down. It doesn't understand
what is going on, so it shuts down to avoid
causing any damage in its ignorance. This
behavior can be overridden.
- otherwise, if the message was received
synchronously, the node returns an error
STATUS_VERSIONERROR with the the expected
version as the first part of the error text.
The sender then attempts to convert the version
by calling its boolean versionConvertTo method.
If this method returns false (it was not
overridden or no conversion was possible), then
an error is logged and the messaging failure
propagates. Otherwise the converted message is
resent.

That's about it. Nodes are processing and are not
handled through this data versioning mechanism.

Discussion

  • Eric Parker

    Eric Parker - 2003-07-03
    • priority: 5 --> 2
     
  • Eric Parker

    Eric Parker - 2003-07-03

    Logged In: YES
    user_id=452458

    I lowered the priority on this, not because this isn't
    important, but because it's fairly situation specific and
    I'm not totally convinced this is something that can be
    handled automatically for all users. Let's see what comes
    out of a few real-life scenarios and then factor what's
    common if a common pattern develops. This approach seems
    fairly viable, so I'm leaving the RFE open in case somebody
    wants to try it for their particular situation. Maybe the
    result could be made available as an optional patch.

    The specifics of the version checking situation range way
    beyond hooking particular version control systems. The main
    issues revolve around the number of adaptor nodes and what
    kind of technology they are using, combined with the rate of
    structural message change intra/inter-enterprise.

    With document-based WS comms, the adaptor node may
    handle
    version checking as part of general validation, rather than
    an explicit activity. If versioning is very slow, and/or
    legally contractual, automated versioning may not be worth
    it. Likewise it might be less important on the consumer
    side and more important on the provider side. There's a
    big difference between bulletproofing deployment rollout
    and adapting inter-enterprise comms. The appropriate
    strategy is going to be pretty case specific.

    Leaving this open but back-burnered for now.

     

Log in to post a comment.

MongoDB Logo MongoDB