Текущее время: Пт, апр 26 2024, 17:56

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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