プロジェクト

全般

プロフィール

機能 #4031

manager_nameに指定が無い場合にmanager_<プロセス番号>でスレーブマネージャを起動する

n-miyamotoほぼ7年前に追加. 6年以上前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
開始日:
2017/05/02
期日:
進捗率:

100%

予定工数:

説明

create_component実行時にmanager_nameの指定が無く、実行中のスレーブマネージャでRTCが起動できない場合に、新たにmanager_<プロセス番号>というマネージャ名でスレーブマネージャを起動する。
スレーブマネージャでRTCが起動できない場合、現在はマスターマネージャ上でRTCを起動できるか試みるようになっているが、この機能は削除する。


関連するチケット

関連している OpenRTM-aist (Java) - 機能 #4187: manager_nameに指定が無い場合にmanager_<プロセス番号>でスレーブマネージャを起動する担当2017-09-08

関係しているリビジョン

リビジョン 825 (差分)
miyamotoほぼ7年前に追加

[compat,->RELENG_1_2] refs #4031

履歴

#1 n-miyamotoほぼ7年前に更新

  • ステータス新規 から 解決 に変更
  • 進捗率0 から 100 に変更

マネージャ名に%pがある場合にプロセスIDと置き換えるように処理を変更しました。

  def initManager(self, argv):
    (省略)
    self._config.setProperty("manager.instance_name",self.formatString(self._config.getProperty("manager.instance_name"), 
                                                                  self._config))

マネージャが起動したかの確認については、スレーブマネージャのインスタンス名がマスターマネージャ側で既知である必要があります。
subprocessモジュールの機能により起動したプロセスのIDは取得できるものの、これはバッチファイルを起動してその中でrtcdを実行しているため、rtcdのプロセスIDは取得できません。
このため、あらかじめ登録済みのスレーブマネージャのインスタンス名一覧を保持しておき、新たにmanager_****という名前のマネージャが登録されるかでマネージャが起動したかを判定するようにしました。

          guard_slave = OpenRTM_aist.ScopedLock(self._slaveMutex)

          for slave in self._slaves[:]:
            try:
              prof = slave.get_configuration()
              prop = OpenRTM_aist.Properties()
              OpenRTM_aist.NVUtil.copyToProperties(prop, prof)
              name = prop.getProperty("manager.instance_name")

              if re.match(regex, name) and not (name in slaves_names):
                mgrobj = slave
            except:
              self._rtcout.RTC_ERROR("Unknown exception cought.")
              self._rtcout.RTC_DEBUG(OpenRTM_aist.Logger.print_exception())
              self.remove_slave_manager(slave)
          del guard_slave

#2 n-ando6年以上前に更新

  • ステータス解決 から 終了 に変更

#3 katami が6年以上前に更新

  • 関連している 機能 #4187: manager_nameに指定が無い場合にmanager_<プロセス番号>でスレーブマネージャを起動する を追加

他の形式にエクスポート: Atom PDF