вторник, 13 марта 2012 г.

[prog] На тему читабельности кода

Написал несколько недель назад фрагмент кода. Отладил. Пошел писать другой код. Через какое-то время пришлось вернутся к нему еще раз. И тут наступили тормоза – не могу увидеть, где делается самое важное действие. Нет его в коде и все. Хотя программа работает и я точно знаю, это действие я писал и что ничего не менял.

Коротко: нужно определить, сколько готовых к отсылке пакетов сообщений можно поднять из БД, вычитать их из БД и отослать. Попутно логируя выполняемые действия.

Все это я в коде видел за исключением самой отсылки пакетов :)

Вот сей фрагмент в первозданном виде:

void
a_out_pkg_sender_t::try_send_or_resend_packages()
   {
      const ACE_Time_Value current_time = ACE_OS::gettimeofday();
      m_load_batcher.check_for_new_period( current_time );

      const unsigned int max_packages_to_send =
            m_load_batcher.remaining_load();
      if( 0 != max_packages_to_send )
         {
            if( m_cfg.m_diagnostic_logging.m_rescan_db_for_resending )
               so_log_msg_same_ns( outgoing_package, load_started )
                     .max_package_count( max_packages_to_send )
                     .finish( *this );

            std::auto_ptr< db::out_message_info_list_t > messages =
                  m_db->select_out_pkg_for_sending(
                        max_packages_to_send,
                        date_time_in_past(
                              current_time,
                              m_cfg.m_notifies.m_out_pkg_throughput.m_resend_timeout ),
                        ACE_Date_Time( current_time ) );

            if( m_cfg.m_diagnostic_logging.m_rescan_db_for_resending )
               so_log_msg_same_ns( outgoing_package, load_finished )
                     .messages_loaded( messages->size() )
                     .finish( *this );

            if( !messages->empty() )
               m_load_batcher.increment_current_load(
                     make_and_send_packages( *messages ) );
         }
   }

В конце-концов все нашлось, сказалась, полагаю, общая усталость от работы в авральном режиме. Но от греха подальше переписал “проблемное” место так:

if( !messages->empty() )
{
   const unsigned int packages_sent =
         make_and_send_packages( *messages );

   m_load_batcher.increment_current_load( packages_sent );
}
Отправить комментарий