[openrtm-users 03165] rtcryo の副作用に起因する rtresurrect の問題 (A problem in rtresurrect caused by side effects of rtcryo)
sasaki.akinori @ iri-tokyo.jp
sasaki.akinori @ iri-tokyo.jp
2015年 4月 27日 (月) 22:21:33 JST
東京都立産業技術研究センターの佐々木と申します。
rtcryo と rtresurrect (rtshell のツール)の組み合わせでシステム
復元を行っていた際に遭遇した問題につき、お知らせいたします。
(I would like to report a problem in restoring an RT system with
rtcryo and rtresurrect (tools in rtshell).)
問題, Problem
---------------------
rtcryo で保存したシステムプロファイルを
rtresurrect で復元するときに次のメッセージが表示され、
コンフィギュレーションパラメータが復元されない
rtresurrect: No such configuration set: default
(rtresurrect ends up with the following error message
and doesn't restore configuration parameters specified
in a system profile saved with rtcryo.
rtresurrect: No such configuration set: default)
一時的な解決策, Workaround
---------------------------------
A. 同じプロファイルを指定して rtresurrect を3回繰り返し実行する
B. あるいは, システムを構成する全ての RTC に初期化時点で conf.default
プロパティを持たせる(コンフィギュレーションパラメータを使わなくても)
(A. Execute rtresurrect 3 times with the same system profile.
B. Alternatively, make all the RT components composing the
system have some `conf.default' properties at initialization
even if the configuration parameters are not used)
テスト環境, Test environment
------------------------------
- Ubuntu 12.04 LTS (x86_64)
- rtshell (GitHub commit 4f3d49d83d0a20282c35b04ce3c35faad670aacf)
- rtsprofile (GitHub commit 23ff6f62aada7fefe0930bf5f1afde4017dbf6c0)
- rtctree (GitHub commit 630de13e64b0549eb9b49a111f2c223a6149eb1c)
- OpenRTM-aist 1.1.0 (x86_64)
- OpenRTM-aist-Python 1.1.0-RC1
- Python 2.7.3
- omniorb 4.1.6-1
問題状況の再現手順, How to reproduce the problem
----------------------------------------------------
# 設定 & 保存, Config. and save
[00]$ rtcwd /localhost/foo.host_cxt
[01]$ cd /usr/share/openrtm-1.1/example
[02]$ ./ConsoleInComp & # --> job spec %1
[03]$ ./ConsoleOutComp & # --> job spec %2
[04]$ cd ~/test/
[05]$ python DoodleDoo.py # --> job spec %3,
# --> DoodleDoo は 2個の config set を持つ (default と mode1) RTC
# ( DoodleDoo is an RTC that has 2 config sets, default and mode1. )
[06]$ rtcon ConsoleIn0.rtc:out DoodleDoo0.rtc:in
[07]$ rtcon rtcon DoodleDoo0.rtc:out ConsoleOut0.rtc:in
[08]$ rtcat -ll ConsoleInComp |grep conf
# --> この時点では conf.default なし
# (No `conf.default' at this point)
[09]$ rtcryo -x -o test_sys.xml localhost
# --> test_sys.xml に ConsoleIn につき rts:activeConfigurationSet="default" 指定なし
# (`rts:activeConfigurationSet="default"' not specified for ConsoleIn in test_sys.xml)
[10]$ rtcat -ll ConsoleInComp |grep conf
# --> この時点では conf.default あり (rtcryo の副作用による)
# (`conf.default' added at this point because of side effects of rtcryo)
[11]$ rtconf DoodleDoo0.rtc -s mode1 act
[12]$ rtconf DoodleDoo0.rtc
+default
+mode1*
[14]$ rtcryo -x -o test_sys2.xml localhost
# --> test_sys2.xml に ConsoleIn につき rts:activeConfigurationSet="default" 指定あり
# (`rts:activeConfigurationSet="default"' specified for ConsoleIn in test_sys.xml)
# 復元, resurrection
[15]$ kill -9 %1 %2 %3
[16]$ cd /usr/share/openrtm-1.1/example
[17]$ ./ConsoleInComp &
[18]$ ./ConsoleOutComp &
[19]$ cd ~/test/
[20]$ python DoodleDoo.py
[21]$ rtresurrect test_sys2.xml
rtresurrect: No such configuration set: default
# --> NoConfSetError 例外が発生する,
# (NoConfSetError exception was raised)
# at /usr/local/lib/python2.7/dist-packages/rtshell/actions.py, Line 318
[22]$ rtconf DoodleDoo0.rtc
+default
+mode1
# --> どちらの config set も active でない
# (no active config set)
[23]$ rtresurrect test_sys2.xml
rtresurrect: No such configuration set: default
[24]$ rtconf DoodleDoo0.rtc
+default
+mode1*
# --> NoConfSetError 例外は発生するが DoodleDoo の設定は 復元される
# ( NoConfSetError exception was raised, but the config set
# for DoodleDoo was restored.)
[25]$ rtresurrect test_sys2.xml
# --> もう一度実行すると エラーメッセージがでない (No error message)
要因, Causes
------------------
起動時点の ConsoleIn には conf.default プロパティが存在しません [02]。
しかし rtcryo の副作用で conf.default プロパティが追加されます [08]-[10]。
さらに DoodleDoo の config parameter を変更した後で rtcryo を実行しますと
ConsoleIn に active config set 指定がある状態で test_sys2.xml が保存されます [14]。
再度起動した ConsoleIn には conf.default プロパティが存在しません [17]。
このため rtresurrect で test_sys2.xml の復元を行おうとしますと
NoConfSetError 例外が発生します [21]。
DoodleDoo は rtresurrect による処理順で ConsoleIn よりも後なので,
ConsoleIn について NoConfSetError 例外が発生しますと
DoodleDoo のコンフィギュレーション復元が行われません [22]。
参考: /usr/local/lib/python2.7/dist-packages/rtshell/rtresurrect.py, Line 236.
(ConsoleIn doesn't have the `conf.default' property at start [02].
But rtcryo has side effects to add the `conf.default' property
to the component [08]-[10]. On executing rtcryo after changing config
parameters in DoodleDoo, it saves the active config set specification
for ConsoleIn in test_sys2.xml [14].
Because ConsoleIn doesn't have the `conf.default' property at restart [17],
executing rtresurrect with test_sys2.xml will raise NoConfSetError [21].
NoConfSetError exception raised for ConsoleIn keeps
DoodleDoo away from configuration restoration
since "DoodleDoo" is after "ConsoleIn" in order of actions taken by
rtresurrect [22].
see /usr/local/lib/python2.7/dist-packages/rtshell/rtresurrect.py, Line 236.)
--
地方独立行政法人 東京都立産業技術研究センター
ロボット事業推進部 ロボット開発セクター
佐々木 智典
-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: DoodleDoo.py
型: text/x-python
サイズ: 2420 バイト
説明: 無し
URL: <http://www.openrtm.org/pipermail/openrtm-users/attachments/20150427/a48d261a/attachment.py>
More information about the openrtm-users
mailing list