|
|
[[_TOC_]]
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### How-to post-install CII services
|
|
|
|
|
|
Most CII services (not: telemetry and alarms) come as part of the DevEnv installation, however some post-installation set-up is needed before they can be used.
|
... | ... | @@ -20,6 +21,8 @@ yum -y update elt-ciisrv-postinstall |
|
|
|
|
|
On DevEnv 3.5 inside ESO, and DevEnv 3.6+, there is nothing to do.
|
|
|
|
|
|
**Postinstall*
|
|
|
|
|
|
Afterwards, execute this command (as root):
|
|
|
```
|
|
|
# /elt/ciisrv/postinstall/cii-postinstall <choose a role>
|
... | ... | @@ -31,6 +34,7 @@ For more details and examples, see the [cii-postinstall user manual](https://elt |
|
|
After postinstall, you will want to start the CII services on your host (unless you have assigned the "groupclient" role to the host, which means you will use the CII Services running on another host).
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### How-to start/stop CII services
|
|
|
|
|
|
The cii-services utility lets you start/stop/monitor the CII services. For some operations, it requires root-privileges -> it will show a password prompt when needed.
|
... | ... | @@ -58,7 +62,7 @@ To learn about the options, run the command without arguments. |
|
|
For more details and examples, see the [cii-services user manual](https://eltjenkins.hq.eso.org/job/CII/job/Docs-Build-Master-Next/lastBuild/artifact/userManual/build/ciiman/html/docs/services.html)
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### How-to get CII Demo apps
|
|
|
|
|
|
CII has demo apps that you can download as source, modify, and build yourself. They demonstrate the use of the CII services.
|
... | ... | @@ -83,7 +87,7 @@ After this, you find the list of available demo apps in the (generated) README f |
|
|
Most demo apps require CII Services be running on your host or on another host => Check that the related CII Services (e.g. config service for a a config demo app) are accessible: see [How-to start/stop CII Services](#how-to-start-stop-cii-services)
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Failure to build ZPB from ICD \[ICD waf build\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -117,7 +121,7 @@ In the first case, the code that gets generated for the member looks to the comp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### No cpp/python from ICD \[ICD waf build\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -143,6 +147,8 @@ declare_project(name='mytests', |
|
|
recurse='myconfig mylsvsim icd tests')
|
|
|
```
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Mock OLDB for unit tests \[cpp\]
|
|
|
|
|
|
**Question**
|
... | ... | @@ -187,6 +193,8 @@ NOTE: For python, a MR was created to add the feature: <https://gitlab.eso.org/c |
|
|
|
|
|
Example in <https://gitlab.eso.org/ahoffsta/cii-srv/-/blob/oldb-in-memory-missing-python-binding/oldb-client/python/oldb/test/oldbInMemoryTest.py>
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Catching API Exceptions \[Python\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -267,6 +275,8 @@ Unfortunately, in the backtraces you will always see the original name instead o |
|
|
|
|
|
This question was originally asked in [ECII-422](https://jira.eso.org/browse/ECII-422).
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### access_key empty (DevEnv 3.2.0) \[OLDB\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -310,6 +320,10 @@ The CII post-install procedure is able to hotfix the settings (ECII397). |
|
|
|
|
|
The problem will be fixed in DevEnv 3.4.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Datapoint already exists \[OLDB\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -401,10 +415,23 @@ Update: As of [ECII-303](https://jira.eso.org/browse/ECII-303), this should no l |
|
|
|
|
|
**Solution 3**
|
|
|
|
|
|
If none of the above helped, another possibility is to clean-up the metadata.
|
|
|
If none of the above helped, another possibility is to clean up the metadata.
|
|
|
|
|
|
This is a potentially very invasive operation. Please contact us for instructions.
|
|
|
Warning: This is an invasive operation. It deletes all datapoints in the OLDB.
|
|
|
|
|
|
If you feel confident, and you are on a single-developer host ("role_ownserver"), use the below commands. If you have doubts, or you are on a multi-user host, please contact us.
|
|
|
```
|
|
|
# Clean up the OLDB databases (on a role_ownserver host)
|
|
|
config-initEs.sh
|
|
|
oldb-initES
|
|
|
redis-cli flushall
|
|
|
cii-services stop config
|
|
|
cii-services start config
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Req/Rep Connection Listeners \[MAL Python\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -475,6 +502,9 @@ Remember to delete (assign None), to this object when closing the connection to |
|
|
|
|
|
*From \<<https://jira.eso.org/browse/ECII-212>\>*
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Command Line Tools and Python snippets \[OLDB\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -553,6 +583,9 @@ Type "help", "copyright", "credits" or "license" for more information. |
|
|
'my text'
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Latency on Pub/Sub \[MAL ZMQ\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -588,6 +621,9 @@ The issue has been first reported in [ECII-159](https://jira.eso.org/browse/ECII |
|
|
|
|
|
The problem lies in the ZMQ send queues. Default size is 1000 and with 144MB per message (in this case) this means 144GB. Limiting this to 1 (for a test) a publisher can handle 20 subscribers (tested) without any problems. The solution is to reconfigure the send-queue size appropriately.
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Choose middlewares to build \[MAL ICD\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -615,6 +651,8 @@ The available options are: |
|
|
- zpb_disabled = if True, disable ZEROMQ middleware generation
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Sending an array of unions \[MAL cpp\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -725,6 +763,9 @@ Your code does not work since you do not use union instance provided by the pare |
|
|
|
|
|
This issue was first described in [ECII-154](https://jira.eso.org/browse/ECII-154)
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### config not found on remote db \[Conf\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -772,6 +813,9 @@ the config service has consequently tried to load the config from the remote con |
|
|
|
|
|
To that end, the error message is misleading, and should be improved (ticket [ECII-208](https://jira.eso.org/browse/ECII-208)).
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Failed to send request, send queue full \[CII MAL\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -788,6 +832,10 @@ throw `new MalException("Failed to send request, send queue full");` |
|
|
|
|
|
Probably you have called close() on the CiiConfigClient instance somewhere, maybe also implicitly during a try-with-resource block.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Getting More Logs \[MAL\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -985,6 +1033,10 @@ Loggers for **mal-opcua** |
|
|
|
|
|
- malOpcuaClientEventLoop
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Change Log Levels at Run-time
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1016,7 +1068,11 @@ org.apache.logging.log4j.Logger logger, final org.apache.logging.log4j.Level lev |
|
|
```
|
|
|
elt.log.CiiLogManager.set_log_level(name_or_logger: Union\[str, logging.Logger\], level: logging.Level)
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### PYBIND errors \[ICD waf build\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1054,6 +1110,9 @@ icd/src/protobenchmark.xml |
|
|
|
|
|
In general, due to the many code generation steps taking place, your freedom in ICD file naming is limited.
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### multiple XMLs found \[ICD waf build\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1081,6 +1140,10 @@ The code generator for malicd_topics fails when the ICD file name starts with lo |
|
|
|
|
|
For more information, see also: [KB: PYBIND errors \[ICD waf build\]](onenote:#KB%20PYBIND%20errors%20[ICD%20waf%20build]§ion-id={F524F9BE-F51D-4A01-9976-93359FCC4966}&page-id={0FEE4FB9-C58B-4E8A-A276-2EC4367CFB30}&end&base-path=https://europeansouthernobservatory.sharepoint.com/sites/ELT_Control/SiteAssets/ELT_Control%20Notebook/Documentation/ELT%20Control%20KnowledgeBase.one)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### g++: internal compiler error: Killed \[waf build\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1161,6 +1224,10 @@ By default, ECM VMs come with 4 GB, but you want |
|
|
|
|
|
- 12 (if you run databases like elasticsearch on your host).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### More Frames expected \[CII MAL ZMQ\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1230,6 +1297,10 @@ and |
|
|
zpb.ps://134.171.2.220:57110/test2
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Address in use \[CII MAL ZMQ\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1276,6 +1347,10 @@ The above code is trying, on host eltcii33, to publish with an endpoint eltcii28 |
|
|
|
|
|
On eltcii33, the endpoint must be eltcii33.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Scheme not supported \[CII MAL\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1296,6 +1371,10 @@ The middleware is supported in fact, but failed to load. |
|
|
|
|
|
- E.g. in DDS, you are using a Qos profile xml file which has some illegal syntax inside.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Choosing a NIC \[CII MAL DDS\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1320,6 +1399,10 @@ Therefore, this boils down to configuring DDS. |
|
|
|
|
|
[KB: Configuring MAL-DDS](onenote:#KB%20Configuring%20MAL-DDS§ion-id={35F80A9B-72FF-4F78-8793-5C85A09EA1FD}&page-id={3DBEC40D-B2DB-4226-917F-23EAE6A4B01C}&end&base-path=https://europeansouthernobservatory.sharepoint.com/sites/CCS/SiteAssets/CCS%20Notebook/General.one)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Configuring DDS \[CII MAL DDS\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1364,6 +1447,10 @@ Example (C++): |
|
|
export NDDS_QOS_PROFILES=\<path of XML file>
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Variable Tracking exceeded \[CII MAL\]
|
|
|
|
|
|
**Problem**
|
... | ... | @@ -1403,13 +1490,21 @@ def configure(cnf): |
|
|
|
|
|
cnf.env.append_value('CXXFLAGS', \['-fno-var-tracking-assignments'\])
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Multithreading in Java
|
|
|
|
|
|
Look at this document:
|
|
|
|
|
|
- [Java JMM Visibility](Documents/Java-JMMVisibility.pdf)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
### Summary of OPC/UA MAL in C++
|
|
|
|
|
|
This article covers integration of OPC/UA in CII MAL specifically for OPC/UA Data Access and Subscription profiles. OPC/UA method invocation is also supported in CII MAL but is not described in this article, likewise details of the Python (and Java) support are not provided. Only C++ is considered here.
|
... | ... | @@ -1420,6 +1515,10 @@ The XML ICD definition of types in CII is used to map sets of data points togeth |
|
|
|
|
|
Each attribute in the defined type is connected to a corresponding data point in the OPC/UA data space via a URI. Thus the CII URI for a complex type will contain specific addresses of multiple nodes in the OPC/UA data space.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
#### Pub/Sub API for OPC/UA Clients:
|
|
|
|
|
|
The CII MAL Pub/Sub API utilizes OPC/UA Data Access Reads and Writes, as well OPC/UA subscription. A Publisher will directly trigger an OPC DA write, while a Subscriber will work in one of two ways, depending on the type associated with the subscriber:
|
... | ... | @@ -1452,6 +1551,9 @@ try { |
|
|
}
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------
|
|
|
#### Request/Reply API for OPC/UA Clients:
|
|
|
|
|
|
As OPC/UA Data Access read and write essentially follow a synchronous request/reply pattern, CII MAL also provides this interface for OPC/UA clients.
|
... | ... | |