[openrtm-users 03175] Re: rtcryo の副作用に起因する rtresurrect の問題 (A problem in rtresurrect caused by side effects of rtcryo)

BiggsGeoffrey geoffrey.biggs @ aist.go.jp
2015年 5月 13日 (水) 07:11:11 JST


東京都立産業技術研究センター 佐々木様

産総研のジェフです。

とりあえず、githubにチケットを作りました。

https://github.com/gbiggs/rtshell/issues/24

________________________________________
From: openrtm-users-bounces @ openrtm.org <openrtm-users-bounces @ openrtm.org> on behalf of sasaki.akinori @ iri-tokyo.jp <sasaki.akinori @ iri-tokyo.jp>
Sent: Monday, 27 April 2015 10:21 p.m.
To: openrtm-users @ openrtm.org
Subject: [openrtm-users 03165]  rtcryo の副作用に起因する rtresurrect の問題 (A problem in   rtresurrect caused by side effects of rtcryo)

東京都立産業技術研究センターの佐々木と申します。


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.)


--
地方独立行政法人 東京都立産業技術研究センター
ロボット事業推進部 ロボット開発セクター
佐々木 智典


More information about the openrtm-users mailing list