-
Notifications
You must be signed in to change notification settings - Fork 589
Make extension attributes siblings to our attributes #225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
FWIW, this aligns with RFC 6648 advice about not separating Advice to protocol designers from section 4:
This suggests that we should establish some sort of registry (with "simple, clear registration procedures") as well. Should that be part of this PR? |
I'll need to think about this more. This has pros and cons for each of our representations. For HTTP it seems that the prevailing wisdom has shifted (though I still think there are problems with header casing that we should continue to discuss in #177) For protobuffers we'll still need a separate map of extensions due to format restrictions (only well named types will have a tag number; we'd need a map<string, google.protobuf.Any> for extensions. Any coding framework that has well-typed structs also will fields vs maps. Unless I'm missing something, I think we're still going to have some noticeable differences between extensions and ratified fields, though this should definitely make the graduation problem simpler since there is no difference between many wire protocols. |
During 6/15 F2F we agreed to:
|
e6452b7
to
d33e325
Compare
Reworked and added a sentence about trying to avoid name conflicts. |
spec.md
Outdated
CloudEvent producers MAY include additional extension attributes within the | ||
event. Each specification that defines how to serialize a CloudEvent will | ||
defined how extension attributes will appear. When defining a new extension | ||
care SHOULD be taken to use a name that is descripting enough to reduce the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/descripting/descriptive/ ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM with nits
http-transport-binding.md
Outdated
@@ -168,19 +168,6 @@ Examples: | |||
* `eventID` maps to `CE-EventID` | |||
* `cloudEventsVersion` maps to `CE-CloudEventsVersion` | |||
|
|||
For the `extensions` attribute, each entry of the `extensions` map |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought each transport binding would also indicate a default placement for extensions. Is that not the case or are you waiting for Clemens to add?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was assuming Clemens would open a new PR to do that part of the work. He has an AI:
AI Clemens: Need an “escape hatch” in our binding specs to allow attributes to override the serialization rules defined.
"contentType" : "text/xml", | ||
"data" : "<much wow=\"xml\"/>" | ||
"data" : "<much wow=\"xml\"/>", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems like we should still have some prose that says something along the lines of "additional attributes (extensions) are added as top-level keys to this document."
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hoping that'll be done by @clemensv's PR
spec.md
Outdated
defined how extension attributes will appear. When defining a new extension | ||
care SHOULD be taken to use a name that is descriptive enough to reduce the | ||
chances of it overlapping with other extensions. | ||
See the [Extensions](extensions.md) document for a list of possible extension |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe s/possible/known|documented ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I like "documented", will change
spec.md
Outdated
attribute value can therefore be a JSON object, array, or value. | ||
|
||
|
||
When this attribute is omitted, the "data" attribute simply follows the |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit: It's often best to avoid the word "simply" in documentation.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was simply copying the old text LOL
But I removed it
spec.md
Outdated
@@ -300,6 +300,14 @@ attributes and the event data will be materialized. For example, in the case | |||
of a JSON serialization, the context attributes and the event data might | |||
both appear within the same JSON object. | |||
|
|||
CloudEvent producers MAY include additional extension attributes within the | |||
event. Each specification that defines how to serialize a CloudEvent will | |||
defined how extension attributes will appear. When defining a new extension |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
s/defined/define/
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed - thanks
I'm a little concerned with extensions having the ability to define top level keys. This area seems like it should be reserved for keys that have been adopted by this specification and we should provide a path for promoting keys to the top level. If we allow for anyone to write a transport spec that defines how their values map to the event envelope we run the risk of quickly polluting the top level keys and leaving little room for this specification to grow without conflicting with various implementations in the ecosystem. Keeping extensions tucked away within an I do agree with the idea that the transport specification should be responsible for laying out how the transport maps values (like headers) to the |
@evankanderson I'd prefer to have the discussion about some kind of "extension registry" as part of a separate PR/issue because I suspect it'll require a lot of discussions - and might be controversial. |
@brianneisler one of the reasons the use of "X-" prefixes on HTTP headers have been dropped is to reduce the pain involved with promotion of extensions to "spec-defined" attributes. Once the promotion happens we're in a tough spot because then people have to support both variants (X- and non-X-) and that's annoying as well as error prone, and for how long do people need to support both? So, for this reason having some mechanism in which we make extensions "different" from spec-approved metadata is now considered less than optimal. This, of course, still leaves us with the other issue you mention... collisions. To me we can't avoid this no matter what we do. There are lots of ways this might happen:
In the end it feels a bit like a problem we can't solve via some kind of prefixing/bagging/etc... because we can't control (or ban) all others options - so, is trying going to cause more pain/confusion than not? I think so. Mainly because I think providing more than one way to do something is a recipe for interop issues and confusion - and that then leads me to the conclusions that we should just use whatever extension mechanism is automatically provided by the serialization/transport we're using. AND, tell people to be smart about how they name thing. If they're defining something for a particular app then prefix the name with something related to that app. If they honestly think they're defining something "for everyone" then they can choose a more generic name but they run the risk of conflicting with an official name later on, if they can't convince the standards owner to adopt it - its a gamble but it might force them to do the rigth think and bring their proposal to the spec owner rather than trying to "standardize" it through some other means. |
A project I am working on is currently exploring plans to have their Lambda functions work only on CloudEvents. As in they will have an initial entry point that wraps and packages an event nicely. Something along the lines of: exports.myHandler = function(event, context)
{
cloudEvent = createCloudEvent(event, context)
result = actualFunction(cloudEvent)
return result;
}
function actualFunction(CloudEvent ev)
{
// ... logic here ...
} A "packaged CloudEvent" created by the {
"cloudEventsVersion" : "0.1",
"eventType" : "com.Something",
"eventTypeVersion" : "1.0",
"source" : "/mycontext",
"eventID" : "A234-1234-1234",
"eventTime" : "2018-04-05T17:31:00Z",
"contentType" : "application/json",
"data" : " ... actual playload here ... ",
"application-properties": {},
"extensions" : {
"NAME-aws-context" : {
// some can be missing or be empty, app logic will decide what to do
"version" : "ef1202", // context.functionVersion
"memoryLimitInMB" : "1024", // context.memoryLimitInMB
"awsRequestId" : "UUID", // context.awsRequestId
"credentials" : "", // context.identity AKA Cognito details
"client" : {
"version" : "1", // clientContext.client.app_version_name
"platform" : "iOS", //clientContext.env.platform
"platformVersion" : "11.3", // clientContext.env.platform_version
"model" : "iPhone X", // clientContext.env.model
"locale": "en-GB", // clientContext.env.locale
}
},
"NAME-request" : {
// extracted headers
// request path
// env variables and whatever else
}
}
} Now, this is very early planning and the whole thing might be a bad idea. But the plan is incompatible with #260 and #225. Is the workflow described above something that is worth supporting? Personally I really don't like the idea of allowing top-level attributes other than the ones defined by the spec. The promoting fields from extensions to "spec-defined" is definitely something that needs to properly planned. In my opinion, making everything top-level is just asking for lots of conflicts. |
Based on some conversations I had last week, I think there is some confusion around what "extensions" are (and re not). So I put this together: https://docs.google.com/document/d/1ujwLmiV16l3fT7sCn1KqXPNkKHUXq3ZwBVYYNX6ekkc/edit# |
@Vlaaaaaaad its not clear to me why #260 and #225 would be incompatible. Sure, the way |
@duglin : #260 makes everything a string which results in no more nested objects. The Regarding the |
#260 could still work, its just encoding the object as a string and would need to be deserialized into JSON if that's what people want. What's interesting about your usecase is that its not clear to me that we should encourage people to treat the CloudEvent attributes as the same as "data". I envisioned people moving just the bare minimum into the CE attributes to do proper routing - but that all "real" data would go into "data". So, when I see "memoryLimitInMB" I really question why that would be at the CE level and not embedded within "data". Do we want to encourage people to duplicate all "data" into CE's properties? Or ask them to think a lot about which spot it should go? I guess I assumed almost all data would go into "data" and just routing stuff would be CE properties. Thinking about HTTP headers again... if you were to encode this CE as raw HTTP (with "data" as the HTTP Body) would you put all of that aws-context data as an http header? I'm guessing no, but I could be wrong - but if you did, I would point out that it would be a string. :-)
Sure, why not? I can just as easily look for |
For instance, with the distributed tracing spec, fields like |
@matzew correct. |
@duglin: hm... I was looking at I would've say kept the payload to "this file was created" and any details about what transaction that is part of, who created that file( say Cognito details in AWS), device details( if it was a direct client action through say iOS AWS SDK), Lambda details, and so on would've been extensions. Looks like I'll keep exploring ideas. Probably using just 1 CloudEvent without a |
@Vlaaaaaaad you certainly can use extensions for how you want to use it, by definition extensions can be anything and we can't stop people from doing so. However, and this may just be my perception of things, I always envisioned the CE properties to be more about routing than the payload/data of the event for a couple of reasons: I tend to think of This entire discussion of the purpose of "CE properties" vs "data" is probably a good discussion to have, and good info to put into a primer regardless of whether we have an "extensions" bag or not. |
@@ -300,6 +300,14 @@ attributes and the event data will be materialized. For example, in the case | |||
of a JSON serialization, the context attributes and the event data might | |||
both appear within the same JSON object. | |||
|
|||
CloudEvent producers MAY include additional extension attributes within the | |||
event. Each specification that defines how to serialize a CloudEvent will | |||
define how extension attributes will appear. When defining a new extension |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Need to clarify what is meant by "include additional extension attributes within the event"? Do you mean Event producer can include any random attributes (and give it a name the producer likes) within the top level event attributes? If so, how could the event consumers know the semantics of those attributes? How could the event consumers know how to decode the random attributes (are they strings or ints ?) and properly use them?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
your question applies to all extensions no matter where they appear.
event. Each specification that defines how to serialize a CloudEvent will | ||
define how extension attributes will appear. When defining a new extension | ||
care SHOULD be taken to use a name that is descriptive enough to reduce the | ||
chances of it overlapping with other extensions. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we put all new attributes at the top level of the CloudEvents or in one big extension bag, then no matter how descriptive the name is, different people could interpret it differently since the same name could mean different things in different context. Proper categorization/grouping of attributes seems the way to go.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actually, I come the opposite conclusion. Trying to define lots of different bags feels like an exercise in futility to me. Even the one bag you've defined for "correlation" already is ambiguous (see #258 (comment)) and overlaps with CE's own properties. If we can't even define one bag that doesn't overlap then I don't see how we'll be able to create lots.
I would much prefer a simple model where we have a single location for properties and people clearly define what each property "means", not necessarily what its "used for" since how each might be used (and in how many ways it might be used) will vary in each case. Note that the same property might be used for more than one reason at the same time and I think asking people to duplicate it would be a bad UX.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I feel defining lots of and thousands of random unrelated attributes in a single bag will be very confusing to the event consumer. The ambiguity you listed in #258 (comment)) applies to existing attribute eventTime and contentType etc. too.
Signed-off-by: Doug Davis <dug@us.ibm.com>
A few of the serverless applications we are looking at require the event producer to provide information to the event gateway for easy identification. Having a separate bag called "correlationLabel" or "identificationLabel" as proposed in #258 suits our application well. |
If the true purpose of the "correlationLabel" bag is to identify the source then the However, this doesn't explain why these other source identifying bits must be in a bag when the semantics of those extra fields will clearly state they're for identifying the source. See "Defining, Using and Discovering Extensions" in https://docs.google.com/document/d/1ujwLmiV16l3fT7sCn1KqXPNkKHUXq3ZwBVYYNX6ekkc/edit#heading=h.9kda29ynebh5. An extension does not exist w/o a definition and its presence in a bag, or not, does not change that. |
I'd say the true purpose of the bag (identificationLabel or correlationLabel) is to identify / differentiate the event within the source. In this sense, it is more of an event identifier rather than a source identifier. |
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Closing in favor of #277 |
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
Replacement for PR cloudevents#225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
…277) * Move extension serialization into other specs & rename extensions.md Replacement for PR #225 Made spec.md into more of an infoSet spec that just defines the properties of a CloudEvent and abstractly talks about how extension properties can be defined by others. Added some text to the primer to help clarify when extensions should be used and when extra properties are meant to be part of the event (`data`) itself. Renamed "extensions.md" to "experimental.md" because there was some confusion that CE extensions were only allowed to come from that doc. Hopefully, renaming it will make it clear that extensions can come from anythere - not just that doc. Left each serialization/transport-binding spec to deal with extensions in their own way. Most say nothing special about them, which means they will be serialized just like any other CE attribute. Based on the discussions in: https://docs.google.com/document/d/1h4A4ys3x6OmfEIv1gqlOt0kroVRfRO3JewlLunlxTIg/edit# , while it wasn't unanimous it did seem there was more people leaning towards serializing extensions like all other attributes due to the pain involved in: dealing with promotion of extension to 1st class properties, the desire to pass along all extensions (top-level or nested ones) to backend components, and support for future attributes added to the spec. See the doc for more details. Signed-off-by: Doug Davis <dug@us.ibm.com>
A top-level
extensions
bag doesn't scope the extensions to anything other than to the event itself, which means in:foo
andbar
would have the same scoping. This would serve no purpose other than to confuse people as to when to use one extension point verses the other. And what does it mean when one is used vs the other? What if both are used? What if the same name is used in both spots - which one wins? These types of questions, while solvable, add unnecessary complexity. I think its much cleaner if we just used the natural extensibility of whatever encoding/transport being used.Signed-off-by: Doug Davis dug@us.ibm.com