Domain¶
-
class
lsst.ts.salobj.
Domain
¶ Bases:
object
dds domain participant and quality of service information.
Notes
Reads the following Environment Variables; follow the link for details:
- OSPL_MASTER_PRIORITY, optional is used to set the Master Priority. If present, it must be a value between 0 and 255.
Cleanup
It is important to close a
Domain
when you are done with it, especially in unit tests, because otherwise unreleased resources may cause problems. To make this easierDomain
is a context manager.Domain
contains a registry ofSalInfo
instances, so that it can close them when the domain is closed. The registry uses weak references to avoid circular dependencies (since SalInfo stores the domain).SalInfo
instances automatically register themselves with the provided domain.To conserve resources you should have only one
Domain
per process. Thus:Controller
creates its own Domain as attributedomain
and closes it when the controller is closed. To create aRemote
for a controller, use the domain from the controller, e.g.:controller = Controller(name="Test", index=47) try: remote = Remote(domain=controller.domain, name="Test", index=47) ... finally: await controller.close() # or if you only want the objects for the duration of a function, # e.g in a unit test: async with Controller(name="Test", index=47) as controller: remote = Remote(domain=controller.domain, name="Test", index=47) ...
If you are creating
Remote
s without aController
then you must create the Domain yourself and close it when you are finished, e.g.:domain = salobj.Domain() try: remote = salobj.Remote(domain=domain, name="Test", index=47) ... finally: await domain.close() # or if you only want the objects for the duration of a function, # e.g in a unit test: async with salobj.Domain() as domain: test_remote = salobj.Remote(domain=domain, name="Test", index=5)
Attributes: - participant :
dds.DomainParticipant
DDS domain participant.
- origin :
int
Process ID. Used to set the
private_origin
field of output samples.- default_identity :
str
Default value used for the identity field of
SalInfo
. Initalized touser_host
butController
’s constructor sets it toSalInfo.user_index
so that allRemote
s constructed with the controller’s domain will have the controller’s identity. For testing purposes, it is allowed to change this field before constructing aRemote
.- user_host :
str
username@host. This will match
identity
unless the latter is set to a CSC name.- idl_dir :
pathlib.Path
Root directory of the
ts_idl
package.- qos_provider :
dds.QosProvider
Quality of service provider.
- topic_qos :
dds.Qos
Quality of service for non-volatile DDS topics (those that want late-joiner data).
- volatile_topic_qos :
dds.Qos
Quality of service for volatile topics (those that do not want any late-joiner data). Note: we cannot just make readers volatile to avoid late-joiner data, as volatile readers receive late-joiner data from non-volatile writers. So we make readers, writers, and topics all volatile. According to ADLink it is a feature, not a bug.
- reader_qos :
dds.Qos
Quality of service for non-volatile DDS readers.
- volatile_reader_qos :
dds.Qos
Quality of service for volatile DDS readers.
- writer_qos :
dds.Qos
Quality of service for non-volatile DDS writers.
- volatile_writer_qos :
dds.Qos
Quality of service for volatile DDS writers.
Attributes Summary
salinfo_set
Methods Summary
add_salinfo
(salinfo)Add the specified salinfo to the internal registry. close
()Close all registered SalInfo
and the dds domain participant.close_dds
()Close the dds DomainParticipant. remove_salinfo
(salinfo)Remove the specified salinfo from the internal registry. Attributes Documentation
-
salinfo_set
¶
Methods Documentation
-
add_salinfo
(salinfo)¶ Add the specified salinfo to the internal registry.
Parameters: - salinfo :
SalInfo
SAL component information
Raises: - RuntimeError
If the salinfo is already present
- salinfo :
-
close
()¶ Close all registered
SalInfo
and the dds domain participant.May be called multiple times. The first call closes the Domain; subsequent calls wait until the Domain is closed.
-
close_dds
()¶ Close the dds DomainParticipant.