Текущее время: Чт, мар 28 2024, 21:20

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Выполнение прервано SWF_RUN 611
СообщениеДобавлено: Чт, сен 26 2013, 15:34 
Специалист
Специалист

Зарегистрирован:
Вт, ноя 28 2006, 16:02
Сообщения: 114
Подскажите с непонятной ситуацией.
Вызываю в цикле SAP_WAPI_WORKITEM_COMPLETE по разным потокам. Иногда поток может зависнуть с сообщением "Выполнение прервано SWF_RUN 611" тип ошибки 0 - Временная ошибка. Т.е. последняя задача имеет статус Завершено, а следующая не создается.
Такой поток можно увидеть в транзакции SWPC и вручную продолжить. Либо он сам фоновым заданием SWWERRE протолкнется.
В чем причина?
Массово вызываю выполнение шага вот таким способом.
Сначала был просто цикл с коммитами. Потом добавил блокировку ЭПО. Потом добавил ожидание.
В итоге примерно из 30 потоков один все таки зависает.

Code:
  loop at lt_wi_doc into ls_wi_doc.

    data lv_counter type i.
    add 1 to lv_counter.

    try.
        data: l_enqueue_object type ref to cl_swf_run_wim_enqueue.
        call method cl_swf_run_wim_enqueue=>get_instance
          exporting
            im_wiid             = ls_wi_doc-wi_id
            im_enqueue_owner    = 'SWW_WI_EXECUTE'
            im_wait_for_enqueue = abap_false
          receiving
            re_instance         = l_enqueue_object.
        data lx_enq type ref to cx_swf_run_wim_enq_failed.
      catch cx_swf_run_wim_enq_failed into lx_enq.
        message id lx_enq->t100_msg-msgid type lx_enq->t100_msg-msgty number lx_enq->t100_msg-msgno
   with lx_enq->t100_msg-msgv1 lx_enq->t100_msg-msgv2 lx_enq->t100_msg-msgv3 lx_enq->t100_msg-msgv4.
    endtry.


    data:
      lv_rc       like sy-subrc,
      lt_messages type table of swr_mstruc,
      ls_message  like line of lt_messages.

    call function 'SAP_WAPI_WORKITEM_COMPLETE'
      exporting
        workitem_id      = ls_wi_doc-wi_id
        do_commit        = abap_false
      importing
        return_code      = lv_rc
      tables
        simple_container = lt_cont
        message_struct   = lt_messages.
    if lv_rc is not initial.
      loop at lt_messages into ls_message where msgty ca 'EAX'.
        message id ls_message-msgid type ls_message-msgty number ls_message-msgno
          with ls_message-msgv1 ls_message-msgv2 ls_message-msgv3 ls_message-msgv4.
      endloop.
      if sy-subrc ne 0.
        message text-e02 type 'E'.
      endif.
    endif.
    clear: lt_messages.

    l_enqueue_object->dequeue( im_enqueue_owner = 'SWW_WI_EXECUTE' im_force_enqueue = abap_false ).

    commit work and wait.

    data lv_remainder type i.
    lv_remainder = lv_counter mod 5.

    if lv_remainder eq 0.
      wait up to 1 seconds.
    endif.

  endloop.


В ST22 ничего интересного.
Что еще можно сделать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB