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 easier Domain is a context manager.

Domain contains a registry of SalInfo 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 attribute domain and closes it when the controller is closed. To create a Remote 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 Remotes without a Controller 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 to user_host but Controller’s constructor sets it to SalInfo.user_index so that all Remotes constructed with the controller’s domain will have the controller’s identity. For testing purposes, it is allowed to change this field before constructing a Remote.

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

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.

remove_salinfo(salinfo)

Remove the specified salinfo from the internal registry.

Parameters:
salinfo : SalInfo

SAL component information

Returns:
removed : boolean

True if removed, False if not found