Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[python/rtm.py] narrow to RTObject produce error on some environments #858

Merged
merged 1 commit into from
Oct 20, 2015

Conversation

yosuke
Copy link
Contributor

@yosuke yosuke commented Oct 19, 2015

私の環境(PPA由来のパッケージ?)だと中身がDataFlowComponentのオブジェクトをRTObjectにnarrowするとエラーが出るのでtry-exceptで拾うようにしてみました。

@k-okada
Copy link
Contributor

k-okada commented Oct 19, 2015

Refer to this link for build results (access rights to CI server needed):
http://jenkins.jsk.imi.i.u-tokyo.ac.jp:8080/job/hrpsys-qnx/2394/

Build Log
last 10 lines

[...truncated 3482 lines...]
    at org.jenkinsci.plugins.ghprb.GhprbRepository.createCommitStatus(GhprbRepository.java:122)
    at org.jenkinsci.plugins.ghprb.GhprbBuilds.onCompleted(GhprbBuilds.java:118)
    at org.jenkinsci.plugins.ghprb.GhprbBuildListener.onCompleted(GhprbBuildListener.java:27)
    at org.jenkinsci.plugins.ghprb.GhprbBuildListener.onCompleted(GhprbBuildListener.java:12)
    at hudson.model.listeners.RunListener.fireCompleted(RunListener.java:201)
    at hudson.model.Run.execute(Run.java:1786)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:98)
    at hudson.model.Executor.run(Executor.java:408)

Test FAILed.

@fkanehiro
Copy link
Owner

これって何も実害はないと思いますが、なんでこうしないといけないのか、という所が気持ち悪いですね。

fkanehiro added a commit that referenced this pull request Oct 20, 2015
[python/rtm.py] narrow to RTObject produce error on some environments
@fkanehiro fkanehiro merged commit a73c924 into fkanehiro:master Oct 20, 2015
@yosuke
Copy link
Contributor Author

yosuke commented Oct 20, 2015

正直、謎なところですね。

他に影響しないようにコードを書きましたが、自分でも気持ちが悪い書き方になっています。

@yosuke yosuke deleted the fix-narrow-to-rtobject branch October 21, 2015 00:22
@k-okada
Copy link
Contributor

k-okada commented Oct 21, 2015

PPAでのopenrtmのバージョンはいくつなんでしょうか?

2015年10月21日水曜日、Yosuke [email protected]さんは書きました:

正直、謎なところですね。

他に影響しないようにコードを書きましたが、自分でも気持ちが悪い書き方になっています。


Reply to this email directly or view it on GitHub
#858 (comment)
.

◉ Kei Okada

@yosuke
Copy link
Contributor Author

yosuke commented Oct 21, 2015

PPAのopenrtmはここのブランチから毎晩最新のものを取ってきてビルドがかかっています。

http://svn.openrtm.org/OpenRTM-aist/branches/RELENG_1_1/

1.1.2+アルファ、という感じです。

PPAのhrpsys-baseは -Wbpackage=hrpsys -Wbinline のオプションをつけてスタブを生成しているので、その影響かな、とも思っています。このオプションをつけるとidl内で定義された定数が参照できるようになるのですが、findObjectで帰ってきたオブジェクトがすでにnarrowがかかっている(?)みたいな状態にもなっています。

@yosuke
Copy link
Contributor Author

yosuke commented Oct 21, 2015

IPython上でfindObjectするとこんな感じで帰ってきます。

In [8]: rtm.findObject('sh', 'rtc')
Out[8]: <hrpsys.OpenRTM._objref_DataFlowComponent instance at 0x7f448ac09050>

オブジェクトのtypecodeからインスタンス型を推定して違う型にnarrowしようとすると、たとえそれが抽象クラスであってもエラーを出して警告してくれる、ような機能が入っているのかな、と推察しています。

@fkanehiro
Copy link
Owner

なるほど。
ネームサーバから取ってきた時点でもうDataFlowComponentになっているというのが謎ですね。

2015年10月21日 11:14 Yosuke Matsusaka [email protected]:

IPython上でfindObjectするとこんな感じで帰ってきます。

In [8]: rtm.findObject('sh', 'rtc')
Out[8]: <hrpsys.OpenRTM._objref_DataFlowComponent instance at 0x7f448ac09050>

オブジェクトのtypecodeからインスタンス型を推定して違う型にnarrowしようとすると、たとえそれが抽象クラスであってもエラーを出して警告してくれる、ような機能が入っているのかな、と推察しています。


Reply to this email directly or view it on GitHub
#858 (comment)
.

@yosuke
Copy link
Contributor Author

yosuke commented Oct 21, 2015

以下のように書いたらエラーが出ませんでした。

rtc = RTcomponent(obj._unchecked_narrow(RTC.RTObject))

この方がきれいかもしれませんね。

@yosuke yosuke restored the fix-narrow-to-rtobject branch October 21, 2015 02:23
@yosuke
Copy link
Contributor Author

yosuke commented Oct 21, 2015

omniorbpyの実装まで見てみようかな、とも思いもしたのですが、オブジェクトのtypecodeからインスタンス型が推定できる場合は勝手にnarrowしてくれる、という、ある意味で余計な親切機能が働いているという推定で間違いないと思います(import RTCする前にnsにresolveすると普通のオブジェクトが帰ってきていたので)。

rtm.pyの考え方は_unchecked_narrowと同じであるという理解で良いと思うのですが、これに直す方向で良さそうでしょうか?

@fkanehiro
Copy link
Owner

え〜っと、unchecked_narrowってどういうものでしょうか。

2015年10月21日 11:44 Yosuke Matsusaka [email protected]:

omniorbpyの実装まで見てみようかな、とも思いもしたのですが、オブジェクトのtypecodeからインスタンス型が推定できる場合は勝手にnarrowしてくれる、という、ある意味で余計な親切機能が働いているという推定で間違いないと思います(import
RTCする前にnsにresolveすると普通のオブジェクトが帰ってきていたので)。

rtm.pyの考え方は_unchecked_narrowと同じであるという理解で良いと思うのですが、これに直す方向で良さそうでしょうか?


Reply to this email directly or view it on GitHub
#858 (comment)
.

@yosuke
Copy link
Contributor Author

yosuke commented Oct 21, 2015

narrowするときにtypecodeをチェックしない、というnarrowのしかたです。

なので安易に使うと、narrowはできたけどあとでメンバ関数呼び出した時にfunction not foundエラーが出る状態になる可能性があります。

kind='rtc'でネームサーバにresolveかけているので、帰ってくるのはRTObjectだろう、という可能性が高い場合、あまり問題にならないはず、なのですが、どのオブジェクトも無理やりnarrowしてしまいtypecodeレベルではエラーが帰ってこないので、そこで救われている事例があった場合再考が必要です。

@fkanehiro
Copy link
Owner

ちなみに、ubuntu14.04だとomniORBは4.1.6のようですが、@yosuke さんの環境はもっと新しかったりするのでしょうか。

2015年10月21日 12:03 Yosuke Matsusaka [email protected]:

narrowするときにtypecodeをチェックしない、というnarrowのしかたです。

なので安易に使うと、narrowはできたけどあとでメンバ関数呼び出した時にfunction not foundエラーが出る状態になる可能性があります。

kind='rtc'でネームサーバにresolveかけているので、帰ってくるのはRTObjectだろう、という可能性が高い場合、あまり問題にならないはず、なのですが、どのオブジェクトも無理やりnarrowしてしまいtypecodeレベルではエラーが帰ってこないので、そこで救われている事例があった場合再考が必要です。


Reply to this email directly or view it on GitHub
#858 (comment)
.

@yosuke
Copy link
Contributor Author

yosuke commented Oct 21, 2015

libomniorb4-1は4.1.6-2で、python-omniorbは3.6-1(ubuntu14.04を使っています)なので、同じ環境です。

今のところスタブ生成に-Wbpackage=hrpsys -Wbinlineオブションをつけたことによって、お節介機能が機能する条件を整えてしまった可能性が高いな、と思っています。

@yosuke
Copy link
Contributor Author

yosuke commented Oct 22, 2015

今の状態でもコードはやや気持ち悪い&DataFlowComponent以外の型が出てきた場合に追加で書く必要がある、という以外は安全サイドに振った実装になっていると思うので、とりあえずこれでおいておきたいと思います(今後変な現象ありましたら私にもmentionください)。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants