OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

wsn message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Pull-type notification


Hi all,

Thanks Steve for the "pull-type" proposal and thanks Matt for the
excellent minutes on 2/2, they made me feel like I was in the room for
the "pull-type" discussion.

Since there was no final decision on the "pull-type" question and since
I am very interested in this issue (as the person who initially raised
it), I would like to send some comments on Steve's proposal and on the
discussion that took place.

I think we need to put in place a simple, self-contained and useful
mechanism in BaseNotif. Advanced features should be pushed to
specialized policy statements and/or extension specs. So I agree for
example with the group that a generic queueing mechanism is out of scope
for us but if/when someone comes up with it people should be able to use
it in conjunction with our "pull-type" support.

Specifically, I think we can simplify our task in BaseNotif by not
worrying about buffer size and buffer utilization. We have to recognize
that of course the providers of "pull-type" subscription will have
limits in how many messages they can store and they might have to drop
old ones. But advanced support for this (such as being able to advertise
quality of service on your persistence and/or exposing how much of your
buffer is currently used) is best left outside of BaseNotif.

As a result, I would like to modify Steve's proposal by

- Removing the MaxBufferSize and CurrentBufferSize properties
- Removing the BufferSize attribute in the subscription request

Basically, when I subscribe I know that not all messages will be
persisted for ever and that the notification producer will do its best
but doesn't guarantee anything. Anything beyond that is out of scope for
BaseNotif in my view.

In addition, I would like to make three modifications to the GetMessages
request proposed by Steve:

The first change might actually just be a clarification since I am not
sure how Steve intended it to work. If there are 100 messages in the
queue and I do a GetMessages(40) then I will receive the 40 most recent
messages and the entire queue will be cleared. Basically, every
GetMessages request clears the entire queue in addition to getting some
or all of the most recent messages.

The second change is to have the GetMessages request contain 2 optional
elements (or attributes): MaxMessages, as currently defined, but also
OldestTime. If MaxMessages is present then don't send me any more than
this many messages. If OldestTime is present then don't send me any
message older than this date. The two filters can exist on their own or
co-exist. Yes, they are transitive.

The last change is to create a special topic called "MessagesDropped".
The payload for this topic contains the number of messages dropped, the
date of the oldest message dropped and the date of the most recent
message dropped. This topic would be defined so that the event is only
emitted when the GetMessages request comes. So, even if my
implementation has dropped messages at several times in the past since
the last Get Messages request, there will only be one "MessagesDropped"
event for each GetMessages request (think of it as the Schroedinger's
cat of notifications, only realized when there is an observation). Note
that it doesn't matter if the messages were dropped because of space
limitations or because the GetMessages request asks for less messages
than are available in the queue. This is just a way to tell people that
they've missed something.

Now to the question that the group wasn't able to agree on by the end of
the meeting (overload the subscribe operation or create a new
operation). At the messaging level, there is no major difference
between:

(1)
<Subscribe>
  <ConsumerReference/>
  <TopicExpressionDialect/>
  <SubscriptionPolicy>
    <UsePull>true</UsePull>
  </SubscriptionPolicy>
</Subscribe>

and

(2)
<Subscribe>
  <ConsumerReference/>
  <TopicExpressionDialect/>
  <Delivery>http://.../pull</Delivery>
</Subscribe>

and

(3)
<SubscribeForPull>
  <ConsumerReference/>
  <TopicExpressionDialect/>
</SubscribeForPull>

So the difference is not really a messaging difference but rather a
metadata difference. Because based on which of the three formats above
we choose, the "can I subscribe for pull-type notification" question is
answered in a different piece of metadata.

With (1) and (2) it is describe using a TBD policy statement expressed
in a TBD policy framework retrieved through a TBD metadata retrieval
mechanism. With (3) it is described by the WSDL.

(1) is the most generic mechanism (there are many ways to qualify a
subscription and this is one of them). (2) is less general (there are
many ways to deliver a notification and this is one of them). (3) is
most specific.

I prefer (3) because this makes the simple pull-type feature available
out of the box in BaseNotif. Also, (3) doesn't prevent a mechanism like
the ones in (1) or (2) to be overlaid (to distinguish between different
types of push-type delivery and different types of pull-type delivery).
It just recognizes that there is a major differences between pull-type
and push-type delivery and that the semantic difference of a
subscription to one or the other is sufficient to warrant using the
premier metadata mechanism for Web services (WSDL) to denote it.

Regards,

William





[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]