ACS Container

The ACS Container package is responsible for the implementation of the Container part of the Container-Component model of ACS. This includes design patterns and high level services to manage the life cycle of Components and Containers themselves [RD01 - 5.1.2. Procedures]. This high level management part is implemented in a specific sub-package called the Management and Access Control package.

Containers are supervised and managed by an ACS Manager. Manager and Containers cooperate to provide the following functionality:

Components will be registered in the CORBA Naming Service. Properties of Characteristic Components are not registered in the naming service, but are accessed by retrieving their CORBA references from the Characteristic Component that contains them.

Access to the CORBA Naming Service and Component's life cycle is handled by a Management and Access Control Interface. A Manager is the communication entry point for clients: it provides access to the CORBA Naming Service (with added security, see below) and delegates to Containers the task to manage the life cycle (code loading, creation and destruction) of Components, based on the request of services from the clients.

The CORBA Naming Service is completely open and anybody can read and write into it. The Manager hides the CORBA NS and takes care of reading and writing into it under stricter control. A non-administrative client cannot get access to all information in the NS, but only to what the Manager provides. Should ACS fully implement the "authorization control" in the future, use of passwords and controlled access to the Manager could be used.


Figure 3.12: Management and Access Control architecture

The basic entities managed by the Management and Access Control interface (MACI) are Components.

To the management system, the Component is an entity with a lifecycle that has to be managed. Components can be instantiated in two different ways:

A Component implements the functionality that allows the interaction between the MACI infrastructure and an underlying object. The underlying object can be a Java Component, a C++ Component or other type of objects, for example CORBA services, which have to be managed by MACI.

Every Component has a unique designation. Well-formed Component designations are Component URLs or CURLs. A CURL is a hierarchical name implemented as a string of arbitrary length that consists of the static prefix curl:, domain identifier and Component name. An example of a CURL might be curl://alma/antenna1/mount, representing the mount Component for ALMA antenna number 1. MACI provides name resolution that from a well-formed Component designation generates the Component reference that can be returned to the client

Regular components are kept active if and only if there are clients referencing them. The Manager keeps track of all references and periodically verifies that the clients are still alive and deactivates unreferenced components.

The Manager provides an API to forcefully deactivate Components even if they are still referenced. This is used when shutting down parts of the system or when replacing at run time the implementation of a Component with anew one.

It is possible to have "non-sticky clients", whose reference to used components is not accounted by the Manager when deciding if a Component needs to be activated/deactivated. This is used, for example, for passive GUIs that monitor Components or interact with them only if the are already active for other reasons. Such "non-sticky clients" do not force the activation of a component if it is not already active when they request the reference from the Manager. In this way starting/stopping a GUI is unrelated with the status of Components and subsystems can be started up and shutdown independently from the GUIs.

It is possible to define a timeout before a regular Component not referenced any more is deactivated. This is useful when there are multiple clients intermittently accessing a component for a long period of time and we do not want the server component to be all the time activated and deactivated. Notice that an "immortal Component", i.e. a component that is never deactivated after a first activation even is all clients release it, is essentially a component with infinite timeout for deactivation.

Manager is the central point of interaction between the Components and the clients requesting their services. 

Manager has the following basic functionality:

Manager is the only interaction that clients have with MACI. Thus, neither Component implementers nor GUI client developers need concern themselves with aspects of MACI other than the Manager.

Manager implementation is based on CORBA Naming Service and all references to Components are available to clients not aware of MACI functionality through the CORBA Naming Service. A CURL-to-Naming Context mapping allows a one to one correspondence between Components retrieved using MACI services or from the Naming Service.

Manager provides also process control of Containers and CORBA services, i.e. it will be able to start/stop containers and CORBA services upon request.

A demon process runs on every host where Containers or services can be started. The Manager interacts with this demon to instruct it to start Containers. The demon provides also other services (in part still TBD) like collection of statistical data such as CPU , memory and disk load or availability (Partially implemented).

Manager can also deploy "collocated" Components, i.e. it can be requested to "deploy a Component in the same Container of another, given, Component"

The Pipeline/Offline teams define the requirements for process management by the Manager and described above, like redistribution of processes/containers for load balancing, dynamic allocation of components to container or redundancy and replication of components.

A Container serves as an agent of MACI that is installed on every computer in the control system.


Figure 3.13: Component activation sequence

There can be two types of Containers:


Figure 3.14: Porous vs. Tight Container access sequence

ACS provides just one implementation for the Manager interface (in Java) and three implementations for the Container:

Specialized Containers

Every client of a Component service that is not itself a Component shall implement an interface called maci::Client.

maci::Administrator is a special-purpose client that can monitor the functioning of the domain that it administers. Monitoring includes obtaining the status of the Components as well as notification about the availability of Components.

MACI allows organizing Components hierarchically and handling startup and shutdown dependencies between objects.

The Manager is the only responsible for providing references to Components.

An Object Explorer User Interface tool is provided to navigate the hierarchy of Components on the naming hierarchy.[RD01 - 5.1.3 Browser]

An Administrator User Interface (ACS Command Center) tool is provided. The Command Center: