Support writing FEC.

After hash tree is written, we re-read the partition to encode FEC,
this cannot be done incrementally for each Update() like the hash
tree, because the data needed to encode each rs block are spreaded
across entire partition, and we can not afford to use that much
memory.

For each round, we encode block_size number of rs blocks, which will
produce block_size * fec_roots bytes of FEC data, this will allow us
to read one block at a time instead of one byte.

Bug: 28171891
Test: update_engine_unittests
Test: brillo_update_payload generate
Test: brillo_update_payload verify

Change-Id: I35ba7e0647b9ee5a97b972dc480deef60d813676
9 files changed
tree: 11b41e061ccf3f5b5d80790e47c1304be95d4457
  1. binder_bindings/
  2. client_library/
  3. common/
  4. dbus_bindings/
  5. init/
  6. payload_consumer/
  7. payload_generator/
  8. sample_images/
  9. scripts/
  10. update_manager/
  11. update_payload_key/
  12. .clang-format
  13. .gitignore
  14. Android.bp
  15. Android.mk
  16. binder_service_android.cc
  17. binder_service_android.h
  18. binder_service_brillo.cc
  19. binder_service_brillo.h
  20. boot_control_android.cc
  21. boot_control_android.h
  22. boot_control_android_unittest.cc
  23. boot_control_chromeos.cc
  24. boot_control_chromeos.h
  25. boot_control_chromeos_unittest.cc
  26. boot_control_recovery.cc
  27. boot_control_recovery.h
  28. boot_control_recovery_stub.cc
  29. certificate_checker.cc
  30. certificate_checker.h
  31. certificate_checker_unittest.cc
  32. chrome_browser_proxy_resolver.cc
  33. chrome_browser_proxy_resolver.h
  34. COMMIT-QUEUE.ini
  35. common_service.cc
  36. common_service.h
  37. common_service_unittest.cc
  38. connection_manager.cc
  39. connection_manager.h
  40. connection_manager_android.cc
  41. connection_manager_android.h
  42. connection_manager_interface.h
  43. connection_manager_unittest.cc
  44. connection_utils.cc
  45. connection_utils.h
  46. CPPLINT.cfg
  47. daemon.cc
  48. daemon.h
  49. daemon_state_android.cc
  50. daemon_state_android.h
  51. daemon_state_interface.h
  52. dbus_connection.cc
  53. dbus_connection.h
  54. dbus_service.cc
  55. dbus_service.h
  56. dbus_test_utils.h
  57. dynamic_partition_control_android.cc
  58. dynamic_partition_control_android.h
  59. dynamic_partition_control_interface.h
  60. fake_file_writer.h
  61. fake_p2p_manager.h
  62. fake_p2p_manager_configuration.h
  63. fake_shill_proxy.cc
  64. fake_shill_proxy.h
  65. fake_system_state.cc
  66. fake_system_state.h
  67. generate_pc_file.sh
  68. hardware_android.cc
  69. hardware_android.h
  70. hardware_chromeos.cc
  71. hardware_chromeos.h
  72. hardware_chromeos_unittest.cc
  73. image_properties.h
  74. image_properties_android.cc
  75. image_properties_android_unittest.cc
  76. image_properties_chromeos.cc
  77. image_properties_chromeos_unittest.cc
  78. libcurl_http_fetcher.cc
  79. libcurl_http_fetcher.h
  80. libupdate_engine-client-test.pc.in
  81. libupdate_engine-client.pc.in
  82. local_coverage_rate
  83. main.cc
  84. metrics_constants.h
  85. metrics_reporter_android.cc
  86. metrics_reporter_android.h
  87. metrics_reporter_interface.h
  88. metrics_reporter_omaha.cc
  89. metrics_reporter_omaha.h
  90. metrics_reporter_omaha_unittest.cc
  91. metrics_reporter_stub.cc
  92. metrics_reporter_stub.h
  93. metrics_utils.cc
  94. metrics_utils.h
  95. metrics_utils_unittest.cc
  96. mock_boot_control_hal.h
  97. mock_certificate_checker.h
  98. mock_connection_manager.h
  99. mock_dynamic_partition_control.h
  100. mock_file_writer.h
  101. mock_metrics_reporter.h
  102. mock_omaha_request_params.h
  103. mock_p2p_manager.h
  104. mock_payload_state.h
  105. mock_power_manager.h
  106. mock_service_observer.h
  107. mock_update_attempter.h
  108. MODULE_LICENSE_APACHE2
  109. network_selector.h
  110. network_selector_android.cc
  111. network_selector_android.h
  112. network_selector_interface.h
  113. network_selector_stub.cc
  114. network_selector_stub.h
  115. NOTICE
  116. omaha_request_action.cc
  117. omaha_request_action.h
  118. omaha_request_action_unittest.cc
  119. omaha_request_params.cc
  120. omaha_request_params.h
  121. omaha_request_params_unittest.cc
  122. omaha_response.h
  123. omaha_response_handler_action.cc
  124. omaha_response_handler_action.h
  125. omaha_response_handler_action_unittest.cc
  126. omaha_utils.cc
  127. omaha_utils.h
  128. omaha_utils_unittest.cc
  129. OWNERS
  130. p2p_manager.cc
  131. p2p_manager.h
  132. p2p_manager_unittest.cc
  133. parcelable_update_engine_status.cc
  134. parcelable_update_engine_status.h
  135. parcelable_update_engine_status_unittest.cc
  136. payload_state.cc
  137. payload_state.h
  138. payload_state_interface.h
  139. payload_state_unittest.cc
  140. power_manager_android.cc
  141. power_manager_android.h
  142. power_manager_chromeos.cc
  143. power_manager_chromeos.h
  144. power_manager_interface.h
  145. PRESUBMIT.cfg
  146. PREUPLOAD.cfg
  147. pylintrc
  148. real_system_state.cc
  149. real_system_state.h
  150. run_unittests
  151. sample_omaha_v3_response.xml
  152. service_delegate_android_interface.h
  153. service_observer_interface.h
  154. shill_proxy.cc
  155. shill_proxy.h
  156. shill_proxy_interface.h
  157. sideload_main.cc
  158. system_state.h
  159. tar_bunzip2.gypi
  160. test_http_server.cc
  161. test_subprocess.cc
  162. testrunner.cc
  163. unittest_key.pem
  164. unittest_key2.pem
  165. update_attempter.cc
  166. update_attempter.h
  167. update_attempter_android.cc
  168. update_attempter_android.h
  169. update_attempter_android_unittest.cc
  170. update_attempter_unittest.cc
  171. update_boot_flags_action.cc
  172. update_boot_flags_action.h
  173. update_boot_flags_action_unittest.cc
  174. update_engine-client.gyp
  175. update_engine.conf
  176. update_engine.gyp
  177. update_engine.rc
  178. update_engine_client.cc
  179. update_engine_client_android.cc
  180. update_metadata.proto
  181. update_status_utils.cc
  182. update_status_utils.h
  183. UpdateEngine.conf