Classify errors and advance URL index according to the error code.

In CL https://gerrit.chromium.org/gerrit/39638, we always incremented
the URL index irrespective of the error code. That would cause the first
URL to be given up too quickly in favor of the second one even for
transient errors such as when user closes a lid and reopens after some
time.

The right behavior in this case is to just count those failures towards
the URL and only after repeated failures with no progress should we
advance the URL index.

This CL implements this logic and completes the multiple URL-related
work items outlined in the design doc.

BUG=chromium-os:37206
TEST=Tested all uses cases on my ZGB. Added and updated unit tests.

Change-Id: Ida0cfbfeb9bfab732144049d1b27e3b8958bc252
Reviewed-on: https://gerrit.chromium.org/gerrit/39885
Commit-Queue: Jay Srinivasan <jaysri@chromium.org>
Reviewed-by: Jay Srinivasan <jaysri@chromium.org>
Tested-by: Jay Srinivasan <jaysri@chromium.org>
19 files changed
tree: 3f7728d90f2ad4f34567300e731d5872352b6b6e
  1. .gitignore
  2. 99-gpio-dutflag.rules
  3. action.h
  4. action_mock.h
  5. action_pipe.h
  6. action_pipe_unittest.cc
  7. action_processor.cc
  8. action_processor.h
  9. action_processor_mock.h
  10. action_processor_unittest.cc
  11. action_unittest.cc
  12. build
  13. bzip.cc
  14. bzip.h
  15. bzip_extent_writer.cc
  16. bzip_extent_writer.h
  17. bzip_extent_writer_unittest.cc
  18. certificate_checker.cc
  19. certificate_checker.h
  20. certificate_checker_mock.h
  21. certificate_checker_unittest.cc
  22. chrome_browser_proxy_resolver.cc
  23. chrome_browser_proxy_resolver.h
  24. chrome_browser_proxy_resolver_unittest.cc
  25. chrome_proxy_resolver.cc
  26. chrome_proxy_resolver.h
  27. chrome_proxy_resolver_unittest.cc
  28. connection_manager.cc
  29. connection_manager.h
  30. connection_manager_unittest.cc
  31. cycle_breaker.cc
  32. cycle_breaker.h
  33. cycle_breaker_unittest.cc
  34. dbus_constants.h
  35. dbus_interface.h
  36. dbus_service.cc
  37. dbus_service.h
  38. delta_diff_generator.cc
  39. delta_diff_generator.h
  40. delta_diff_generator_unittest.cc
  41. delta_performer.cc
  42. delta_performer.h
  43. delta_performer_unittest.cc
  44. download_action.cc
  45. download_action.h
  46. download_action_unittest.cc
  47. extent_mapper.cc
  48. extent_mapper.h
  49. extent_mapper_unittest.cc
  50. extent_ranges.cc
  51. extent_ranges.h
  52. extent_ranges_unittest.cc
  53. extent_writer.cc
  54. extent_writer.h
  55. extent_writer_unittest.cc
  56. file_descriptor.cc
  57. file_descriptor.h
  58. file_writer.cc
  59. file_writer.h
  60. file_writer_mock.h
  61. file_writer_unittest.cc
  62. filesystem_copier_action.cc
  63. filesystem_copier_action.h
  64. filesystem_copier_action_unittest.cc
  65. filesystem_iterator.cc
  66. filesystem_iterator.h
  67. filesystem_iterator_unittest.cc
  68. full_update_generator.cc
  69. full_update_generator.h
  70. full_update_generator_unittest.cc
  71. gen_coverage_html
  72. generate_delta_main.cc
  73. gpio_handler.cc
  74. gpio_handler.h
  75. gpio_handler_unittest.cc
  76. gpio_handler_unittest.h
  77. gpio_mock_file_descriptor.cc
  78. gpio_mock_file_descriptor.h
  79. gpio_mock_udev_interface.cc
  80. gpio_mock_udev_interface.h
  81. graph_types.h
  82. graph_utils.cc
  83. graph_utils.h
  84. graph_utils_unittest.cc
  85. http_common.cc
  86. http_common.h
  87. http_fetcher.cc
  88. http_fetcher.h
  89. http_fetcher_unittest.cc
  90. http_fetcher_unittest.h
  91. inherit-review-settings-ok
  92. install_plan.h
  93. integration_unittest.cc
  94. libcurl_http_fetcher.cc
  95. libcurl_http_fetcher.h
  96. LICENSE
  97. local_coverage_rate
  98. main.cc
  99. marshal.list
  100. metadata.cc
  101. metadata.h
  102. metadata_unittest.cc
  103. mock_connection_manager.h
  104. mock_dbus_interface.h
  105. mock_file_writer.h
  106. mock_http_fetcher.cc
  107. mock_http_fetcher.h
  108. mock_payload_state.h
  109. mock_system_state.h
  110. multi_range_http_fetcher.cc
  111. multi_range_http_fetcher.h
  112. omaha_hash_calculator.cc
  113. omaha_hash_calculator.h
  114. omaha_hash_calculator_unittest.cc
  115. omaha_request_action.cc
  116. omaha_request_action.h
  117. omaha_request_action_unittest.cc
  118. omaha_request_params.cc
  119. omaha_request_params.h
  120. omaha_request_params_unittest.cc
  121. omaha_response_handler_action.cc
  122. omaha_response_handler_action.h
  123. omaha_response_handler_action_unittest.cc
  124. org.chromium.UpdateEngine.service
  125. payload_signer.cc
  126. payload_signer.h
  127. payload_signer_unittest.cc
  128. payload_state.cc
  129. payload_state.h
  130. payload_state_interface.h
  131. payload_state_unittest.cc
  132. postinstall_runner_action.cc
  133. postinstall_runner_action.h
  134. postinstall_runner_action_unittest.cc
  135. prefs.cc
  136. prefs.h
  137. prefs_interface.h
  138. prefs_mock.h
  139. prefs_unittest.cc
  140. proxy_resolver.cc
  141. proxy_resolver.h
  142. run_unittests
  143. sample_omaha_v3_response.xml
  144. SConstruct
  145. setup_dev_packages
  146. simple_key_value_store.cc
  147. simple_key_value_store.h
  148. simple_key_value_store_unittest.cc
  149. subprocess.cc
  150. subprocess.h
  151. subprocess_unittest.cc
  152. system_state.cc
  153. system_state.h
  154. tarjan.cc
  155. tarjan.h
  156. tarjan_unittest.cc
  157. terminator.cc
  158. terminator.h
  159. terminator_unittest.cc
  160. test_http_server.cc
  161. test_utils.cc
  162. test_utils.h
  163. testrunner.cc
  164. topological_sort.cc
  165. topological_sort.h
  166. topological_sort_unittest.cc
  167. udev_interface.h
  168. unittest_key.pem
  169. unittest_key2.pem
  170. update_attempter.cc
  171. update_attempter.h
  172. update_attempter_mock.h
  173. update_attempter_unittest.cc
  174. update_check_scheduler.cc
  175. update_check_scheduler.h
  176. update_check_scheduler_unittest.cc
  177. update_engine.xml
  178. update_engine_client.cc
  179. update_metadata.proto
  180. UpdateEngine.conf
  181. utils.cc
  182. utils.h
  183. utils_unittest.cc
  184. WATCHLISTS
  185. zip_unittest.cc