Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [hyades-dev] Hyades Base Agent & Collector Interface Specification

It's my understanding that JNI actually uses a variant of UTF-8 where
null characters are represented in a two-byte format, so we may have an
issue to deal with either way, and we should clearly specify what we
mean by UTF-8 (standard or JNI interpretation).

Can anyone tell me roughly what percentage of existing agents are
implemented in Java?

-Andy

-----Original Message-----
From: hyades-dev-admin@xxxxxxxxxxx [mailto:hyades-dev-admin@xxxxxxxxxxx]
On Behalf Of Allan K Pratt
Sent: Monday, August 09, 2004 5:52 PM
To: hyades-dev@xxxxxxxxxxx
Subject: Re: [hyades-dev] Hyades Base Agent & Collector Interface
Specification

These are some review notes upon reading this document for the first
time.

As I read a document like this I try to wear several hats:
        1. Does this cover everything I might need or want within its 
scope?
        2. Could I implement an agent based only on this document,
without 
ambiguity, contradiction, or holes?
        3. Could I implement a CLIENT of an agent based only on this 
document? Could I reliably drive a generic conforming agent?

I notice that some strings in this spec say they are UTF-8, and others
do 
not. If you have a "Conventions" section at the top that says ALL
strings 
are UTF-8, you won't have to worry about mentioning it in the
description 
of every command and response that uses strings. If this document is
based 
on some presumed conventions (at Layer 1 or Layer 0?) then you should 
refer to those explicitly.

Oh, and are the UTF-8 strings also null-terminated? All strings come
with 
a length count, but it can also be convenient (especially for native
C/C++ 
code) if they're null terminated. This question applies across the
board, 
at all levels of the protocol. And then make sure you say whether the 
length count includes the null byte.

1.1.1.2.1 Initialize: Is there a requirement that somebody call
initialize 
before doing anything else with the agent? If so, how can a program 
driving the agent know whether Initialize has already been called or
not? 
Consider a long-running agent which could survive across multiple client

(Workbench) sessions. What if I call Initialize again, after it's
already 
been called -- does the agent reset its state, or ignore the second 
Initialize command, or what? I think we have to remember how loose the 
coupling is between agents and the code that drives them, and not burden

the clients with preconditions ("Call Init before calling anything else,

but only call it once").

1.1.1.2.2 Deregister: Once an agent is de-registered, it seems like it 
would be impossible to send it any more commands. How is this different 
from Terminate?

1.1.1.2.3 Get Agent Name: the text says, "Agent Name is like a class 
name." What does that mean? And why is there a reference to agent
metadata 
in this section and nowhere else?

1.1.1.2.5 Is Attached: does this query make sense for an agent that can
be 
attached to multiple processes simultaneously? Is there a reason you 
didn't write a query for me to find out WHAT process(es) the agent is 
attached to?

1.1.1.2.7 Un-Initialize: What state is the agent in after calling 
Un-Initialize? How is it different from Reset?

1.1.1.3.4/5 Set/Add Property: I don't think it's necessary to have "Add 
Property" ... Is it so bad if "Set Property" has the behavior of "Add"
if 
the property doesn't already exist?

1.1.1.3.7 Validate Configuration: The existence of this command implies 
that it's possible to send an invalid property set to the agent without 
the Set Property or Set Property Bag commands returning an error. Is
that 
wise? What is the behavior of the agent if the configuration is not
valid?

1.1.1.4.3 Get WSDL Definition: Why does this command's description use 
conditional language? The response data is "possibly" in WSDL format? 
What's the alternative? This is a specification; it shouldn't leave
things 
open-ended like this. If it's like this because the question is 
unresolved, I'd like to see the description say so.

1.1.1.4.4 Check Compatibility (with another agent): Besides an
affirmative 
"yes" and an affirmative "no," another likely response is "I don't know,

I've never heard of that agent." Or is that one of the error codes 
available to the NOT_COMPATIBLE response? Since this document doesn't
list 
error codes, I can't tell.

1.1.1.5.1 Add Agent Event Listener: Is the mapping of Event IDs to
events 
known? Or maybe events and their IDs are always agent-defined. In that 
case a generic client couldn't make use of this. Unless the events and
IDs 
are defined in the WSDL or something else queryable. Also, why do I have

to send the Server ID in this case? Isn't it implicitly "the same server

that this command came through"?

About add/remove agent event listener and also "set property bag": are 
these commands meant to be transactional? That is, if there is an error
in 
processing ANY PART of the command, you reject and ignore ALL of it? 
Otherwise I can see being *partly* deregistered, or having changed
*part* 
of the property bag.

1.1.1.6 Base Collector Interface: As noted in the text, this interface
is 
designed for agents which collect observation data locally, and return 
that data to callers on demand. Not all agents work like that; maybe
there 
should be two subclasses of base agents, for "live data" and "aggregated

data" types.

1.1.1.6.1 Run: I can't make out this command. Is it required to get data

collection going? I think it suffers from the same problems as Init.

1.1.1.6.8 Agent State Machine: This diagram doesn't match the commands 
listed above. The "Run" command doesn't appear in the diagram, and the 
"Configure" command does. "Get Data," too, is on the diagram and not in 
the description. Also, reading the diagram I notice that Cancel is not 
allowed from the Data Waiting state. If I've sent Stop and then decide I

don't want the data, Cancel should be allowed. Also, Reset seems like it

should be available from all states. Finally, I can't make out the state

pattern or usage scenario for "Snapshot" and how it relates to the "Data

Ready" event and state. 

-- Allan Pratt, apratt@xxxxxxxxxx
Rational software division of IBM

_______________________________________________
hyades-dev mailing list
hyades-dev@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/hyades-dev


Back to the top