100 likes | 184 Views
Asynchronous Message Service (AMS) Prototype Status. Scott Burleigh Jet Propulsion Laboratory, California Institute of Technology 25 August 2005. AMS Continuum. configuration MIB. configuration service. Message space for application Q, authority R. new zone specification. zone
E N D
Asynchronous Message Service (AMS) Prototype Status Scott Burleigh Jet Propulsion Laboratory, California Institute of Technology 25 August 2005
AMS Continuum configuration MIB configuration service Message space for application Q, authority R new zone specification zone registration registrar location query and response Zone A Zone B Registrar Registrar reconfig messages node registration heartbeat, ack, reconfig heartbeat, ack, reconfig application messages remote AMS messages Node Z Node X Node Y (a new node) RAMS gateway application messages application messages application messages
Example programs (1 of 2) #include "ams.h" static int runCatcher() { AmsNode me; AmsEvent event; int cn, zn, nn, len, ct; char *sname, *txt; ams_register(NULL,NULL,NULL, 0, "amsdemo", "test", "301", "catch", &me); ams_invite(me, "text", AmsPriorityStandard, AmsAssured); while (1) { ams_get_event(me, AMS_BLOCKING, &event); if (ams_get_event_type(me, event) == AMS_MSG_EVT) break; else ams_recycle_event(me, event); } ams_parse_msg(me, event, &cn, &zn, &nn, &sname, &len, &txt, &ct); printf("%d received '%s'.\n", getpid(), txt); ams_recycle_event(me, event); ams_unregister(me); return 0; }
Example programs (2 of 2) static int runPitcher() { AmsNode me; AmsEvent event; AmsStateType state; AmsChangeType change; AmsPriority priority; AmsDiligence diligence; int zn, nn, textlen; char buffer[80], *zname, *nname, *sname; sprintf(buffer, "Hello from %d.", getpid()); textlen = strlen(buffer) + 1; ams_register(NULL,NULL,NULL, 0, "amsdemo", "test", "301", "pitch", &me); while (1) { ams_get_event(me, AMS_BLOCKING, &event); ams_parse_notice(me, event, &state, &change, &zname, &zn, &nname, &nn, &sname, &priority, &diligence); ams_recycle_event(me, event); if (state == AmsInvitationState) { printf("%d sending '%s'.\n", getpid(), buffer); ams_send(me, 0, zn, nn, "text", textlen, buffer, AmsReportNone, NULL, 0); ams_unregister(me); return 0; } } } int main(int argc, char **argv) { if (fork() == 0) return runCatcher(); else return runPitcher(); }
Management Information Base <?xml version="1.0" standalone="yes"?> <ams_mib_load> <ams_mib_init continuum_nbr="1" continuum_name="jpl" ptsname="dgr"/> <ams_mib_add> <csendpoint epspec="2357:loretta.jpl.nasa.gov"/> <application name="amsdemo"> <role nbr="1" name="shell"/> <role nbr="2" name="log"/> <role nbr="3" name="pitch"/> <role nbr="4" name="catch"/> <role nbr="5" name="benchs"/> <role nbr="6" name="benchr"/> <subject nbr="1" name="text" desc="ASCII text"/> <subject nbr="2" name="noise" desc="more ASCII text"/> <subject nbr="3" name="bench" desc="numbered msgs"/> </application> <msgspace nbr="1" appname="amsdemo" authname="test"> <zone nbr="1" name="301"/> <continuum nbr="2" name="apl" desc="Johns Hopkins APL"/> </msgspace> </ams_mib_add> </ams_mib_load>
Initial Performance Statistics Publisher on a Pentium III, Red Hat 8.0 Linux. Subscriber(s) on a second Pentium III, Fedora Core 3. Underlying transport is TCP/IP over a 100 Mbps Ethernet switch.
GDS Sim Spacecraft Sim SPOF router admin VxWorks RAMS gateway RAMS gateway SMC controller libams ION ION ION libams libams DGR IP MC SPOF CLA (C) SPOF CLA (S) SPOF CLA (C) DGR DGR UDP TCP TCP TCP UDP (80) (80) UDP SMC target SMC controller amsd libams libams DGR VxWorks Msg queue DGR amsd IP MC DGR UDP Linux UDP DGR UDP UDP Linux SMC target Solaris libams VxWorks Msg queue DGR UDP Cygwin or Interix The Internet SMC target SMC controller libams libams VxWorks Msg queue DGR IP MC DGR UDP UDP SMC controller libams IP MC DGR firewall firewall UDP
What’s Done • Automatic discovery and dynamic reconfiguration • Startup, shutdown, registration • Exchange of subscriptions and invitations • Application message flow • Publish/subscribe • Private messages (send/reply) • Clean interface to underlying transport systems. Two adapters implemented so far: TCP and DGR (datagram retransmission, a reliable UDP system). • Heartbeat exchange, detection of unannounced crash.
What’s Not Done Yet • Test/debug failover among configuration servers • Non-trivial encryption; test/debug authentication and authorization • Periodic resynchronization • Other transport service adapters with other QOS features: vxWorks message queues, IP multicast, probably UDP • Remote AMS gateway • Port to Interix (Windows); port to Solaris; finish port to vxWorks
Other stuff for FY06 • Dynamic updating of MIBs, e.g., in response to changes in an information model • Message marshalling/un-marshalling per message definitions in MIB • JMS wrapper (JNI interface) • LabView wrapper • Matlab wrapper • Tcl/Tk wrapper