amps-python-client 5.3.4.1__zip → 5.3.4.3__zip

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (918) hide show
  1. amps-python-client-5.3.4.3/LICENSE +168 -0
  2. amps-python-client-5.3.4.3/PKG-INFO +112 -0
  3. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
  4. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
  5. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
  6. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
  7. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
  8. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
  9. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
  10. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
  11. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  12. amps-python-client-5.3.4.3/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
  13. amps-python-client-5.3.4.3/docs/command-reference/doctrees/environment.pickle +0 -0
  14. amps-python-client-5.3.4.3/docs/command-reference/doctrees/index.doctree +0 -0
  15. amps-python-client-5.3.4.3/docs/command-reference/html/.buildinfo +4 -0
  16. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +8 -0
  17. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +8 -0
  18. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/intro.rst.txt +8 -0
  19. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/logon.rst.txt +8 -0
  20. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +8 -0
  21. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/publishing.rst.txt +8 -0
  22. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +8 -0
  23. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +8 -0
  24. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/removing.rst.txt +8 -0
  25. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/chapters/utilities.rst.txt +8 -0
  26. amps-python-client-5.3.4.3/docs/command-reference/html/_sources/index.rst.txt +36 -0
  27. amps-python-client-5.3.4.3/docs/command-reference/html/_static/custom.css +161 -0
  28. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/ack-messages.html +95 -0
  29. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/content-messages.html +95 -0
  30. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/intro.html +95 -0
  31. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/logon.html +95 -0
  32. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/protocol-reference.html +93 -0
  33. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/publishing.html +95 -0
  34. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/query-delimiters.html +95 -0
  35. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/query-subscribe.html +95 -0
  36. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/removing.html +95 -0
  37. amps-python-client-5.3.4.3/docs/command-reference/html/chapters/utilities.html +95 -0
  38. amps-python-client-5.3.4.3/docs/command-reference/html/genindex.html +97 -0
  39. amps-python-client-5.3.4.3/docs/command-reference/html/index.html +98 -0
  40. amps-python-client-5.3.4.3/docs/command-reference/html/objects.inv +6 -0
  41. amps-python-client-5.3.4.3/docs/command-reference/html/search.html +107 -0
  42. amps-python-client-5.3.4.3/docs/command-reference/html/searchindex.js +1 -0
  43. amps-python-client-5.3.4.3/docs/html/.buildinfo +4 -0
  44. amps-python-client-5.3.4.3/docs/html/code.html +6851 -0
  45. amps-python-client-5.3.4.3/docs/html/genindex.html +1363 -0
  46. amps-python-client-5.3.4.3/docs/html/index.html +131 -0
  47. amps-python-client-5.3.4.3/docs/html/objects.inv +0 -0
  48. amps-python-client-5.3.4.3/docs/html/py-modindex.html +111 -0
  49. amps-python-client-5.3.4.3/docs/html/search.html +107 -0
  50. amps-python-client-5.3.4.3/docs/html/searchindex.js +1 -0
  51. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
  52. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
  53. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
  54. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
  55. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/deltas.doctree +0 -0
  56. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/error-handling.doctree +0 -0
  57. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/exceptions.doctree +0 -0
  58. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/first-program.doctree +0 -0
  59. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/high-availability.doctree +0 -0
  60. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/installing.doctree +0 -0
  61. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/introduction.doctree +0 -0
  62. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
  63. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
  64. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/queues.doctree +0 -0
  65. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/sow.doctree +0 -0
  66. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
  67. amps-python-client-5.3.4.3/docs/python/doctrees/chapters/utilities.doctree +0 -0
  68. amps-python-client-5.3.4.3/docs/python/doctrees/environment.pickle +0 -0
  69. amps-python-client-5.3.4.3/docs/python/doctrees/index.doctree +0 -0
  70. amps-python-client-5.3.4.3/docs/python/html/.buildinfo +4 -0
  71. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/advanced-topics.rst.txt +398 -0
  72. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +26 -0
  73. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/creating-commands.rst.txt +159 -0
  74. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/deltas.rst.txt +79 -0
  75. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/error-handling.rst.txt +481 -0
  76. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/exceptions.rst.txt +123 -0
  77. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/first-program.rst.txt +168 -0
  78. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/high-availability.rst.txt +879 -0
  79. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/installing.rst.txt +184 -0
  80. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/introduction.rst.txt +50 -0
  81. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +32 -0
  82. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/performance-tips.rst.txt +432 -0
  83. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/queues.rst.txt +282 -0
  84. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/sow.rst.txt +294 -0
  85. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/subscriptions.rst.txt +374 -0
  86. amps-python-client-5.3.4.3/docs/python/html/_sources/chapters/utilities.rst.txt +214 -0
  87. amps-python-client-5.3.4.3/docs/python/html/_static/custom.css +161 -0
  88. amps-python-client-5.3.4.3/docs/python/html/chapters/advanced-topics.html +447 -0
  89. amps-python-client-5.3.4.3/docs/python/html/chapters/cpp-compiler-list.html +92 -0
  90. amps-python-client-5.3.4.3/docs/python/html/chapters/cpp-feature-table.html +156 -0
  91. amps-python-client-5.3.4.3/docs/python/html/chapters/creating-commands.html +2882 -0
  92. amps-python-client-5.3.4.3/docs/python/html/chapters/deltas.html +169 -0
  93. amps-python-client-5.3.4.3/docs/python/html/chapters/error-handling.html +745 -0
  94. amps-python-client-5.3.4.3/docs/python/html/chapters/exceptions.html +266 -0
  95. amps-python-client-5.3.4.3/docs/python/html/chapters/first-program.html +526 -0
  96. amps-python-client-5.3.4.3/docs/python/html/chapters/high-availability.html +1017 -0
  97. amps-python-client-5.3.4.3/docs/python/html/chapters/installing.html +264 -0
  98. amps-python-client-5.3.4.3/docs/python/html/chapters/introduction.html +245 -0
  99. amps-python-client-5.3.4.3/docs/python/html/chapters/moving-from-python-lite.html +118 -0
  100. amps-python-client-5.3.4.3/docs/python/html/chapters/performance-tips.html +499 -0
  101. amps-python-client-5.3.4.3/docs/python/html/chapters/queues.html +352 -0
  102. amps-python-client-5.3.4.3/docs/python/html/chapters/sow.html +383 -0
  103. amps-python-client-5.3.4.3/docs/python/html/chapters/subscriptions.html +535 -0
  104. amps-python-client-5.3.4.3/docs/python/html/chapters/utilities.html +302 -0
  105. amps-python-client-5.3.4.3/docs/python/html/genindex.html +351 -0
  106. amps-python-client-5.3.4.3/docs/python/html/index.html +382 -0
  107. amps-python-client-5.3.4.3/docs/python/html/objects.inv +0 -0
  108. amps-python-client-5.3.4.3/docs/python/html/search.html +107 -0
  109. amps-python-client-5.3.4.3/docs/python/html/searchindex.js +1 -0
  110. amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
  111. amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
  112. amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/environment.pickle +0 -0
  113. amps-python-client-5.3.4.3/docs/python-quickstart/doctrees/index.doctree +0 -0
  114. amps-python-client-5.3.4.3/docs/python-quickstart/html/.buildinfo +4 -0
  115. amps-python-client-5.3.4.3/docs/python-quickstart/html/_static/custom.css +161 -0
  116. amps-python-client-5.3.4.3/docs/python-quickstart/html/chapters/crankitup.html +271 -0
  117. amps-python-client-5.3.4.3/docs/python-quickstart/html/chapters/equipment.html +105 -0
  118. amps-python-client-5.3.4.3/docs/python-quickstart/html/genindex.html +97 -0
  119. amps-python-client-5.3.4.3/docs/python-quickstart/html/index.html +381 -0
  120. amps-python-client-5.3.4.3/docs/python-quickstart/html/objects.inv +0 -0
  121. amps-python-client-5.3.4.3/docs/python-quickstart/html/search.html +107 -0
  122. amps-python-client-5.3.4.3/docs/python-quickstart/html/searchindex.js +1 -0
  123. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
  124. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
  125. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
  126. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
  127. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  128. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
  129. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
  130. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
  131. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
  132. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
  133. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
  134. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
  135. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  136. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/events.doctree +0 -0
  137. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
  138. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
  139. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  140. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
  141. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  142. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
  143. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
  144. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
  145. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
  146. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
  147. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
  148. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
  149. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
  150. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
  151. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
  152. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
  153. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
  154. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
  155. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
  156. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
  157. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
  158. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
  159. amps-python-client-5.3.4.3/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  160. amps-python-client-5.3.4.3/docs/user-guide/doctrees/environment.pickle +0 -0
  161. amps-python-client-5.3.4.3/docs/user-guide/doctrees/index.doctree +0 -0
  162. amps-python-client-5.3.4.3/docs/user-guide/html/.buildinfo +4 -0
  163. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/acks.rst.txt +8 -0
  164. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/actions.rst.txt +8 -0
  165. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +8 -0
  166. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +8 -0
  167. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +8 -0
  168. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +8 -0
  169. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +8 -0
  170. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +8 -0
  171. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +8 -0
  172. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/daemon.rst.txt +8 -0
  173. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/delta.rst.txt +8 -0
  174. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/distribution.rst.txt +8 -0
  175. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +8 -0
  176. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/events.rst.txt +8 -0
  177. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +8 -0
  178. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/glossary.rst.txt +8 -0
  179. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/ha.rst.txt +8 -0
  180. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +8 -0
  181. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/intro.rst.txt +8 -0
  182. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/logging.rst.txt +8 -0
  183. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +8 -0
  184. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +8 -0
  185. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/oof.rst.txt +8 -0
  186. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/operation.rst.txt +8 -0
  187. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +8 -0
  188. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/queues.rst.txt +8 -0
  189. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/replication.rst.txt +8 -0
  190. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/securing.rst.txt +8 -0
  191. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/sow.rst.txt +8 -0
  192. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +8 -0
  193. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/transports.rst.txt +8 -0
  194. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +8 -0
  195. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/txlog.rst.txt +8 -0
  196. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/usecases.rst.txt +8 -0
  197. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/utilities.rst.txt +8 -0
  198. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/chapters/views.rst.txt +8 -0
  199. amps-python-client-5.3.4.3/docs/user-guide/html/_sources/index.rst.txt +62 -0
  200. amps-python-client-5.3.4.3/docs/user-guide/html/_static/custom.css +161 -0
  201. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/acks.html +94 -0
  202. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/actions.html +94 -0
  203. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps-statistics.html +94 -0
  204. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps_expressions.html +94 -0
  205. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/amps_functions.html +94 -0
  206. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/auxiliary_modules.html +94 -0
  207. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/config-file-shortcuts.html +94 -0
  208. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/conflated_topics.html +94 -0
  209. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/constructing-fields.html +94 -0
  210. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/daemon.html +94 -0
  211. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/delta.html +94 -0
  212. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/distribution.html +94 -0
  213. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/enrichment.html +94 -0
  214. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/events.html +94 -0
  215. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/file_format_versions.html +94 -0
  216. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/glossary.html +92 -0
  217. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/ha.html +94 -0
  218. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/installing_and_starting.html +94 -0
  219. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/intro.html +94 -0
  220. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/logging.html +94 -0
  221. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/messageTypes.html +94 -0
  222. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/monitoring.html +94 -0
  223. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/oof.html +94 -0
  224. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/operation.html +94 -0
  225. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/pub_sub.html +94 -0
  226. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/queues.html +94 -0
  227. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/replication.html +94 -0
  228. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/securing.html +94 -0
  229. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/sow.html +94 -0
  230. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/sow_queries.html +94 -0
  231. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/spark.html +819 -0
  232. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/transports.html +94 -0
  233. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/troubleshooting.html +94 -0
  234. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/txlog.html +94 -0
  235. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/usecases.html +94 -0
  236. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/utilities.html +94 -0
  237. amps-python-client-5.3.4.3/docs/user-guide/html/chapters/views.html +94 -0
  238. amps-python-client-5.3.4.3/docs/user-guide/html/genindex.html +133 -0
  239. amps-python-client-5.3.4.3/docs/user-guide/html/index.html +96 -0
  240. amps-python-client-5.3.4.3/docs/user-guide/html/objects.inv +0 -0
  241. amps-python-client-5.3.4.3/docs/user-guide/html/search.html +106 -0
  242. amps-python-client-5.3.4.3/docs/user-guide/html/searchindex.js +1 -0
  243. amps-python-client-5.3.4.3/include/ampspy_bookmarkstore.hpp +63 -0
  244. amps-python-client-5.3.4.3/include/ampspy_compat.h +63 -0
  245. amps-python-client-5.3.4.3/include/ampspy_defs.hpp +181 -0
  246. amps-python-client-5.3.4.3/include/ampspy_recoverypointadapter.hpp +52 -0
  247. amps-python-client-5.3.4.3/include/ampspy_shims.hpp +113 -0
  248. amps-python-client-5.3.4.3/include/ampspy_type_object.hpp +242 -0
  249. amps-python-client-5.3.4.3/include/ampspy_types.hpp +1139 -0
  250. amps-python-client-5.3.4.3/include/ampspyver.h +30 -0
  251. amps-python-client-5.3.4.3/index.html +66 -0
  252. amps-python-client-5.3.4.3/samples/AMPSConsolePublisher.py +59 -0
  253. amps-python-client-5.3.4.3/samples/AMPSConsoleSubscriber.py +63 -0
  254. amps-python-client-5.3.4.3/samples/AMPSFIXBuilderPublisher.py +71 -0
  255. amps-python-client-5.3.4.3/samples/AMPSFIXShredderSubscriber.py +69 -0
  256. amps-python-client-5.3.4.3/samples/AMPSNVFIXBuilderPublisher.py +71 -0
  257. amps-python-client-5.3.4.3/samples/AMPSNVFIXShredderSubscriber.py +67 -0
  258. amps-python-client-5.3.4.3/samples/AMPSPublishForReplay.py +81 -0
  259. amps-python-client-5.3.4.3/samples/AMPSQueueConsumer.py +69 -0
  260. amps-python-client-5.3.4.3/samples/AMPSQueuePublisher.py +59 -0
  261. amps-python-client-5.3.4.3/samples/AMPSSOWConsolePublisher.py +67 -0
  262. amps-python-client-5.3.4.3/samples/AMPSSOWConsoleSubscriber.py +77 -0
  263. amps-python-client-5.3.4.3/samples/AMPSSOWandSubscribeConsoleSubscriber.py +79 -0
  264. amps-python-client-5.3.4.3/samples/AMPSSOWandSubscribeWithOOF.py +108 -0
  265. amps-python-client-5.3.4.3/samples/AMPSSubscribeForReplay.py +128 -0
  266. amps-python-client-5.3.4.3/samples/AMPSUpdateForOOF.py +123 -0
  267. amps-python-client-5.3.4.3/samples/CompositeMessagePublisher.py +84 -0
  268. amps-python-client-5.3.4.3/samples/CompositeMessageSubscriber.py +87 -0
  269. amps-python-client-5.3.4.3/samples/RandomServerChooser.py +66 -0
  270. amps-python-client-5.3.4.3/samples/sample.xml +335 -0
  271. amps-python-client-5.3.4.3/setup.py +210 -0
  272. amps-python-client-5.3.4.3/setup_amps.py +94 -0
  273. amps-python-client-5.3.4.3/src/ampspy_shims.cpp +214 -0
  274. amps-python-client-5.3.4.3/src/ampspy_type_object.cpp +495 -0
  275. amps-python-client-5.3.4.3/src/authenticator.cpp +128 -0
  276. amps-python-client-5.3.4.3/src/bookmarkstore.cpp +246 -0
  277. amps-python-client-5.3.4.3/src/client.cpp +2648 -0
  278. amps-python-client-5.3.4.3/src/client_docs.h +1210 -0
  279. amps-python-client-5.3.4.3/src/cmessagehandler.cpp +161 -0
  280. amps-python-client-5.3.4.3/src/command.cpp +164 -0
  281. amps-python-client-5.3.4.3/src/command_docs.h +274 -0
  282. amps-python-client-5.3.4.3/src/compositemessagebuilder.cpp +113 -0
  283. amps-python-client-5.3.4.3/src/compositemessageparser.cpp +151 -0
  284. amps-python-client-5.3.4.3/src/conflatingrecoverypointadapter.cpp +197 -0
  285. amps-python-client-5.3.4.3/src/cpp/include/amps/BlockPublishStore.hpp +2050 -0
  286. amps-python-client-5.3.4.3/src/cpp/include/amps/BlockStore.hpp +674 -0
  287. amps-python-client-5.3.4.3/src/cpp/include/amps/BookmarkStore.hpp +542 -0
  288. amps-python-client-5.3.4.3/src/cpp/include/amps/Buffer.hpp +214 -0
  289. amps-python-client-5.3.4.3/src/cpp/include/amps/CompositeMessageBuilder.hpp +174 -0
  290. amps-python-client-5.3.4.3/src/cpp/include/amps/CompositeMessageParser.hpp +151 -0
  291. amps-python-client-5.3.4.3/src/cpp/include/amps/DefaultServerChooser.hpp +162 -0
  292. amps-python-client-5.3.4.3/src/cpp/include/amps/Field.hpp +723 -0
  293. amps-python-client-5.3.4.3/src/cpp/include/amps/HAClient.hpp +370 -0
  294. amps-python-client-5.3.4.3/src/cpp/include/amps/HAClientImpl.hpp +460 -0
  295. amps-python-client-5.3.4.3/src/cpp/include/amps/HybridPublishStore.hpp +481 -0
  296. amps-python-client-5.3.4.3/src/cpp/include/amps/LoggedBookmarkStore.hpp +1256 -0
  297. amps-python-client-5.3.4.3/src/cpp/include/amps/MMapBookmarkStore.hpp +1283 -0
  298. amps-python-client-5.3.4.3/src/cpp/include/amps/MMapStoreBuffer.hpp +297 -0
  299. amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryBookmarkStore.hpp +1628 -0
  300. amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryPublishStore.hpp +66 -0
  301. amps-python-client-5.3.4.3/src/cpp/include/amps/MemoryStoreBuffer.hpp +247 -0
  302. amps-python-client-5.3.4.3/src/cpp/include/amps/MemorySubscriptionManager.hpp +850 -0
  303. amps-python-client-5.3.4.3/src/cpp/include/amps/Message.hpp +1827 -0
  304. amps-python-client-5.3.4.3/src/cpp/include/amps/MessageRouter.hpp +647 -0
  305. amps-python-client-5.3.4.3/src/cpp/include/amps/PublishStore.hpp +158 -0
  306. amps-python-client-5.3.4.3/src/cpp/include/amps/ReconnectDelayStrategy.hpp +106 -0
  307. amps-python-client-5.3.4.3/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +317 -0
  308. amps-python-client-5.3.4.3/src/cpp/include/amps/RecoveryPoint.hpp +323 -0
  309. amps-python-client-5.3.4.3/src/cpp/include/amps/RecoveryPointAdapter.hpp +501 -0
  310. amps-python-client-5.3.4.3/src/cpp/include/amps/RingBookmarkStore.hpp +669 -0
  311. amps-python-client-5.3.4.3/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +494 -0
  312. amps-python-client-5.3.4.3/src/cpp/include/amps/ServerChooser.hpp +156 -0
  313. amps-python-client-5.3.4.3/src/cpp/include/amps/ServerChooserImpl.hpp +95 -0
  314. amps-python-client-5.3.4.3/src/cpp/include/amps/amps.h +815 -0
  315. amps-python-client-5.3.4.3/src/cpp/include/amps/amps_impl.h +220 -0
  316. amps-python-client-5.3.4.3/src/cpp/include/amps/amps_ssl.h +78 -0
  317. amps-python-client-5.3.4.3/src/cpp/include/amps/ampscrc.hpp +208 -0
  318. amps-python-client-5.3.4.3/src/cpp/include/amps/ampsplusplus.hpp +8846 -0
  319. amps-python-client-5.3.4.3/src/cpp/include/amps/ampsuri.h +84 -0
  320. amps-python-client-5.3.4.3/src/cpp/include/amps/ampsver.h +41 -0
  321. amps-python-client-5.3.4.3/src/cpp/include/amps/ampsver.h.in +41 -0
  322. amps-python-client-5.3.4.3/src/cpp/include/amps/constants.hpp +194 -0
  323. amps-python-client-5.3.4.3/src/cpp/include/amps/util.hpp +1722 -0
  324. amps-python-client-5.3.4.3/src/cpp/src/amps_protocol.c +693 -0
  325. amps-python-client-5.3.4.3/src/cpp/src/amps_ssl.c +565 -0
  326. amps-python-client-5.3.4.3/src/cpp/src/atfork.c +484 -0
  327. amps-python-client-5.3.4.3/src/cpp/src/client.c +498 -0
  328. amps-python-client-5.3.4.3/src/cpp/src/message.c +837 -0
  329. amps-python-client-5.3.4.3/src/cpp/src/message_generated.h +611 -0
  330. amps-python-client-5.3.4.3/src/cpp/src/tcp.c +1683 -0
  331. amps-python-client-5.3.4.3/src/cpp/src/tcps.c +2005 -0
  332. amps-python-client-5.3.4.3/src/cpp/src/transports.c +129 -0
  333. amps-python-client-5.3.4.3/src/cpp/src/unix.c +1063 -0
  334. amps-python-client-5.3.4.3/src/cpp/src/uri.c +301 -0
  335. amps-python-client-5.3.4.3/src/exponentialdelaystrategy.cpp +131 -0
  336. amps-python-client-5.3.4.3/src/failedwritehandler.cpp +116 -0
  337. amps-python-client-5.3.4.3/src/fixbuilder.cpp +146 -0
  338. amps-python-client-5.3.4.3/src/fixeddelaystrategy.cpp +115 -0
  339. amps-python-client-5.3.4.3/src/fixshredder.cpp +105 -0
  340. amps-python-client-5.3.4.3/src/fixshredder_docs.h +38 -0
  341. amps-python-client-5.3.4.3/src/haclient.cpp +691 -0
  342. amps-python-client-5.3.4.3/src/haclient_docs.h +200 -0
  343. amps-python-client-5.3.4.3/src/hybridpublishstore.cpp +137 -0
  344. amps-python-client-5.3.4.3/src/hybridpublishstore_docs.h +31 -0
  345. amps-python-client-5.3.4.3/src/memorybookmarkstore.cpp +373 -0
  346. amps-python-client-5.3.4.3/src/memorybookmarkstore_docs.h +39 -0
  347. amps-python-client-5.3.4.3/src/memorypublishstore.cpp +160 -0
  348. amps-python-client-5.3.4.3/src/memorypublishstore_docs.h +32 -0
  349. amps-python-client-5.3.4.3/src/message.cpp +765 -0
  350. amps-python-client-5.3.4.3/src/message_docs.h +306 -0
  351. amps-python-client-5.3.4.3/src/messagestream.cpp +630 -0
  352. amps-python-client-5.3.4.3/src/messagestream_docs.h +45 -0
  353. amps-python-client-5.3.4.3/src/mmapbookmarkstore.cpp +422 -0
  354. amps-python-client-5.3.4.3/src/nvfixbuilder.cpp +160 -0
  355. amps-python-client-5.3.4.3/src/nvfixbuilder_docs.h +35 -0
  356. amps-python-client-5.3.4.3/src/nvfixshredder.cpp +99 -0
  357. amps-python-client-5.3.4.3/src/nvfixshredder_docs.h +43 -0
  358. amps-python-client-5.3.4.3/src/publishstore.cpp +183 -0
  359. amps-python-client-5.3.4.3/src/raw_wrapper.cpp +765 -0
  360. amps-python-client-5.3.4.3/src/reason.cpp +71 -0
  361. amps-python-client-5.3.4.3/src/recoverypoint.cpp +135 -0
  362. amps-python-client-5.3.4.3/src/recoverypointadapter.cpp +171 -0
  363. amps-python-client-5.3.4.3/src/ringbookmarkstore.cpp +360 -0
  364. amps-python-client-5.3.4.3/src/serverchooser.cpp +245 -0
  365. amps-python-client-5.3.4.3/src/serverchooser_docs.h +41 -0
  366. amps-python-client-5.3.4.3/src/sowrecoverypointadapter.cpp +248 -0
  367. amps-python-client-5.3.4.3/src/store.cpp +62 -0
  368. amps-python-client-5.3.4.3/src/versioninfo.cpp +175 -0
  369. amps-python-client-5.3.4.1/LICENSE +0 -157
  370. amps-python-client-5.3.4.1/PKG-INFO +0 -112
  371. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/ack-messages.doctree +0 -0
  372. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/content-messages.doctree +0 -0
  373. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/intro.doctree +0 -0
  374. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/logon.doctree +0 -0
  375. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/protocol-reference.doctree +0 -0
  376. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/publishing.doctree +0 -0
  377. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-delimiters.doctree +0 -0
  378. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/query-subscribe.doctree +0 -0
  379. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/removing.doctree +0 -0
  380. amps-python-client-5.3.4.1/docs/command-reference/doctrees/chapters/utilities.doctree +0 -0
  381. amps-python-client-5.3.4.1/docs/command-reference/doctrees/environment.pickle +0 -0
  382. amps-python-client-5.3.4.1/docs/command-reference/doctrees/index.doctree +0 -0
  383. amps-python-client-5.3.4.1/docs/command-reference/html/.buildinfo +0 -4
  384. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/ack-messages.rst.txt +0 -32
  385. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/content-messages.rst.txt +0 -27
  386. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/intro.rst.txt +0 -43
  387. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/logon.rst.txt +0 -231
  388. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/protocol-reference.rst.txt +0 -1474
  389. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/publishing.rst.txt +0 -25
  390. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-delimiters.rst.txt +0 -12
  391. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/query-subscribe.rst.txt +0 -23
  392. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/removing.rst.txt +0 -6
  393. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/chapters/utilities.rst.txt +0 -13
  394. amps-python-client-5.3.4.1/docs/command-reference/html/_sources/index.rst.txt +0 -56
  395. amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css +0 -192
  396. amps-python-client-5.3.4.1/docs/command-reference/html/_static/custom.css.backup +0 -161
  397. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/ack-messages.html +0 -417
  398. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/content-messages.html +0 -417
  399. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/intro.html +0 -126
  400. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/logon.html +0 -295
  401. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/protocol-reference.html +0 -1190
  402. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/publishing.html +0 -436
  403. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-delimiters.html +0 -173
  404. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/query-subscribe.html +0 -2123
  405. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/removing.html +0 -299
  406. amps-python-client-5.3.4.1/docs/command-reference/html/chapters/utilities.html +0 -287
  407. amps-python-client-5.3.4.1/docs/command-reference/html/genindex.html +0 -97
  408. amps-python-client-5.3.4.1/docs/command-reference/html/index.html +0 -138
  409. amps-python-client-5.3.4.1/docs/command-reference/html/objects.inv +0 -0
  410. amps-python-client-5.3.4.1/docs/command-reference/html/search.html +0 -107
  411. amps-python-client-5.3.4.1/docs/command-reference/html/searchindex.js +0 -1
  412. amps-python-client-5.3.4.1/docs/html/.buildinfo +0 -4
  413. amps-python-client-5.3.4.1/docs/html/code.html +0 -6503
  414. amps-python-client-5.3.4.1/docs/html/genindex.html +0 -1361
  415. amps-python-client-5.3.4.1/docs/html/index.html +0 -131
  416. amps-python-client-5.3.4.1/docs/html/objects.inv +0 -0
  417. amps-python-client-5.3.4.1/docs/html/py-modindex.html +0 -111
  418. amps-python-client-5.3.4.1/docs/html/search.html +0 -107
  419. amps-python-client-5.3.4.1/docs/html/searchindex.js +0 -1
  420. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/advanced-topics.doctree +0 -0
  421. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-compiler-list.doctree +0 -0
  422. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/cpp-feature-table.doctree +0 -0
  423. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/creating-commands.doctree +0 -0
  424. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/deltas.doctree +0 -0
  425. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/error-handling.doctree +0 -0
  426. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/exceptions.doctree +0 -0
  427. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/first-program.doctree +0 -0
  428. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/high-availability.doctree +0 -0
  429. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/installing.doctree +0 -0
  430. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/introduction.doctree +0 -0
  431. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/moving-from-python-lite.doctree +0 -0
  432. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/performance-tips.doctree +0 -0
  433. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/queues.doctree +0 -0
  434. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/sow.doctree +0 -0
  435. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/subscriptions.doctree +0 -0
  436. amps-python-client-5.3.4.1/docs/python/doctrees/chapters/utilities.doctree +0 -0
  437. amps-python-client-5.3.4.1/docs/python/doctrees/environment.pickle +0 -0
  438. amps-python-client-5.3.4.1/docs/python/doctrees/index.doctree +0 -0
  439. amps-python-client-5.3.4.1/docs/python/html/.buildinfo +0 -4
  440. amps-python-client-5.3.4.1/docs/python/html/_images/caution.svg +0 -25
  441. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/advanced-topics.rst.txt +0 -398
  442. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/cpp-feature-table.rst.txt +0 -26
  443. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/creating-commands.rst.txt +0 -159
  444. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/deltas.rst.txt +0 -79
  445. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/error-handling.rst.txt +0 -482
  446. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/exceptions.rst.txt +0 -128
  447. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/first-program.rst.txt +0 -142
  448. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/high-availability.rst.txt +0 -876
  449. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/installing.rst.txt +0 -184
  450. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/introduction.rst.txt +0 -50
  451. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/moving-from-python-lite.rst.txt +0 -32
  452. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/performance-tips.rst.txt +0 -434
  453. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/queues.rst.txt +0 -282
  454. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/sow.rst.txt +0 -292
  455. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/subscriptions.rst.txt +0 -374
  456. amps-python-client-5.3.4.1/docs/python/html/_sources/chapters/utilities.rst.txt +0 -214
  457. amps-python-client-5.3.4.1/docs/python/html/_static/custom.css +0 -192
  458. amps-python-client-5.3.4.1/docs/python/html/_static/custom.css.backup +0 -161
  459. amps-python-client-5.3.4.1/docs/python/html/chapters/advanced-topics.html +0 -447
  460. amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-compiler-list.html +0 -92
  461. amps-python-client-5.3.4.1/docs/python/html/chapters/cpp-feature-table.html +0 -156
  462. amps-python-client-5.3.4.1/docs/python/html/chapters/creating-commands.html +0 -2837
  463. amps-python-client-5.3.4.1/docs/python/html/chapters/deltas.html +0 -169
  464. amps-python-client-5.3.4.1/docs/python/html/chapters/error-handling.html +0 -746
  465. amps-python-client-5.3.4.1/docs/python/html/chapters/exceptions.html +0 -272
  466. amps-python-client-5.3.4.1/docs/python/html/chapters/first-program.html +0 -499
  467. amps-python-client-5.3.4.1/docs/python/html/chapters/high-availability.html +0 -1014
  468. amps-python-client-5.3.4.1/docs/python/html/chapters/installing.html +0 -264
  469. amps-python-client-5.3.4.1/docs/python/html/chapters/introduction.html +0 -245
  470. amps-python-client-5.3.4.1/docs/python/html/chapters/moving-from-python-lite.html +0 -118
  471. amps-python-client-5.3.4.1/docs/python/html/chapters/performance-tips.html +0 -499
  472. amps-python-client-5.3.4.1/docs/python/html/chapters/queues.html +0 -352
  473. amps-python-client-5.3.4.1/docs/python/html/chapters/sow.html +0 -381
  474. amps-python-client-5.3.4.1/docs/python/html/chapters/subscriptions.html +0 -535
  475. amps-python-client-5.3.4.1/docs/python/html/chapters/utilities.html +0 -302
  476. amps-python-client-5.3.4.1/docs/python/html/genindex.html +0 -351
  477. amps-python-client-5.3.4.1/docs/python/html/index.html +0 -380
  478. amps-python-client-5.3.4.1/docs/python/html/objects.inv +0 -0
  479. amps-python-client-5.3.4.1/docs/python/html/search.html +0 -107
  480. amps-python-client-5.3.4.1/docs/python/html/searchindex.js +0 -1
  481. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/crankitup.doctree +0 -0
  482. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/chapters/equipment.doctree +0 -0
  483. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/environment.pickle +0 -0
  484. amps-python-client-5.3.4.1/docs/python-quickstart/doctrees/index.doctree +0 -0
  485. amps-python-client-5.3.4.1/docs/python-quickstart/html/.buildinfo +0 -4
  486. amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css +0 -192
  487. amps-python-client-5.3.4.1/docs/python-quickstart/html/_static/custom.css.backup +0 -161
  488. amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/crankitup.html +0 -271
  489. amps-python-client-5.3.4.1/docs/python-quickstart/html/chapters/equipment.html +0 -105
  490. amps-python-client-5.3.4.1/docs/python-quickstart/html/genindex.html +0 -97
  491. amps-python-client-5.3.4.1/docs/python-quickstart/html/index.html +0 -382
  492. amps-python-client-5.3.4.1/docs/python-quickstart/html/objects.inv +0 -0
  493. amps-python-client-5.3.4.1/docs/python-quickstart/html/search.html +0 -107
  494. amps-python-client-5.3.4.1/docs/python-quickstart/html/searchindex.js +0 -1
  495. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/acks.doctree +0 -0
  496. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/actions.doctree +0 -0
  497. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps-statistics.doctree +0 -0
  498. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_expressions.doctree +0 -0
  499. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/amps_functions.doctree +0 -0
  500. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/auxiliary_modules.doctree +0 -0
  501. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/config-file-shortcuts.doctree +0 -0
  502. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/conflated_topics.doctree +0 -0
  503. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/constructing-fields.doctree +0 -0
  504. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/daemon.doctree +0 -0
  505. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/delta.doctree +0 -0
  506. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/distribution.doctree +0 -0
  507. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/enrichment.doctree +0 -0
  508. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/events.doctree +0 -0
  509. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/file_format_versions.doctree +0 -0
  510. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/glossary.doctree +0 -0
  511. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/ha.doctree +0 -0
  512. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/installing_and_starting.doctree +0 -0
  513. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/intro.doctree +0 -0
  514. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/logging.doctree +0 -0
  515. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/messageTypes.doctree +0 -0
  516. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/monitoring.doctree +0 -0
  517. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/oof.doctree +0 -0
  518. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/operation.doctree +0 -0
  519. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/pub_sub.doctree +0 -0
  520. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/queues.doctree +0 -0
  521. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/replication.doctree +0 -0
  522. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/securing.doctree +0 -0
  523. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow.doctree +0 -0
  524. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/sow_queries.doctree +0 -0
  525. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/spark.doctree +0 -0
  526. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/transports.doctree +0 -0
  527. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/troubleshooting.doctree +0 -0
  528. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/txlog.doctree +0 -0
  529. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/usecases.doctree +0 -0
  530. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/utilities.doctree +0 -0
  531. amps-python-client-5.3.4.1/docs/user-guide/doctrees/chapters/views.doctree +0 -0
  532. amps-python-client-5.3.4.1/docs/user-guide/doctrees/environment.pickle +0 -0
  533. amps-python-client-5.3.4.1/docs/user-guide/doctrees/index.doctree +0 -0
  534. amps-python-client-5.3.4.1/docs/user-guide/html/.buildinfo +0 -4
  535. amps-python-client-5.3.4.1/docs/user-guide/html/_images/AMPS-Queues-Intro.svg +0 -1330
  536. amps-python-client-5.3.4.1/docs/user-guide/html/_images/GeoRepl.png +0 -0
  537. amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_async_ack.png +0 -0
  538. amps-python-client-5.3.4.1/docs/user-guide/html/_images/HA_sync_ack.png +0 -0
  539. amps-python-client-5.3.4.1/docs/user-guide/html/_images/Hot-Hot-Replication.png +0 -0
  540. amps-python-client-5.3.4.1/docs/user-guide/html/_images/MessageOrdering.svg +0 -235
  541. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF5.png +0 -0
  542. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF6.png +0 -0
  543. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF7.png +0 -0
  544. amps-python-client-5.3.4.1/docs/user-guide/html/_images/OOF8.png +0 -0
  545. amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub1.svg +0 -1
  546. amps-python-client-5.3.4.1/docs/user-guide/html/_images/PubSub2.svg +0 -1
  547. amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWAndSubscribeAndReplace.svg +0 -684
  548. amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery1.svg +0 -402
  549. amps-python-client-5.3.4.1/docs/user-guide/html/_images/SOWQuery2.svg +0 -505
  550. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig1.svg +0 -1
  551. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig2.svg +0 -1
  552. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig3.svg +0 -1
  553. amps-python-client-5.3.4.1/docs/user-guide/html/_images/UseCaseFig4.svg +0 -1
  554. amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.png +0 -0
  555. amps-python-client-5.3.4.1/docs/user-guide/html/_images/caution.svg +0 -25
  556. amps-python-client-5.3.4.1/docs/user-guide/html/_images/chicago_group.png +0 -0
  557. amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_original_messages.png +0 -0
  558. amps-python-client-5.3.4.1/docs/user-guide/html/_images/delta_update_message.png +0 -0
  559. amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.png +0 -0
  560. amps-python-client-5.3.4.1/docs/user-guide/html/_images/important.svg +0 -25
  561. amps-python-client-5.3.4.1/docs/user-guide/html/_images/inline_view_conflation.svg +0 -1
  562. amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_pub.png +0 -0
  563. amps-python-client-5.3.4.1/docs/user-guide/html/_images/paginated_subs_sub.png +0 -0
  564. amps-python-client-5.3.4.1/docs/user-guide/html/_images/queue_usage_overview.svg +0 -627
  565. amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_hub.png +0 -0
  566. amps-python-client-5.3.4.1/docs/user-guide/html/_images/replication_scenario_with_ha.png +0 -0
  567. amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_1.svg +0 -248
  568. amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_overview_2.svg +0 -183
  569. amps-python-client-5.3.4.1/docs/user-guide/html/_images/sow_update_sequence.svg +0 -1
  570. amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.png +0 -0
  571. amps-python-client-5.3.4.1/docs/user-guide/html/_images/tip.svg +0 -31
  572. amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.png +0 -0
  573. amps-python-client-5.3.4.1/docs/user-guide/html/_images/warning.svg +0 -23
  574. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/acks.rst.txt +0 -232
  575. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/actions.rst.txt +0 -111
  576. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps-statistics.rst.txt +0 -358
  577. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_expressions.rst.txt +0 -83
  578. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/amps_functions.rst.txt +0 -11
  579. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/auxiliary_modules.rst.txt +0 -86
  580. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/config-file-shortcuts.rst.txt +0 -9
  581. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/conflated_topics.rst.txt +0 -111
  582. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/constructing-fields.rst.txt +0 -269
  583. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/daemon.rst.txt +0 -232
  584. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/delta.rst.txt +0 -556
  585. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/distribution.rst.txt +0 -186
  586. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/enrichment.rst.txt +0 -191
  587. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/events.rst.txt +0 -39
  588. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/file_format_versions.rst.txt +0 -203
  589. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/glossary.rst.txt +0 -101
  590. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/ha.rst.txt +0 -465
  591. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/installing_and_starting.rst.txt +0 -23
  592. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/intro.rst.txt +0 -116
  593. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/logging.rst.txt +0 -34
  594. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/messageTypes.rst.txt +0 -1398
  595. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/monitoring.rst.txt +0 -326
  596. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/oof.rst.txt +0 -312
  597. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/operation.rst.txt +0 -27
  598. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/pub_sub.rst.txt +0 -49
  599. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/queues.rst.txt +0 -1351
  600. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/replication.rst.txt +0 -1228
  601. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/securing.rst.txt +0 -657
  602. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow.rst.txt +0 -57
  603. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/sow_queries.rst.txt +0 -25
  604. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/transports.rst.txt +0 -291
  605. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/troubleshooting.rst.txt +0 -517
  606. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/txlog.rst.txt +0 -62
  607. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/usecases.rst.txt +0 -21
  608. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/utilities.rst.txt +0 -62
  609. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/chapters/views.rst.txt +0 -175
  610. amps-python-client-5.3.4.1/docs/user-guide/html/_sources/index.rst.txt +0 -110
  611. amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css +0 -192
  612. amps-python-client-5.3.4.1/docs/user-guide/html/_static/custom.css.backup +0 -161
  613. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/acks.html +0 -289
  614. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/actions.html +0 -3782
  615. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps-statistics.html +0 -439
  616. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_expressions.html +0 -1552
  617. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/amps_functions.html +0 -1626
  618. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/auxiliary_modules.html +0 -2548
  619. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/config-file-shortcuts.html +0 -508
  620. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/conflated_topics.html +0 -328
  621. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/constructing-fields.html +0 -447
  622. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/daemon.html +0 -295
  623. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/delta.html +0 -609
  624. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/distribution.html +0 -246
  625. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/enrichment.html +0 -264
  626. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/events.html +0 -449
  627. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/file_format_versions.html +0 -229
  628. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/glossary.html +0 -215
  629. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/ha.html +0 -978
  630. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/installing_and_starting.html +0 -357
  631. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/intro.html +0 -572
  632. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/logging.html +0 -972
  633. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/messageTypes.html +0 -1280
  634. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/monitoring.html +0 -718
  635. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/oof.html +0 -341
  636. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/operation.html +0 -1515
  637. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/pub_sub.html +0 -934
  638. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/queues.html +0 -1767
  639. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/replication.html +0 -1777
  640. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/securing.html +0 -697
  641. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow.html +0 -1038
  642. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/sow_queries.html +0 -621
  643. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/spark.html +0 -819
  644. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/transports.html +0 -352
  645. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/troubleshooting.html +0 -530
  646. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/txlog.html +0 -1013
  647. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/usecases.html +0 -288
  648. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/utilities.html +0 -133
  649. amps-python-client-5.3.4.1/docs/user-guide/html/chapters/views.html +0 -1120
  650. amps-python-client-5.3.4.1/docs/user-guide/html/genindex.html +0 -1261
  651. amps-python-client-5.3.4.1/docs/user-guide/html/index.html +0 -163
  652. amps-python-client-5.3.4.1/docs/user-guide/html/objects.inv +0 -0
  653. amps-python-client-5.3.4.1/docs/user-guide/html/search.html +0 -106
  654. amps-python-client-5.3.4.1/docs/user-guide/html/searchindex.js +0 -1
  655. amps-python-client-5.3.4.1/include/ampspy_bookmarkstore.hpp +0 -63
  656. amps-python-client-5.3.4.1/include/ampspy_compat.h +0 -63
  657. amps-python-client-5.3.4.1/include/ampspy_defs.hpp +0 -181
  658. amps-python-client-5.3.4.1/include/ampspy_recoverypointadapter.hpp +0 -52
  659. amps-python-client-5.3.4.1/include/ampspy_shims.hpp +0 -113
  660. amps-python-client-5.3.4.1/include/ampspy_type_object.hpp +0 -242
  661. amps-python-client-5.3.4.1/include/ampspy_types.hpp +0 -1139
  662. amps-python-client-5.3.4.1/include/ampspyver.h +0 -30
  663. amps-python-client-5.3.4.1/index.html +0 -66
  664. amps-python-client-5.3.4.1/samples/AMPSConsolePublisher.py +0 -59
  665. amps-python-client-5.3.4.1/samples/AMPSConsoleSubscriber.py +0 -63
  666. amps-python-client-5.3.4.1/samples/AMPSFIXBuilderPublisher.py +0 -71
  667. amps-python-client-5.3.4.1/samples/AMPSFIXShredderSubscriber.py +0 -69
  668. amps-python-client-5.3.4.1/samples/AMPSNVFIXBuilderPublisher.py +0 -71
  669. amps-python-client-5.3.4.1/samples/AMPSNVFIXShredderSubscriber.py +0 -67
  670. amps-python-client-5.3.4.1/samples/AMPSPublishForReplay.py +0 -81
  671. amps-python-client-5.3.4.1/samples/AMPSQueueConsumer.py +0 -69
  672. amps-python-client-5.3.4.1/samples/AMPSQueuePublisher.py +0 -59
  673. amps-python-client-5.3.4.1/samples/AMPSSOWConsolePublisher.py +0 -67
  674. amps-python-client-5.3.4.1/samples/AMPSSOWConsoleSubscriber.py +0 -77
  675. amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeConsoleSubscriber.py +0 -79
  676. amps-python-client-5.3.4.1/samples/AMPSSOWandSubscribeWithOOF.py +0 -108
  677. amps-python-client-5.3.4.1/samples/AMPSSubscribeForReplay.py +0 -128
  678. amps-python-client-5.3.4.1/samples/AMPSUpdateForOOF.py +0 -123
  679. amps-python-client-5.3.4.1/samples/CompositeMessagePublisher.py +0 -84
  680. amps-python-client-5.3.4.1/samples/CompositeMessageSubscriber.py +0 -87
  681. amps-python-client-5.3.4.1/samples/RandomServerChooser.py +0 -41
  682. amps-python-client-5.3.4.1/samples/sample.xml +0 -335
  683. amps-python-client-5.3.4.1/setup.py +0 -209
  684. amps-python-client-5.3.4.1/setup_amps.py +0 -94
  685. amps-python-client-5.3.4.1/src/ampspy_shims.cpp +0 -203
  686. amps-python-client-5.3.4.1/src/ampspy_type_object.cpp +0 -484
  687. amps-python-client-5.3.4.1/src/authenticator.cpp +0 -128
  688. amps-python-client-5.3.4.1/src/bookmarkstore.cpp +0 -238
  689. amps-python-client-5.3.4.1/src/client.cpp +0 -2430
  690. amps-python-client-5.3.4.1/src/client_docs.h +0 -956
  691. amps-python-client-5.3.4.1/src/cmessagehandler.cpp +0 -151
  692. amps-python-client-5.3.4.1/src/command.cpp +0 -164
  693. amps-python-client-5.3.4.1/src/command_docs.h +0 -194
  694. amps-python-client-5.3.4.1/src/compositemessagebuilder.cpp +0 -111
  695. amps-python-client-5.3.4.1/src/compositemessageparser.cpp +0 -146
  696. amps-python-client-5.3.4.1/src/conflatingrecoverypointadapter.cpp +0 -194
  697. amps-python-client-5.3.4.1/src/cpp/include/amps/BlockPublishStore.hpp +0 -2053
  698. amps-python-client-5.3.4.1/src/cpp/include/amps/BlockStore.hpp +0 -677
  699. amps-python-client-5.3.4.1/src/cpp/include/amps/BookmarkStore.hpp +0 -542
  700. amps-python-client-5.3.4.1/src/cpp/include/amps/Buffer.hpp +0 -214
  701. amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageBuilder.hpp +0 -174
  702. amps-python-client-5.3.4.1/src/cpp/include/amps/CompositeMessageParser.hpp +0 -151
  703. amps-python-client-5.3.4.1/src/cpp/include/amps/DefaultServerChooser.hpp +0 -162
  704. amps-python-client-5.3.4.1/src/cpp/include/amps/Field.hpp +0 -719
  705. amps-python-client-5.3.4.1/src/cpp/include/amps/HAClient.hpp +0 -370
  706. amps-python-client-5.3.4.1/src/cpp/include/amps/HAClientImpl.hpp +0 -460
  707. amps-python-client-5.3.4.1/src/cpp/include/amps/HybridPublishStore.hpp +0 -481
  708. amps-python-client-5.3.4.1/src/cpp/include/amps/LoggedBookmarkStore.hpp +0 -1255
  709. amps-python-client-5.3.4.1/src/cpp/include/amps/MMapBookmarkStore.hpp +0 -1283
  710. amps-python-client-5.3.4.1/src/cpp/include/amps/MMapStoreBuffer.hpp +0 -290
  711. amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryBookmarkStore.hpp +0 -1622
  712. amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryPublishStore.hpp +0 -66
  713. amps-python-client-5.3.4.1/src/cpp/include/amps/MemoryStoreBuffer.hpp +0 -244
  714. amps-python-client-5.3.4.1/src/cpp/include/amps/MemorySubscriptionManager.hpp +0 -850
  715. amps-python-client-5.3.4.1/src/cpp/include/amps/Message.hpp +0 -1819
  716. amps-python-client-5.3.4.1/src/cpp/include/amps/MessageRouter.hpp +0 -618
  717. amps-python-client-5.3.4.1/src/cpp/include/amps/PublishStore.hpp +0 -158
  718. amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategy.hpp +0 -106
  719. amps-python-client-5.3.4.1/src/cpp/include/amps/ReconnectDelayStrategyImpl.hpp +0 -317
  720. amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPoint.hpp +0 -323
  721. amps-python-client-5.3.4.1/src/cpp/include/amps/RecoveryPointAdapter.hpp +0 -501
  722. amps-python-client-5.3.4.1/src/cpp/include/amps/RingBookmarkStore.hpp +0 -669
  723. amps-python-client-5.3.4.1/src/cpp/include/amps/SOWRecoveryPointAdapter.hpp +0 -490
  724. amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooser.hpp +0 -145
  725. amps-python-client-5.3.4.1/src/cpp/include/amps/ServerChooserImpl.hpp +0 -95
  726. amps-python-client-5.3.4.1/src/cpp/include/amps/amps.h +0 -775
  727. amps-python-client-5.3.4.1/src/cpp/include/amps/amps_impl.h +0 -204
  728. amps-python-client-5.3.4.1/src/cpp/include/amps/amps_ssl.h +0 -78
  729. amps-python-client-5.3.4.1/src/cpp/include/amps/ampscrc.hpp +0 -210
  730. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsplusplus.hpp +0 -8817
  731. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsuri.h +0 -84
  732. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h +0 -41
  733. amps-python-client-5.3.4.1/src/cpp/include/amps/ampsver.h.in +0 -41
  734. amps-python-client-5.3.4.1/src/cpp/include/amps/constants.hpp +0 -194
  735. amps-python-client-5.3.4.1/src/cpp/include/amps/util.hpp +0 -1692
  736. amps-python-client-5.3.4.1/src/cpp/src/amps_protocol.c +0 -688
  737. amps-python-client-5.3.4.1/src/cpp/src/amps_ssl.c +0 -489
  738. amps-python-client-5.3.4.1/src/cpp/src/atfork.c +0 -446
  739. amps-python-client-5.3.4.1/src/cpp/src/client.c +0 -483
  740. amps-python-client-5.3.4.1/src/cpp/src/message.c +0 -837
  741. amps-python-client-5.3.4.1/src/cpp/src/message_generated.h +0 -611
  742. amps-python-client-5.3.4.1/src/cpp/src/tcp.c +0 -1489
  743. amps-python-client-5.3.4.1/src/cpp/src/tcps.c +0 -1894
  744. amps-python-client-5.3.4.1/src/cpp/src/transports.c +0 -123
  745. amps-python-client-5.3.4.1/src/cpp/src/unix.c +0 -984
  746. amps-python-client-5.3.4.1/src/cpp/src/uri.c +0 -301
  747. amps-python-client-5.3.4.1/src/exponentialdelaystrategy.cpp +0 -137
  748. amps-python-client-5.3.4.1/src/failedwritehandler.cpp +0 -116
  749. amps-python-client-5.3.4.1/src/fixbuilder.cpp +0 -146
  750. amps-python-client-5.3.4.1/src/fixeddelaystrategy.cpp +0 -114
  751. amps-python-client-5.3.4.1/src/fixshredder.cpp +0 -105
  752. amps-python-client-5.3.4.1/src/fixshredder_docs.h +0 -38
  753. amps-python-client-5.3.4.1/src/haclient.cpp +0 -691
  754. amps-python-client-5.3.4.1/src/haclient_docs.h +0 -132
  755. amps-python-client-5.3.4.1/src/hybridpublishstore.cpp +0 -137
  756. amps-python-client-5.3.4.1/src/hybridpublishstore_docs.h +0 -31
  757. amps-python-client-5.3.4.1/src/memorybookmarkstore.cpp +0 -373
  758. amps-python-client-5.3.4.1/src/memorybookmarkstore_docs.h +0 -39
  759. amps-python-client-5.3.4.1/src/memorypublishstore.cpp +0 -160
  760. amps-python-client-5.3.4.1/src/memorypublishstore_docs.h +0 -32
  761. amps-python-client-5.3.4.1/src/message.cpp +0 -765
  762. amps-python-client-5.3.4.1/src/message_docs.h +0 -306
  763. amps-python-client-5.3.4.1/src/messagestream.cpp +0 -623
  764. amps-python-client-5.3.4.1/src/messagestream_docs.h +0 -45
  765. amps-python-client-5.3.4.1/src/mmapbookmarkstore.cpp +0 -422
  766. amps-python-client-5.3.4.1/src/nvfixbuilder.cpp +0 -160
  767. amps-python-client-5.3.4.1/src/nvfixbuilder_docs.h +0 -33
  768. amps-python-client-5.3.4.1/src/nvfixshredder.cpp +0 -99
  769. amps-python-client-5.3.4.1/src/nvfixshredder_docs.h +0 -39
  770. amps-python-client-5.3.4.1/src/publishstore.cpp +0 -183
  771. amps-python-client-5.3.4.1/src/raw_wrapper.cpp +0 -756
  772. amps-python-client-5.3.4.1/src/reason.cpp +0 -71
  773. amps-python-client-5.3.4.1/src/recoverypoint.cpp +0 -135
  774. amps-python-client-5.3.4.1/src/recoverypointadapter.cpp +0 -171
  775. amps-python-client-5.3.4.1/src/ringbookmarkstore.cpp +0 -360
  776. amps-python-client-5.3.4.1/src/serverchooser.cpp +0 -245
  777. amps-python-client-5.3.4.1/src/serverchooser_docs.h +0 -39
  778. amps-python-client-5.3.4.1/src/sowrecoverypointadapter.cpp +0 -248
  779. amps-python-client-5.3.4.1/src/store.cpp +0 -62
  780. amps-python-client-5.3.4.1/src/versioninfo.cpp +0 -175
  781. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/HISTORY +0 -0
  782. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/README.md +0 -0
  783. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/ajax-loader.gif +0 -0
  784. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/alabaster.css +0 -0
  785. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/basic.css +0 -0
  786. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-bright.png +0 -0
  787. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment-close.png +0 -0
  788. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/comment.png +0 -0
  789. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/doctools.js +0 -0
  790. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down-pressed.png +0 -0
  791. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/down.png +0 -0
  792. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/file.png +0 -0
  793. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.png +0 -0
  794. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/flag_logo.svg +0 -0
  795. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery-3.1.0.js +0 -0
  796. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/jquery.js +0 -0
  797. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/minus.png +0 -0
  798. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/plus.png +0 -0
  799. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/pygments.css +0 -0
  800. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/searchtools.js +0 -0
  801. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore-1.3.1.js +0 -0
  802. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/underscore.js +0 -0
  803. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up-pressed.png +0 -0
  804. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/up.png +0 -0
  805. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/command-reference/html/_static/websupport.js +0 -0
  806. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_sources/code.rst.txt +0 -0
  807. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_sources/index.rst.txt +0 -0
  808. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/ajax-loader.gif +0 -0
  809. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/basic.css +0 -0
  810. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/classic.css +0 -0
  811. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment-bright.png +0 -0
  812. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment-close.png +0 -0
  813. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/comment.png +0 -0
  814. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/default.css +0 -0
  815. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/doctools.js +0 -0
  816. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/down-pressed.png +0 -0
  817. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/down.png +0 -0
  818. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/file.png +0 -0
  819. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/jquery-3.1.0.js +0 -0
  820. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/jquery.js +0 -0
  821. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/minus.png +0 -0
  822. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/plus.png +0 -0
  823. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/pygments.css +0 -0
  824. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/searchtools.js +0 -0
  825. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/sidebar.js +0 -0
  826. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/underscore-1.3.1.js +0 -0
  827. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/underscore.js +0 -0
  828. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/up-pressed.png +0 -0
  829. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/up.png +0 -0
  830. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/html/_static/websupport.js +0 -0
  831. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/caution.png +0 -0
  832. {amps-python-client-5.3.4.1/docs/command-reference → amps-python-client-5.3.4.3/docs/python}/html/_images/caution.svg +0 -0
  833. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/connection_string.svg +0 -0
  834. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.png +0 -0
  835. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/important.svg +0 -0
  836. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.png +0 -0
  837. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/tip.svg +0 -0
  838. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_images/warning.png +0 -0
  839. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_sources/chapters/cpp-compiler-list.rst.txt +0 -0
  840. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_sources/index.rst.txt +0 -0
  841. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/ajax-loader.gif +0 -0
  842. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/alabaster.css +0 -0
  843. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/basic.css +0 -0
  844. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-bright.png +0 -0
  845. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment-close.png +0 -0
  846. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/comment.png +0 -0
  847. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/doctools.js +0 -0
  848. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/down-pressed.png +0 -0
  849. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/down.png +0 -0
  850. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/file.png +0 -0
  851. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.png +0 -0
  852. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/flag_logo.svg +0 -0
  853. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery-3.1.0.js +0 -0
  854. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/jquery.js +0 -0
  855. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/minus.png +0 -0
  856. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/plus.png +0 -0
  857. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/pygments.css +0 -0
  858. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/searchtools.js +0 -0
  859. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore-1.3.1.js +0 -0
  860. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/underscore.js +0 -0
  861. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/up-pressed.png +0 -0
  862. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/up.png +0 -0
  863. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python/html/_static/websupport.js +0 -0
  864. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/crankitup.rst.txt +0 -0
  865. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/chapters/equipment.rst.txt +0 -0
  866. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_sources/index.rst.txt +0 -0
  867. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/ajax-loader.gif +0 -0
  868. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/alabaster.css +0 -0
  869. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/basic.css +0 -0
  870. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-bright.png +0 -0
  871. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment-close.png +0 -0
  872. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/comment.png +0 -0
  873. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/doctools.js +0 -0
  874. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down-pressed.png +0 -0
  875. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/down.png +0 -0
  876. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/file.png +0 -0
  877. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.png +0 -0
  878. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/flag_logo.svg +0 -0
  879. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery-3.1.0.js +0 -0
  880. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/jquery.js +0 -0
  881. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/minus.png +0 -0
  882. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/plus.png +0 -0
  883. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/pygments.css +0 -0
  884. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/searchtools.js +0 -0
  885. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore-1.3.1.js +0 -0
  886. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/underscore.js +0 -0
  887. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up-pressed.png +0 -0
  888. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/up.png +0 -0
  889. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/python-quickstart/html/_static/websupport.js +0 -0
  890. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/resources/custom.css +0 -0
  891. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/resources/flag_logo.svg +0 -0
  892. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_sources/chapters/spark.rst.txt +0 -0
  893. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/ajax-loader.gif +0 -0
  894. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/alabaster.css +0 -0
  895. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/basic.css +0 -0
  896. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-bright.png +0 -0
  897. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment-close.png +0 -0
  898. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/comment.png +0 -0
  899. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/doctools.js +0 -0
  900. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down-pressed.png +0 -0
  901. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/down.png +0 -0
  902. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/file.png +0 -0
  903. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.png +0 -0
  904. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/flag_logo.svg +0 -0
  905. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery-3.1.0.js +0 -0
  906. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/jquery.js +0 -0
  907. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/minus.png +0 -0
  908. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/plus.png +0 -0
  909. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/pygments.css +0 -0
  910. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/searchtools.js +0 -0
  911. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore-1.3.1.js +0 -0
  912. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/underscore.js +0 -0
  913. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up-pressed.png +0 -0
  914. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/up.png +0 -0
  915. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/docs/user-guide/html/_static/websupport.js +0 -0
  916. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/include/amps/amps_generated.h +0 -0
  917. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/src/amps_protocol_generated.h +0 -0
  918. {amps-python-client-5.3.4.1 → amps-python-client-5.3.4.3}/src/cpp/src/makefile +0 -0
@@ -1,1777 +0,0 @@
1
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
-
4
-
5
- <html xmlns="http://www.w3.org/1999/xhtml">
6
- <head>
7
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
-
9
- <title>25. Replicating Messages Between Instances &#8212; AMPS User Guide develop documentation</title>
10
-
11
- <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
12
- <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
13
-
14
- <script type="text/javascript">
15
- var DOCUMENTATION_OPTIONS = {
16
- URL_ROOT: '../',
17
- VERSION: 'develop',
18
- COLLAPSE_INDEX: false,
19
- FILE_SUFFIX: '.html',
20
- HAS_SOURCE: true,
21
- SOURCELINK_SUFFIX: '.txt'
22
- };
23
- </script>
24
- <script type="text/javascript" src="../_static/jquery.js"></script>
25
- <script type="text/javascript" src="../_static/underscore.js"></script>
26
- <script type="text/javascript" src="../_static/doctools.js"></script>
27
- <link rel="index" title="Index" href="../genindex.html" />
28
- <link rel="search" title="Search" href="../search.html" />
29
- <link rel="next" title="26. Highly Available AMPS Installations" href="ha.html" />
30
- <link rel="prev" title="24. Automating AMPS With Actions" href="actions.html" />
31
-
32
- <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
33
-
34
-
35
- <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
36
-
37
- </head>
38
- <body role="document">
39
- <div class="document">
40
-
41
- <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
42
- <div class="sphinxsidebarwrapper">
43
- <p class="logo"><a href="../index.html">
44
- <img class="logo" src="../_static/flag_logo.png" alt="Logo"/>
45
- </a></p>
46
- <h3><a href="../index.html">Table Of Contents</a></h3>
47
- <ul>
48
- <li><a class="reference internal" href="#">25. Replicating Messages Between Instances</a><ul>
49
- <li><a class="reference internal" href="#replication-basics">Replication Basics</a><ul>
50
- <li><a class="reference internal" href="#benefits-of-replication">Benefits of Replication</a></li>
51
- </ul>
52
- </li>
53
- <li><a class="reference internal" href="#configuring-replication">Configuring Replication</a><ul>
54
- <li><a class="reference internal" href="#sync-vs-async-acknowledgment">Sync vs Async Acknowledgment</a></li>
55
- <li><a class="reference internal" href="#downgrading-acknowledgments-for-a-destination">Downgrading Acknowledgments for a Destination</a></li>
56
- </ul>
57
- </li>
58
- <li><a class="reference internal" href="#replication-configuration-validation">Replication Configuration Validation</a></li>
59
- <li><a class="reference internal" href="#replication-resynchronization">Replication Resynchronization</a></li>
60
- <li><a class="reference internal" href="#replication-compression">Replication Compression</a></li>
61
- <li><a class="reference internal" href="#destination-server-failover">Destination Server Failover</a></li>
62
- <li><a class="reference internal" href="#two-way-replication">Two-Way Replication</a></li>
63
- <li><a class="reference internal" href="#passthrough-replication">PassThrough Replication</a></li>
64
- <li><a class="reference internal" href="#guarantees-on-ordering">Guarantees on Ordering</a></li>
65
- <li><a class="reference internal" href="#replication-security">Replication Security</a></li>
66
- <li><a class="reference internal" href="#understanding-replication-message-routing">Understanding Replication Message Routing</a></li>
67
- <li><a class="reference internal" href="#maximum-downstream-destinations">Maximum Downstream Destinations</a></li>
68
- <li><a class="reference internal" href="#replicated-queues">Replicated Queues</a><ul>
69
- <li><a class="reference internal" href="#queue-message-ownership">Queue Message Ownership</a><ul>
70
- <li><a class="reference internal" href="#failover-and-queue-message-ownership">Failover and Queue Message Ownership</a></li>
71
- </ul>
72
- </li>
73
- <li><a class="reference internal" href="#configuration-for-queue-replication">Configuration for Queue Replication</a></li>
74
- </ul>
75
- </li>
76
- <li><a class="reference internal" href="#bootstrap-initialization-of-amps-replication">Bootstrap Initialization of AMPS Replication</a><ul>
77
- <li><a class="reference internal" href="#when-to-use-bootstrap-initialization">When to Use Bootstrap Initialization</a></li>
78
- <li><a class="reference internal" href="#starting-bootstrap-initialization">Starting Bootstrap Initialization</a></li>
79
- <li><a class="reference internal" href="#configuring-bootstrap-initialization">Configuring Bootstrap Initialization</a></li>
80
- </ul>
81
- </li>
82
- <li><a class="reference internal" href="#replication-best-practices">Replication Best Practices</a></li>
83
- </ul>
84
- </li>
85
- </ul>
86
- <div class="relations">
87
- <h3>Related Topics</h3>
88
- <ul>
89
- <li><a href="../index.html">Documentation overview</a><ul>
90
- <li>Previous: <a href="actions.html" title="previous chapter">24. Automating AMPS With Actions</a></li>
91
- <li>Next: <a href="ha.html" title="next chapter">26. Highly Available AMPS Installations</a></li>
92
- </ul></li>
93
- </ul>
94
- </div>
95
- <div id="searchbox" style="display: none" role="search">
96
- <h3>Quick search</h3>
97
- <form class="search" action="../search.html" method="get">
98
- <div><input type="text" name="q" /></div>
99
- <div><input type="submit" value="Go" /></div>
100
- <input type="hidden" name="check_keywords" value="yes" />
101
- <input type="hidden" name="area" value="default" />
102
- </form>
103
- </div>
104
- <script type="text/javascript">$('#searchbox').show(0);</script>
105
- </div>
106
- </div>
107
- <div class="documentwrapper">
108
- <div class="bodywrapper">
109
- <div class="body" role="main">
110
-
111
- <div class="section" id="replicating-messages-between-instances">
112
- <span id="replication"></span><span id="ha-replication"></span><span id="index-0"></span><h1>25. Replicating Messages Between Instances<a class="headerlink" href="#replicating-messages-between-instances" title="Permalink to this headline">¶</a></h1>
113
- <p>AMPS has the ability to replicate messages to downstream AMPS instances
114
- once those messages are stored to a transaction log. Replication in AMPS
115
- involves the configuration of two or more instances designed to share
116
- some or all of the published messages. With AMPS replication, an
117
- upstream (or source) instance delivers messages to
118
- a downstream instance.</p>
119
- <p>Replication is typically used to improve the availability of a
120
- set of AMPS instances by creating a set of servers that hold
121
- the same messages, where each server can take over for the
122
- others in the event of a network or server failure.</p>
123
- <p>Since AMPS replication operates on individual messages,
124
- replication is also an efficient way to split and share message
125
- streams between multiple sites where each downstream site
126
- may only want a subset of the messages from the upstream
127
- instances.</p>
128
- <p>AMPS replication uses a leaderless, &#8220;all nodes hot&#8221; model. Any instance
129
- in a replication fabric can accept publishes and updates at any time,
130
- and there is no need for a message to be replicated downstream before
131
- it is delivered to subscribers (unless a subscriber explicitly
132
- requests otherwise using the <code class="docutils literal"><span class="pre">fully_durable</span></code> option on a
133
- bookmark replay).</p>
134
- <div class="admonition tip">
135
- <p class="first admonition-title">Tip</p>
136
- <p>The only communication between instances of AMPS is
137
- through replication. AMPS instances do not share
138
- state through the filesystem or any out-of-band
139
- communication.</p>
140
- <p class="last">AMPS high availability and replication do not rely
141
- on a quorum or a controller instance. Each instance
142
- of AMPS processes messages independently. Each
143
- instance of AMPS manages connections and subscriptions
144
- locally.</p>
145
- </div>
146
- <p>AMPS supports two forms of message acknowledgment for replication links:
147
- <em>synchronous</em> and <em>asynchronous</em>; these settings control when AMPS considers
148
- a message persisted. This controls when AMPS sends publishers
149
- <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgments and the point at which AMPS considers
150
- a message to be fully persisted for bookmark subscribers. These settings do not
151
- affect when or how messages are replicated, or when or how messages are
152
- delivered to subscribers unless a subscriber explicitly requests this
153
- behavior. These settings only affect when AMPS acknowledges to the publisher
154
- that the message has been persisted. They do not affect the speed of
155
- replication, the priority of replication, or the guarantees that AMPS
156
- makes for ensuring that all replicated messages are acknowledged by
157
- the downstream instance before they can be removed from the transaction
158
- log.</p>
159
- <p>AMPS replication consists of a message stream (or, more precisely, a
160
- command stream) provided to downstream instances. AMPS replicates
161
- the messages produced as a result of <code class="docutils literal"><span class="pre">publish</span></code> and <code class="docutils literal"><span class="pre">delta_publish</span></code>
162
- and replicates <code class="docutils literal"><span class="pre">sow_delete</span></code> commands. AMPS does not
163
- replicate messages produced internally by AMPS, such as the results of
164
- <code class="docutils literal"><span class="pre">Views</span></code> or updates sent to a <code class="docutils literal"><span class="pre">ConflatedTopic</span></code>. When replicating
165
- queues, AMPS also uses the replication connection to send and receive
166
- administrative commands related to queues, as described in the section
167
- on <a class="reference internal" href="#ug-replicated-queues"><span class="std std-ref">Replicated Queues</span></a>.</p>
168
- <div class="admonition important">
169
- <p class="first admonition-title">Important</p>
170
- <p>60East recommends that any server that participates in replication
171
- <em>and</em> that accepts publishes, SOW deletes, or queue acknowledgments
172
- directly from applications is configured with at least
173
- one <code class="docutils literal"><span class="pre">sync</span></code> replication destination.</p>
174
- <p class="last">Without at least one destination that uses <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment,
175
- an AMPS instance could be a single point of failure, resulting in
176
- possible message loss if the instance has an unrecoverable failure
177
- (such as a hardware failure) between the time that
178
- the server acknowledges a command to a client, and the time that
179
- a replication destination receives and persists the command.</p>
180
- </div>
181
- <p>Notice that when replicating the results of a <code class="docutils literal"><span class="pre">delta_publish</span></code> command, and
182
- publishes to a topic that provides preprocessing and enrichment, AMPS
183
- replicates the fully processed and merged message &#8211; exactly the information
184
- that is written to the local transaction log and sent to subscribers. AMPS does
185
- <em>not</em> save the original command to the transaction log or replicate the original
186
- command. Instead, AMPS stores the message produced by the command and replicates that
187
- message.</p>
188
- <div class="section" id="replication-basics">
189
- <h2>Replication Basics<a class="headerlink" href="#replication-basics" title="Permalink to this headline">¶</a></h2>
190
- <p>Before planning an AMPS replication topology, it can be helpful to understand
191
- the basics of how AMPS replication works. This section presents a general
192
- overview of the concepts that are discussed in more detail in the following
193
- sections.</p>
194
- <ul>
195
- <li><p class="first"><strong>Replication is point-to-point</strong>. Each replication connection involves exactly two
196
- AMPS instances: a source (that provides messages) and a destination that receives
197
- messages.</p>
198
- </li>
199
- <li><p class="first"><strong>Replication is always &#8220;push&#8221; replication</strong>. In AMPS, the source configures a
200
- destination, and pushes messages to that destination. (Notice that it is possible
201
- to configure the source to wait for the destination to connect rather than
202
- actively making an outgoing connection, but replication is still a &#8220;push&#8221; from
203
- the source to the destination once that connection is made). The source must be
204
- configured to push messages to the destination, and
205
- the source guarantees that all messages to be replicated must be acknowledged
206
- by the destination before they can be removed from the transaction log.</p>
207
- </li>
208
- <li><p class="first"><strong>Replication is one-link by default</strong>. By default, an instance of AMPS
209
- <em>only</em> replicates messages that are published to that instance by a client.
210
- Optionally, an instance of AMPS can be configured to replicate messages
211
- that arrive over replication. Adding this configuration is typically
212
- required if there are more than two instances in a replicated set
213
- of AMPS instances. See <a class="reference internal" href="#ug-ha-passthrough"><span class="std std-ref">PassThrough Replication</span></a>
214
- for details.</p>
215
- </li>
216
- <li><p class="first"><strong>Replication relies on the transaction log</strong>. AMPS replicates the commands
217
- as preserved in the transaction log. This means, for example, that the
218
- results of delta publishes are replicated as fully-merged messages,
219
- since fully-merged messages are stored in the transaction log. Likewise,
220
- if duplicate messages arrive over different paths, only the first message
221
- to arrive will be stored in the transaction log, and that message is
222
- the one that will be replicated.</p>
223
- </li>
224
- <li><p class="first"><strong>Replication provides a command stream</strong>. In AMPS replication, the server
225
- replicates the results of <code class="docutils literal"><span class="pre">publish</span></code>, <code class="docutils literal"><span class="pre">delta_publish</span></code> and <code class="docutils literal"><span class="pre">sow_delete</span></code> commands
226
- once those results are written to the transaction log. Each individual command is
227
- replicated, for low latency and fine-grained control of what is replicated. If a
228
- command is not in the transaction log (for example, a maintenance action has
229
- removed the journal that contains that command, or the command is for a topic
230
- that is not recorded in the transaction log), that command will not be replicated.</p>
231
- <p>Replication is intended to guarantee that the command stream for a set of topics
232
- on one instance is present on the other instance, with the ordering of each
233
- message source preserved. This means that there can be only <em>one</em> connection
234
- from a given upstream instance to a given downstream instance.</p>
235
- </li>
236
- <li><p class="first"><strong>Replication is customizable by topic, message type, and content</strong>. AMPS can be configured to
237
- replicate the entire transaction log, or any subset of the transaction log. This makes it
238
- easy to use replication to populate view servers, test environments, or similar instances
239
- that require only partial views of the source data.</p>
240
- </li>
241
- <li><p class="first"><strong>Replication guarantees delivery</strong>. AMPS will not remove a journal file until
242
- <em>all</em> messages in that journal file have been replicated to, and acknowledged by,
243
- the destination.</p>
244
- </li>
245
- <li><p class="first"><strong>Replication is composable</strong>. AMPS is capable of building a sophisticated replication
246
- topology by composing connections. For example, full replication between two servers
247
- is two point-to-point connections, one in each direction. The basic point-to-point
248
- nature of connections makes it easy to reason about a single connection, and the
249
- composable nature of AMPS replication allows you to build replication networks
250
- that provide data distribution and high availability for applications across
251
- data centers and around the globe.</p>
252
- </li>
253
- <li><p class="first"><strong>Replication acknowledgment is configurable</strong>. The acknowledgment mode
254
- provides different guarantees: <em>async</em> acknowledgment provides durability
255
- guarantees for the local instance, whereas <em>sync</em> acknowledgment provides
256
- durability guarantees for the local instance and the downstream instance.</p>
257
- </li>
258
- <li><p class="first"><strong>Group</strong> identifies a set of instances that are intended to be fully
259
- equivalent for the purposes of message contents, application failover,
260
- and AMPS replication failover. Instances that are not intended to be
261
- fully equivalent for all of these purposes should be given a different
262
- <code class="docutils literal"><span class="pre">Group</span></code> name, even if they are in the same data center or geographic location,
263
- or if they would be treated as equivalent for some, but not all, purposes.</p>
264
- </li>
265
- </ul>
266
- <p>More details on each of these points is provided in this section.</p>
267
- <div class="section" id="benefits-of-replication">
268
- <h3>Benefits of Replication<a class="headerlink" href="#benefits-of-replication" title="Permalink to this headline">¶</a></h3>
269
- <p id="index-1">Replication can serve two purposes in AMPS:</p>
270
- <ol class="arabic simple">
271
- <li>It can increase the fault-tolerance of AMPS by creating a spare
272
- instance to cut over to when the primary instance fails.</li>
273
- <li>Replication can be used in message delivery to a remote site.</li>
274
- </ol>
275
- <p>In order to provide fault tolerance and reliable remote site message
276
- delivery, for the best possible messaging experience, there are some
277
- guarantees and features that AMPS has implemented. Those features are
278
- discussed below.</p>
279
- <p>Replication in AMPS supports filtering by both topic and by message
280
- content. This granularity in filtering allows replication sources to
281
- have complete control over what messages are sent to their downstream
282
- replication instances.</p>
283
- <p>Additionally, replication can improve availability of AMPS by creating a
284
- redundant instance of an AMPS server. Using replication, all of the
285
- messages which flow into a primary instance of AMPS can be replicated to
286
- a secondary spare instance. This way, if the primary instance should
287
- become unresponsive for any reason, then the secondary AMPS instance can
288
- be swapped in to begin processing message streams and requests.</p>
289
- <div class="admonition tip">
290
- <p class="first admonition-title">Tip</p>
291
- <p class="last">When an AMPS instance is a replication source, that instance
292
- <em>guarantees</em> that messages will not be removed from the
293
- transaction log until all destinations have acknowledged
294
- the message.</p>
295
- </div>
296
- </div>
297
- </div>
298
- <div class="section" id="configuring-replication">
299
- <h2>Configuring Replication<a class="headerlink" href="#configuring-replication" title="Permalink to this headline">¶</a></h2>
300
- <p id="index-2">Replication configuration involves the configuration of two or more
301
- instances of AMPS. For testing purposes both instances of AMPS can
302
- reside on the same physical host before deployment into a production
303
- environment. When running both instances on one machine, the performance
304
- characteristics will differ from production, so running both instances
305
- on one machine is more useful for testing configuration correctness than
306
- testing overall performance.</p>
307
- <p>Any instance that is intended to receive messages via replication
308
- must define an incoming replication transport as one of the
309
- <code class="docutils literal"><span class="pre">Transports</span></code> for the instance. An instance may have only one
310
- incoming replication transport.</p>
311
- <p>Any instance that is intended to replicate messages to another
312
- instance must specify a <code class="docutils literal"><span class="pre">Replication</span></code> stanza in the
313
- configuration file with at least one <code class="docutils literal"><span class="pre">Destination</span></code>. An
314
- instance can have multiple <code class="docutils literal"><span class="pre">Destination</span></code> declarations: each
315
- one defines a single outgoing replication connection.</p>
316
- <p>In AMPS replication, instances should only be configured as part
317
- of the same <code class="docutils literal"><span class="pre">Group</span></code> if they are fully equivalent. That is, not
318
- only should they contain the same messages, but they should be
319
- considered failover alternatives for applications and other
320
- AMPS servers. If two servers are not intended to be fully replicated
321
- (for example, if there is one-way replication between a production
322
- server and a test server), they should have different <code class="docutils literal"><span class="pre">Group</span></code>
323
- values.</p>
324
- <div class="admonition caution">
325
- <p class="first admonition-title">Caution</p>
326
- <p class="last">It&#8217;s important to make sure that when running multiple AMPS
327
- instances on the same host there are no conflicting ports.
328
- AMPS will emit an error message and will not start properly if
329
- it detects that a port specified in the configuration file is
330
- already in use.</p>
331
- </div>
332
- <p>For the purposes of explaining this example, we&#8217;re going to assume a
333
- simple hot-hot replication case where we have two instances of
334
- AMPS - the first host is named <code class="docutils literal"><span class="pre">amps-1</span></code> and the second host is named
335
- <code class="docutils literal"><span class="pre">amps-2</span></code>. Each of the instances are configured to replicate data to
336
- the other. That is, all messages published to <code class="docutils literal"><span class="pre">amps-1</span></code> are
337
- replicated to <code class="docutils literal"><span class="pre">amps-2</span></code> and vice versa. This configuration ensures that
338
- a message published to one instance is available on the other instance in
339
- the case of a failover (although, of course, the publishers and subscribers
340
- should also be configured for failover).</p>
341
- <div class="admonition caution">
342
- <p class="first admonition-title">Caution</p>
343
- <p>Every instance of AMPS that will participate in replication
344
- must have a unique <code class="docutils literal"><span class="pre">Name</span></code> among <em>all</em> of the instances that
345
- are part of replication.</p>
346
- <p>All instances that have the same <code class="docutils literal"><span class="pre">Group</span></code> must be able to
347
- be treated as equivalent by AMPS replication and AMPS
348
- clients.</p>
349
- <p class="last">If two instances of AMPS should be treated differently
350
- (for example, one instance receives publishes while the other
351
- is a read-only instance that receives one-way replication),
352
- those instances should be in different groups.</p>
353
- </div>
354
- <p>We will first show the relevant portion of the configuration used in
355
- <code class="docutils literal"><span class="pre">amps-1</span></code>, and then we will show the relevant configuration for
356
- <code class="docutils literal"><span class="pre">amps-2</span></code>.</p>
357
- <div class="admonition tip">
358
- <p class="first admonition-title">Tip</p>
359
- <p class="last">All topics to be replicated must be recorded in the transaction
360
- log. The examples below omit the transaction log configuration
361
- for brevity. Please reference the Transaction Log chapter for
362
- information on how to configure a transaction log for a topic.</p>
363
- </div>
364
- <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;AMPSConfig&gt;</span>
365
- <span class="nt">&lt;Name&gt;</span>amps-1<span class="nt">&lt;/Name&gt;</span>
366
- <span class="nt">&lt;Group&gt;</span>DataCenter-NYC-1<span class="nt">&lt;/Group&gt;</span>
367
- ...
368
-
369
- <span class="nt">&lt;Transports&gt;</span>
370
- <span class="nt">&lt;Transport&gt;</span>
371
-
372
- <span class="c">&lt;!-- The amps-replication transport is required.</span>
373
- <span class="c"> This is a proprietary message format used by</span>
374
- <span class="c"> AMPS to replicate messages between instances.</span>
375
- <span class="c"> This AMPS instance will receive replication messages</span>
376
- <span class="c"> on this transport. The instance can receive</span>
377
- <span class="c"> messages from any number of upstream instances</span>
378
- <span class="c"> on this transport.</span>
379
-
380
- <span class="c"> An instance of AMPS may only define one incoming replication</span>
381
- <span class="c"> transport. --&gt;</span>
382
-
383
- <span class="nt">&lt;Name&gt;</span>amps-replication<span class="nt">&lt;/Name&gt;</span>
384
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
385
- <span class="nt">&lt;InetAddr&gt;</span>10004<span class="nt">&lt;/InetAddr&gt;</span>
386
- <span class="nt">&lt;/Transport&gt;</span>
387
-
388
- <span class="c">&lt;!--</span>
389
- <span class="c"> Transports for application use also need to</span>
390
- <span class="c"> be defined. An amps-replication transport can</span>
391
- <span class="c"> only be used for replication --&gt;</span>
392
-
393
- ... transports for client use here ...
394
-
395
- <span class="nt">&lt;/Transports&gt;</span>
396
-
397
- ...
398
-
399
- <span class="c">&lt;!-- All replication destinations are defined inside the Replication block. --&gt;</span>
400
-
401
- <span class="nt">&lt;Replication&gt;</span>
402
-
403
- <span class="c">&lt;!--</span>
404
- <span class="c"> Each individual replication destination defines outgoing</span>
405
- <span class="c"> replication, that is, messages being replicated from</span>
406
- <span class="c"> this instance of AMPS to another instance of AMPS.</span>
407
- <span class="c"> --&gt;</span>
408
-
409
- <span class="nt">&lt;Destination&gt;</span>
410
-
411
- <span class="c">&lt;!-- The replicated topics and their respective message types are defined here. AMPS</span>
412
- <span class="c"> allows any number of Topic definitions in a Destination. --&gt;</span>
413
- <span class="nt">&lt;Topic&gt;</span>
414
- <span class="nt">&lt;MessageType&gt;</span>fix<span class="nt">&lt;/MessageType&gt;</span>
415
-
416
- <span class="c">&lt;!-- The Name definition specifies the name of the topic or topics to be replicated.</span>
417
- <span class="c"> The Name option can be either a specific topic name or a regular expression that</span>
418
- <span class="c"> matches a set of topic names. --&gt;</span>
419
- <span class="nt">&lt;Name&gt;</span>topic<span class="nt">&lt;/Name&gt;</span>
420
-
421
- <span class="nt">&lt;/Topic&gt;</span>
422
- <span class="nt">&lt;Topic&gt;</span>
423
- <span class="c">&lt;!-- Replicate any topic that uses the JSON message type</span>
424
- <span class="c"> and that starts with /orders --&gt;</span>
425
- <span class="nt">&lt;MessageType&gt;</span>json<span class="nt">&lt;/MessageType&gt;</span>
426
- <span class="nt">&lt;Name&gt;</span>^/orders/<span class="nt">&lt;/Name&gt;</span>
427
- <span class="nt">&lt;/Topic&gt;</span>
428
-
429
- <span class="nt">&lt;Name&gt;</span>amps-2<span class="nt">&lt;/Name&gt;</span>
430
-
431
- <span class="c">&lt;!-- Fully synchronize messages, including messages that</span>
432
- <span class="c"> were not originally published to this instance. --&gt;</span>
433
- <span class="nt">&lt;PassThrough&gt;</span>.*<span class="nt">&lt;/PassThrough&gt;</span>
434
-
435
- <span class="c">&lt;!-- The group name of the destination instance (or instances). The name specified</span>
436
- <span class="c"> here must match the Group defined for the remote AMPS instance, or AMPS reports</span>
437
- <span class="c"> an error and refuses to connect to the remote instance. --&gt;</span>
438
- <span class="nt">&lt;Group&gt;</span>DataCenter-NYC-1<span class="nt">&lt;/Group&gt;</span>
439
-
440
- <span class="c">&lt;!-- Replication acknowledgment can be either synchronous or</span>
441
- <span class="c"> asynchronous. This does not affect the speed or priority of</span>
442
- <span class="c"> the connection, but does control when this instance will</span>
443
- <span class="c"> acknowledge the message as safely persisted. --&gt;</span>
444
-
445
- <span class="nt">&lt;SyncType&gt;</span>sync<span class="nt">&lt;/SyncType&gt;</span>
446
-
447
- <span class="c">&lt;!-- The Transport definition defines the location to which this AMPS instance will</span>
448
- <span class="c"> replicate messages. The InetAddr points to the hostname and port of the</span>
449
- <span class="c"> downstream replication instance. The Type for a replication instance should</span>
450
- <span class="c"> always be amps-replication. --&gt;</span>
451
- <span class="nt">&lt;Transport&gt;</span>
452
-
453
- <span class="c">&lt;!-- The address, or list of addresses, for the replication destination. --&gt;</span>
454
- <span class="nt">&lt;InetAddr&gt;</span>amps-2-server.example.com:10005<span class="nt">&lt;/InetAddr&gt;</span>
455
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
456
- <span class="nt">&lt;/Transport&gt;</span>
457
- <span class="nt">&lt;/Destination&gt;</span>
458
- <span class="nt">&lt;/Replication&gt;</span>
459
-
460
- ...
461
-
462
- <span class="nt">&lt;/AMPSConfig&gt;</span>
463
- </pre></div>
464
- </div>
465
- <p><em>Configuration used for amps-1</em></p>
466
- <p>For the configuration of <code class="docutils literal"><span class="pre">amps-2</span></code>, we will use the following example.
467
- While this example is similar, only the differences between the
468
- <code class="docutils literal"><span class="pre">amps-1</span></code> configuration will be called out.</p>
469
- <div class="highlight-xml" id="repl-amps2-config"><div class="highlight"><pre><span></span><span class="nt">&lt;AMPSConfig&gt;</span>
470
- <span class="nt">&lt;Name&gt;</span>amps-2<span class="nt">&lt;/Name&gt;</span>
471
- <span class="nt">&lt;Group&gt;</span>DataCenter-NYC-1<span class="nt">&lt;/Group&gt;</span>
472
-
473
- ...
474
-
475
-
476
- <span class="nt">&lt;Transports&gt;</span>
477
-
478
- <span class="c">&lt;!-- The amps-replication transport is required</span>
479
- <span class="c"> This is a proprietary message format used by</span>
480
- <span class="c"> AMPS to replicate messages between instances.</span>
481
- <span class="c"> This AMPS instance will receive replication messages</span>
482
- <span class="c"> on this transport. The instance can receive</span>
483
- <span class="c"> messages from any number of upstream instances</span>
484
- <span class="c"> on this transport.</span>
485
-
486
- <span class="c"> An instance of AMPS may only define one incoming replication</span>
487
- <span class="c"> transport. --&gt;</span>
488
-
489
- <span class="nt">&lt;Transport&gt;</span>
490
- <span class="nt">&lt;Name&gt;</span>amps-replication<span class="nt">&lt;/Name&gt;</span>
491
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
492
-
493
- <span class="c">&lt;!-- The port where amps-2 listens for replication messages matches the port where</span>
494
- <span class="c"> amps-1 is configured to send its replication messages. This AMPS instance will</span>
495
- <span class="c"> receive replication messages on this transport. The instance can receive</span>
496
- <span class="c"> messages from any number of upstream instances on this transport. --&gt;</span>
497
- <span class="nt">&lt;InetAddr&gt;</span>10005<span class="nt">&lt;/InetAddr&gt;</span>
498
- <span class="nt">&lt;/Transport&gt;</span>
499
- <span class="nt">&lt;/Transports&gt;</span>
500
-
501
- ...
502
-
503
- <span class="nt">&lt;Replication&gt;</span>
504
- <span class="nt">&lt;Destination&gt;</span>
505
-
506
- <span class="c">&lt;!-- The Topic definitions for amps-2 match</span>
507
- <span class="c"> the definitions for amps-1 so that these</span>
508
- <span class="c"> topics contain the same messages in the</span>
509
- <span class="c"> transaction log on both instances. --&gt;</span>
510
-
511
- <span class="nt">&lt;Topic&gt;</span>
512
- <span class="nt">&lt;MessageType&gt;</span>fix<span class="nt">&lt;/MessageType&gt;</span>
513
- <span class="nt">&lt;Name&gt;</span>topic<span class="nt">&lt;/Name&gt;</span>
514
- <span class="nt">&lt;/Topic&gt;</span>
515
- <span class="nt">&lt;Topic&gt;</span>
516
- <span class="nt">&lt;MessageType&gt;</span>json<span class="nt">&lt;/MessageType&gt;</span>
517
- <span class="nt">&lt;Name&gt;</span>^/orders/<span class="nt">&lt;/Name&gt;</span>
518
- <span class="nt">&lt;/Topic&gt;</span>
519
- <span class="nt">&lt;Name&gt;</span>amps-1<span class="nt">&lt;/Name&gt;</span>
520
-
521
- <span class="c">&lt;!-- Fully synchronize messages, including messages that</span>
522
- <span class="c"> were not originally published to this instance. --&gt;</span>
523
- <span class="nt">&lt;PassThrough&gt;</span>.*<span class="nt">&lt;/PassThrough&gt;</span>
524
-
525
- <span class="nt">&lt;Group&gt;</span>DataCenter-NYC-1<span class="nt">&lt;/Group&gt;</span>
526
-
527
- <span class="nt">&lt;SyncType&gt;</span>sync<span class="nt">&lt;/SyncType&gt;</span>
528
- <span class="nt">&lt;Transport&gt;</span>
529
-
530
- <span class="c">&lt;!-- The replication destination port for amps-2 is configured to send replication</span>
531
- <span class="c"> messages to the same port on which amps-1 is configured to listen for them. --&gt;</span>
532
- <span class="nt">&lt;InetAddr&gt;</span>amps-1-server.example.com:10004<span class="nt">&lt;/InetAddr&gt;</span>
533
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
534
- <span class="nt">&lt;/Transport&gt;</span>
535
- <span class="nt">&lt;/Destination&gt;</span>
536
- <span class="nt">&lt;/Replication&gt;</span>
537
-
538
- ...
539
-
540
- <span class="nt">&lt;/AMPSConfig&gt;</span>
541
- </pre></div>
542
- </div>
543
- <p><em>Configuration for amps-2</em></p>
544
- <p>These example configurations replicate the topic named <code class="docutils literal"><span class="pre">topic</span></code> of the message type <code class="docutils literal"><span class="pre">nvfix</span></code>
545
- and any topic of the message type <code class="docutils literal"><span class="pre">json</span></code> that begins with <code class="docutils literal"><span class="pre">/orders/</span></code> between the
546
- two instances of AMPS. To replicate more topics, these instances could add
547
- additional <code class="docutils literal"><span class="pre">Topic</span></code> blocks.</p>
548
- <div class="section" id="sync-vs-async-acknowledgment">
549
- <h3>Sync vs Async Acknowledgment<a class="headerlink" href="#sync-vs-async-acknowledgment" title="Permalink to this headline">¶</a></h3>
550
- <p id="replication-sync-vs-async">When publishing to a topic that is recorded in the transaction log, it
551
- is recommended that publishers request a <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgment.
552
- The <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgment message is how AMPS notifies the
553
- publisher that a message received by AMPS is considered to be safely
554
- persisted, as specified in the configuration. (The AMPS client
555
- libraries automatically request this acknowledgment on each <code class="docutils literal"><span class="pre">publish</span></code>
556
- command when a publish store is present for the client &#8211; that is, any
557
- time that the client is configured to ensure that the publish is received
558
- by the AMPS server.)</p>
559
- <p>Depending on the replication destination configuration for the AMPS
560
- instance that receives the message, that <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgment
561
- message will be delivered to the publisher at different times in the
562
- replication process.</p>
563
- <p>There are two options: <em>synchronous</em> or <em>asynchronous</em> acknowledgment.
564
- These two acknowledgment <code class="docutils literal"><span class="pre">SyncType</span></code> options control when
565
- publishers of messages are sent <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgments.</p>
566
- <p>For <em>synchronous</em> replication acknowledgments, AMPS will not return a
567
- <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgment to the publisher for a message until the
568
- message has been stored to the local transaction log, to the SOW, and
569
- all downstream synchronous replication destinations have acknowledged
570
- the message. The figure below shows the cycle of a message being
571
- published in a replicated instance, and the persisted acknowledgment
572
- message being returned back to the publisher. Notice that, with this
573
- configuration, the publisher will not receive an acknowledgment if the
574
- remote destination is unavailable. 60East recommends that when you use
575
- <code class="docutils literal"><span class="pre">sync</span></code> replication, you consider setting a policy for downgrading the
576
- link when a destination is offline, as described in
577
- <a class="reference internal" href="#ug-replication-downgrade"><span class="std std-ref">Downgrading Acknowledgments for a Destination</span></a>.</p>
578
- <div class="figure" id="ha-figure-sync-ack">
579
- <img alt="Synchronous acknowledgment -- no acknowledgment to publisher until the downstream instance acknowledges" src="../_images/HA_sync_ack.png" />
580
- </div>
581
- <p><em>Sequence for a Connection Using Sync Acknowledgment</em></p>
582
- <p>For destinations configured with <em>async</em> replication acknowledgment,
583
- an AMPS instance does not require that the destination acknowledge that the
584
- message is persisted before acknowledging the message to the publisher.
585
- That is, for <em>async</em> acknowledgment, the AMPS instance replicating
586
- the message sends the <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgment message back
587
- to the publisher as soon as the message is stored in the local transaction
588
- log and SOW stores.</p>
589
- <p>The acknowledgment type (<code class="docutils literal"><span class="pre">SyncType</span></code>) has no effect on how an instance of
590
- AMPS replicates the message to other instances of AMPS. The acknowledgment
591
- type <em>only</em> affects whether an instance of AMPS must receive an acknowledgment
592
- from that <code class="docutils literal"><span class="pre">Destination</span></code> before it will acknowledge a message as having
593
- been persisted.</p>
594
- <p>The figure below shows the cycle of a message being published with a
595
- <code class="docutils literal"><span class="pre">SyncType</span></code> configuration set to <em>async</em> acknowledgment.</p>
596
- <div class="figure" id="ha-figure-async-ack">
597
- <img alt="Aynchronous acknowledgment -- acknowledgment to publisher immediately, independent of downstream replication" src="../_images/HA_async_ack.png" />
598
- </div>
599
- <p><em>Sequence for a Connection Using Async Acknowledgment</em></p>
600
- <p>By default, replication destinations do not affect when a message is delivered
601
- to a subscription. Optionally, a subscriber can request the <code class="docutils literal"><span class="pre">fully_durable</span></code>
602
- option on a bookmark subscription (that is, a replay from the transaction log).
603
- When the <code class="docutils literal"><span class="pre">fully_durable</span></code> option is specified, AMPS does not deliver a message
604
- to that subscriber until all replication destinations configured for <code class="docutils literal"><span class="pre">sync</span></code>
605
- acknowledgment have acknowledged the message.</p>
606
- <div class="admonition caution">
607
- <p class="first admonition-title">Caution</p>
608
- <p class="last">Every instance of AMPS that accepts publish commands, SOW delete commands
609
- or allows consumption of messages from queues, should specify at least
610
- one destination that uses <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment. If a publish or
611
- queue consumer may fail over between two (or more) instances of AMPS, those
612
- instances should specify <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment between them to
613
- prevent a situation where a message could be lost if an instance fails
614
- immediately after acknowledging a message to a publisher.</p>
615
- </div>
616
- <p>A destination configured for <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment can be
617
- downgraded to <code class="docutils literal"><span class="pre">async</span></code> acknowledgment while AMPS is running.
618
- This can be useful in cases where a server is offline for an
619
- extended period of time due to hardware failure or persistent
620
- network issues.</p>
621
- </div>
622
- <div class="section" id="downgrading-acknowledgments-for-a-destination">
623
- <span id="ug-replication-downgrade"></span><h3>Downgrading Acknowledgments for a Destination<a class="headerlink" href="#downgrading-acknowledgments-for-a-destination" title="Permalink to this headline">¶</a></h3>
624
- <p>The AMPS administrative console provides the ability to downgrade a
625
- replication link from <em>synchronous</em> to <em>asynchronous</em> acknowledgment.
626
- This feature is useful to relieve memory or storage pressure on publishers
627
- should a downstream AMPS instance prove unstable, unresponsive, or be
628
- experiencing excessive latency to the point that it should be
629
- considered to be offline.</p>
630
- <p>Downgrading a replication link to <em>asynchronous</em> means that any
631
- <code class="docutils literal"><span class="pre">persisted</span></code> acknowledgment message that a publisher may be waiting on
632
- will no longer wait for the downstream instance to confirm that it has
633
- committed the message to its downstream Transaction Log or SOW store.
634
- AMPS immediately considers the downstream instance to have acknowledged
635
- the message for existing messages, which means that if AMPS was waiting
636
- for acknowledgment from that instance to deliver a <code class="docutils literal"><span class="pre">persisted</span></code>
637
- acknowledgment, AMPS immediately sends the <code class="docutils literal"><span class="pre">persisted</span></code>
638
- acknowledgment when the instance is downgraded.</p>
639
- <p>The result of a link being downgraded is:</p>
640
- <ul class="simple">
641
- <li>The number of messages that the publisher must retain is reduced, <em>but</em></li>
642
- <li>The downgraded link is unsafe for the publisher to fail over to</li>
643
- <li>The downgraded link is unsafe for a bookmark subscriber to fail over to</li>
644
- </ul>
645
- <p>Automatic downgrade is most suitable for a situation where an instance
646
- should be considered offline or unavailable.</p>
647
- <div class="admonition caution">
648
- <p class="first admonition-title">Caution</p>
649
- <p>Downgrading a destination means that this instance will not
650
- wait for that destination to acknowledge a message
651
- before acknowledging that message to publishers or
652
- upstream instances. It does not affect any other
653
- behavior of the instance.</p>
654
- <p>A publisher or queue consumer must not fail over
655
- from this instance to a destination that has been
656
- downgraded to <code class="docutils literal"><span class="pre">async</span></code> acknowledgment. This can
657
- cause message loss, since the upstream instance may
658
- have acknowledged a message that the downstream
659
- instance has not yet processed.</p>
660
- <p class="last">A bookmark subscriber must not fail over from
661
- this instance to a destination that has been
662
- downgraded to <code class="docutils literal"><span class="pre">async</span></code> acknowledgment. This can
663
- cause replay gaps, since that destination is
664
- no longer considered when determining whether
665
- a message is persisted.</p>
666
- </div>
667
- <p>AMPS can be configured to automatically downgrade a replication link to
668
- <code class="docutils literal"><span class="pre">asynchronous</span></code> if the remote side of the link cannot keep up with
669
- persisting messages or becomes unresponsive. This option prevents
670
- unreliable links from holding up publishers, but increases the chances
671
- of a single instance failure resulting in message loss, as described
672
- above. AMPS can also be configured to automatically upgrade a
673
- replication link that has previously been downgraded. If an instance
674
- is configured to downgrade acknowledgment, it should also
675
- be configured to upgrade acknowledgment.</p>
676
- <p>Automatic downgrade is implemented as an AMPS action. To configure
677
- automatic downgrade, add the appropriate action to the configuration
678
- file as shown below:</p>
679
- <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;AMPSConfig&gt;</span>
680
- ...
681
- <span class="nt">&lt;Actions&gt;</span>
682
- <span class="nt">&lt;Action&gt;</span>
683
- <span class="nt">&lt;On&gt;</span>
684
- <span class="nt">&lt;Module&gt;</span>amps-action-on-schedule<span class="nt">&lt;/Module&gt;</span>
685
- <span class="nt">&lt;Options&gt;</span>
686
-
687
- <span class="c">&lt;!--This option determines how often AMPS checks whether destinations have fallen</span>
688
- <span class="c"> behind. In this example, AMPS checks destinations every 15 seconds. In most</span>
689
- <span class="c"> cases, 60East recommends setting this to half of the Interval setting. --&gt;</span>
690
- <span class="nt">&lt;Every&gt;</span>15s<span class="nt">&lt;/Every&gt;</span>
691
- <span class="nt">&lt;/Options&gt;</span>
692
- <span class="nt">&lt;/On&gt;</span>
693
- <span class="nt">&lt;Do&gt;</span>
694
- <span class="nt">&lt;Module&gt;</span>amps-action-do-downgrade-replication<span class="nt">&lt;/Module&gt;</span>
695
- <span class="nt">&lt;Options&gt;</span>
696
-
697
- <span class="c">&lt;!--The maximum amount of time for a destination to fall behind. If AMPS has been</span>
698
- <span class="c"> waiting for an acknowledgment from the destination for longer than the</span>
699
- <span class="c"> Interval, AMPS downgrades the destination. In this example, AMPS downgrades any</span>
700
- <span class="c"> destination for which an acknowledgment has taken longer than 300 seconds. --&gt;</span>
701
- <span class="nt">&lt;Age&gt;</span>300s<span class="nt">&lt;/Age&gt;</span>
702
- <span class="nt">&lt;/Options&gt;</span>
703
- <span class="nt">&lt;/Do&gt;</span>
704
- <span class="nt">&lt;Do&gt;</span>
705
- <span class="nt">&lt;Module&gt;</span>amps-action-do-upgrade-replication<span class="nt">&lt;/Module&gt;</span>
706
- <span class="nt">&lt;Options&gt;</span>
707
-
708
- <span class="c">&lt;!-- The threshold for upgrading the replication link back to sync</span>
709
- <span class="c"> acknowledgment. If the destination is behind by less than this</span>
710
- <span class="c"> amount, and was previously downgraded to async acknowledgment,</span>
711
- <span class="c"> AMPS will upgrade to sync acknowledgment.</span>
712
-
713
- <span class="c"> --&gt;</span>
714
-
715
- <span class="nt">&lt;Age&gt;</span>10s<span class="nt">&lt;/Age&gt;</span>
716
- <span class="nt">&lt;/Options&gt;</span>
717
- <span class="nt">&lt;/Do&gt;</span>
718
- <span class="nt">&lt;/Action&gt;</span>
719
- <span class="nt">&lt;/Actions&gt;</span>
720
- ...
721
- <span class="nt">&lt;/AMPSConfig&gt;</span>
722
- </pre></div>
723
- </div>
724
- <p>In this configuration file, AMPS checks every 15 seconds to see if a
725
- destination has fallen behind by 300 seconds. If a destination has
726
- fallen behind by more than 300 seconds, that destination should
727
- no longer be considered reliable. AMPS downgrades the destination
728
- to <code class="docutils literal"><span class="pre">async</span></code> acknowledgment. That destination will no longer
729
- be considered when acknowledging messages to publishers,
730
- and publishers should not consider that destination to be
731
- an option for failover until the destination catches up.</p>
732
- <div class="admonition tip">
733
- <p class="first admonition-title">Tip</p>
734
- <p class="last">All publishers using a publish store should be able to hold
735
- a number of messages equal to the number of messages published,
736
- at peak message volume, for a time period equal to the
737
- periodicity of the downgrade check plus the threshold for downgrade.
738
- With the configuration above, a publisher that publishes at a peak
739
- rate of 10,000 messages per second should, at a minimum, be able
740
- to allocate a publish store that holds 750,000 messages.</p>
741
- </div>
742
- <p>In some cases, it is important that a destination maintain a minimum
743
- number of destinations that use <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment. For those
744
- cases, an instance-level <code class="docutils literal"><span class="pre">Tuning</span></code> parameter is available that
745
- will prevent the action from downgrading a connection if doing so
746
- would reduce the number of destinations that use <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment
747
- below the configured limit. This parameter does not guarantee whether
748
- a specific destination will continue using <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment. This
749
- parameter only limits whether AMPS will downgrade a destination that
750
- meets downgrade criteria. AMPS will not upgrade a destination that
751
- has previously been downgraded if a connection is lost, even if
752
- this means that the number of currently connected destinations that
753
- use <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment is less than the configured minimum.
754
- See the <em>AMPS Configuration Guide</em> section on instance-level
755
- parameters for details.</p>
756
- </div>
757
- </div>
758
- <div class="section" id="replication-configuration-validation">
759
- <h2>Replication Configuration Validation<a class="headerlink" href="#replication-configuration-validation" title="Permalink to this headline">¶</a></h2>
760
- <p>Replication configuration validation helps to ensure that
761
- any configuration that could result in message loss or inconsistent
762
- message contents between two instances of AMPS is explicitly
763
- designed into the replication topology and not the result
764
- of accidental misconfiguration.</p>
765
- <p>Replication can involve coordinating configuration among a large number
766
- of AMPS instances. It can sometimes be difficult to ensure that all
767
- of the instances are configured correctly, and to ensure that a
768
- configuration change for one instance is also made at the replication
769
- destinations. For example, if a high-availability pair replicates the
770
- topics ORDERS, INVENTORY, and CUSTOMERS to a remote disaster recovery
771
- site, but the disaster recovery site only replicates ORDERS and
772
- INVENTORY back to the high-availability pair, disaster recovery may not
773
- occur as planned. Likewise, if only one member of the HA pair replicates
774
- ORDERS to the other member of the pair, the two instances will contain
775
- different messages, which could cause problems for the system.</p>
776
- <p>Starting in the 5.0 release, AMPS automatic replication configuration
777
- validation makes it easier to keep configuration items consistent across
778
- a replication fabric.</p>
779
- <p>Replication configuration validation happens when a replication
780
- connection is made between two instances. The validation compares
781
- the configuration of those two instances. By default, any difference
782
- in configuration that could result in message loss, different
783
- behavior between the source instance and the destination instance,
784
- or different replication guarantees between the source instance
785
- and the destination instance is reported as an error.</p>
786
- <div class="admonition important">
787
- <p class="first admonition-title">Important</p>
788
- <p class="last">When replication validation reports an error, the reason for the
789
- error is logged to the event log on the instance that detects
790
- the problem, and the connection is closed.</p>
791
- </div>
792
- <p>Automatic configuration validation is enabled for all elements of the
793
- replication configuration by default. You can turn off validation for
794
- specific elements of the configuration, as described below.</p>
795
- <p>AMPS replication uses a leaderless, &#8220;all nodes hot&#8221; model. This means
796
- that no single AMPS instance has a view of the entire replication
797
- fabric, and a single AMPS instance will always assume that there are
798
- instances in the replication fabric that it is not aware of. The
799
- replication validation rules are designed with this assumption. The
800
- advantage of this assumption is that if instances are added to the
801
- replication fabric, it is typically only necessary to change
802
- configuration on the instances that they directly communicate with
803
- for replication to function as expected. The tradeoff, however, is
804
- that it is sometimes necessary to configure an instance as though
805
- it were part of a larger fabric (or exclude a validation rule)
806
- even in a case where the instance is part of a much simpler
807
- replication design.</p>
808
- <p>Each <code class="docutils literal"><span class="pre">Topic</span></code> in a replication <code class="docutils literal"><span class="pre">Destination</span></code> can configure a unique
809
- set of validation checks. By default, all of the checks apply to all
810
- topics in the <code class="docutils literal"><span class="pre">Destination</span></code>.</p>
811
- <p>When troubleshooting a configuration validation error, it is important
812
- to look at the AMPS logs on <em>both</em> sides of the connection. Typically, the
813
- AMPS instance that detects the error will log complete information on the
814
- part of validation that failed and the changes required for the connection
815
- to succeed, while the other side of the connection will simply note that the
816
- connection failed validation. This means that if a validation error is reported
817
- on one instance, but details are not present, the other side of the connection
818
- detected the error and will have logged relevant details.</p>
819
- <div class="admonition warning">
820
- <p class="first admonition-title">Warning</p>
821
- <p class="last">Excluding a validation check directs AMPS to make a
822
- replication connection that could result in inconsistent
823
- state or data loss. Use caution when excluding
824
- validation checks. See the table below for
825
- details on each validation check.</p>
826
- </div>
827
- <p>The table below lists aspects of replication that AMPS validates. By default, replication
828
- validation treats the downstream instance as though it is intended to be a full
829
- highly-available failover partner for any topic that is replicated. For situations
830
- where that is not the case, many validation rules can be excluded. For example, if
831
- the downstream instance is a view server that does not accept publishes and,
832
- therefore, is not configured to replicate a particular topic back to this instance,
833
- the <code class="docutils literal"><span class="pre">replicate</span></code> validation check might need to be excluded.</p>
834
- <p>AMPS performs the following validation checks:</p>
835
- <table border="1" class="docutils" id="id1">
836
- <caption><span class="caption-text"><em>Replication validation checks</em></span><a class="headerlink" href="#id1" title="Permalink to this table">¶</a></caption>
837
- <colgroup>
838
- <col width="50%" />
839
- <col width="50%" />
840
- </colgroup>
841
- <thead valign="bottom">
842
- <tr class="row-odd"><th class="head">Check</th>
843
- <th class="head">Validates</th>
844
- </tr>
845
- </thead>
846
- <tbody valign="top">
847
- <tr class="row-even"><td><code class="docutils literal"><span class="pre">txlog</span></code></td>
848
- <td><p class="first">The topic is contained in the
849
- transaction log of the remote
850
- instance.</p>
851
- <p class="last">An error on this validation check
852
- indicates that this instance is
853
- replicating a topic that is not in
854
- the transaction log on the
855
- downstream instance. This means
856
- that the downstream instance is not
857
- persisting the messages in a way
858
- that can be used for replication,
859
- replay, or used as the basis
860
- for a queue.</p>
861
- </td>
862
- </tr>
863
- <tr class="row-odd"><td><code class="docutils literal"><span class="pre">replicate</span></code></td>
864
- <td><p class="first">The topic is replicated from the
865
- remote instance back to this
866
- instance.</p>
867
- <p class="last">An error on this validation check
868
- indicates that this instance is
869
- replicating a topic to the
870
- downstream instance that is not
871
- being replicated back to this
872
- instance. This means that any
873
- publishes or updates to the topic
874
- on the downstream instance are not
875
- replicated back to this instance.</p>
876
- </td>
877
- </tr>
878
- <tr class="row-even"><td><code class="docutils literal"><span class="pre">sow</span></code></td>
879
- <td><p class="first">If the topic is a SOW topic in this
880
- instance, it must also be a SOW
881
- topic in the remote instance.</p>
882
- <p class="last">An error on this validation check
883
- indicates that this instance is
884
- replicating a topic to the
885
- downstream instance that is a
886
- <code class="docutils literal"><span class="pre">SOW/Topic</span></code> on this instance, but
887
- is not a <code class="docutils literal"><span class="pre">SOW/Topic</span></code> on the
888
- downstream instance. This means that
889
- the topic has different behavior
890
- on the downstream instance, and
891
- does not maintain the current value
892
- of records in the topic in the
893
- SOW.</p>
894
- </td>
895
- </tr>
896
- <tr class="row-odd"><td><code class="docutils literal"><span class="pre">cascade</span></code></td>
897
- <td><p class="first">The remote instance must enforce the
898
- same set of validation checks for
899
- this topic as this instance does.</p>
900
- <p>When relaxing validation rules for
901
- a topic that the downstream instance
902
- itself replicates, adding an
903
- exclusion for <code class="docutils literal"><span class="pre">cascade</span></code> is often
904
- necessary as well.</p>
905
- <p>An error on this validation check
906
- indicates that this instance
907
- enforces a validation check for a
908
- topic that the downstream instance
909
- does not enforce when that instance
910
- replicates the topic.</p>
911
- <p>To understand the impact of this
912
- validation check, consider the
913
- validation checks that the
914
- downstream instance enforces. If
915
- the downstream instance enforces
916
- the appropriate validation checks,
917
- this instance can exclude
918
- the <code class="docutils literal"><span class="pre">cascade</span></code> check.</p>
919
- <div class="last admonition tip">
920
- <p class="first admonition-title">Tip</p>
921
- <p class="last">It is sometimes necessary to
922
- exclude this check as part of a
923
- rolling upgrade, and then to leave
924
- this exclusion in place until all
925
- instances can be taken offline at
926
- the same time. If the <code class="docutils literal"><span class="pre">cascade</span></code>
927
- check is the only check being
928
- excluded on any instance, the
929
- topology can be considered to meet
930
- validation rules (and the
931
- <code class="docutils literal"><span class="pre">cascade</span></code> exclusion can be safely
932
- removed during a maintenance window
933
- when all of the instances can be
934
- updated simultaneously).</p>
935
- </div>
936
- </td>
937
- </tr>
938
- <tr class="row-even"><td><code class="docutils literal"><span class="pre">queue</span></code></td>
939
- <td><p class="first">If the topic is a queue in this
940
- instance, it must also be a queue in
941
- the remote instance.</p>
942
- <p>A distributed queue will not
943
- function correctly if one of the
944
- instances it is replicated to
945
- does not define the topic as a
946
- queue.</p>
947
- <p class="last">This option cannot be excluded.</p>
948
- </td>
949
- </tr>
950
- <tr class="row-odd"><td><code class="docutils literal"><span class="pre">keys</span></code></td>
951
- <td><p class="first">If the topic is a SOW topic in this
952
- instance, it must also be a SOW
953
- topic in the remote instance and the
954
- SOW in the remote instance must use
955
- the same <code class="docutils literal"><span class="pre">Key</span></code> definitions.</p>
956
- <p class="last">An error on this validation check
957
- indicates that this instance is
958
- replicating a topic to the
959
- downstream instance that is a
960
- <code class="docutils literal"><span class="pre">SOW/Topic</span></code> on both instances, but
961
- that the definition of message
962
- identity (the <code class="docutils literal"><span class="pre">Key</span></code> configuration
963
- for the topic) does not match on
964
- the two instances. This means
965
- that the contents of this topic
966
- may be different on these two
967
- instances for the same set
968
- of messages published.</p>
969
- </td>
970
- </tr>
971
- <tr class="row-even"><td><code class="docutils literal"><span class="pre">replicate_filter</span></code></td>
972
- <td><p class="first">If this topic uses a replication
973
- filter, the remote instance must use
974
- the same replication filter for
975
- replication back to this instance.</p>
976
- <p class="last">An error on this validation check
977
- indicates that this instance uses a
978
- replication filter for a topic that
979
- the downstream instance does not
980
- use when it replicates the topic.
981
- This means that, given the same
982
- set of publishes, the downstream
983
- instance may replicate a different
984
- set of messages than are replicated
985
- to that instance. This would
986
- produce inconsistent data across
987
- the set of replicated instances.</p>
988
- </td>
989
- </tr>
990
- <tr class="row-odd"><td><code class="docutils literal"><span class="pre">queue_passthrough</span></code></td>
991
- <td><p class="first">If the topic is a queue in this
992
- instance, the remote instance must
993
- support passthrough from this group.</p>
994
- <p class="last">An error on this validation check
995
- indicates that this instance does
996
- not pass through messages for one
997
- or more groups that the queue is
998
- replicated from. This could lead to
999
- a situation where a queue message
1000
- is undeliverable if a network
1001
- connection is unavailable or if
1002
- additional instances are added to
1003
- the set of instances that contain
1004
- the queue.</p>
1005
- </td>
1006
- </tr>
1007
- <tr class="row-even"><td><code class="docutils literal"><span class="pre">queue_underlying</span></code></td>
1008
- <td><p class="first">If the topic is a queue in this
1009
- instance, it must use the same
1010
- underlying topic definition and
1011
- filters in the remote instance.</p>
1012
- <p class="last">This option cannot be excluded.</p>
1013
- </td>
1014
- </tr>
1015
- </tbody>
1016
- </table>
1017
- <p><em>Replication Configuration Validation</em></p>
1018
- <p>Notice that, by default, <em>all</em> of these checks are applied.</p>
1019
- <p>The sample below shows how to exclude validation checks for a replication
1020
- destination. In this sample, the <code class="docutils literal"><span class="pre">Topic</span></code> does not require the remote destination
1021
- to replicate back to this instance, and does not require that the remote
1022
- destination enforce the same configuration checks for any downstream
1023
- replication of this topic.</p>
1024
- <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;Destination&gt;</span>
1025
- ...
1026
- <span class="nt">&lt;Topic&gt;</span>
1027
- <span class="nt">&lt;MessageType&gt;</span>json<span class="nt">&lt;/MessageType&gt;</span>
1028
- <span class="nt">&lt;Name&gt;</span>MyStuff-VIEW<span class="nt">&lt;/Name&gt;</span>
1029
- <span class="nt">&lt;ExcludeValidation&gt;</span>replicate,cascade<span class="nt">&lt;/ExcludeValidation&gt;</span>
1030
- <span class="nt">&lt;/Topic&gt;</span>
1031
- ...
1032
- <span class="nt">&lt;/Destination&gt;</span>
1033
- </pre></div>
1034
- </div>
1035
- </div>
1036
- <div class="section" id="replication-resynchronization">
1037
- <h2>Replication Resynchronization<a class="headerlink" href="#replication-resynchronization" title="Permalink to this headline">¶</a></h2>
1038
- <p>When a replication connection is established between AMPS
1039
- instances, the upstream instance publishes any messages that it
1040
- contains in its transaction log that the downstream instance
1041
- may not have previously received. This process is called
1042
- &#8220;replication resync&#8221;. During resync, the upstream instance
1043
- replays from the transaction log, replicating messages that
1044
- match the <code class="docutils literal"><span class="pre">Topic</span></code> (and, optionally, <code class="docutils literal"><span class="pre">Filter</span></code>) specification(s)
1045
- for the downstream <code class="docutils literal"><span class="pre">Destination</span></code>.</p>
1046
- <p>When a replication connection is established between AMPS servers
1047
- that are both version 5.3.3.0 or higher, the servers exchange
1048
- information about the messages present in the transaction log to
1049
- determine the earliest message in the transaction log on the
1050
- upstream instance that is not present on the downstream instance.
1051
- Replication resynchronization will begin at that point. This
1052
- approach to finding the resynchronization point applies
1053
- whether or not these two instances have had a replication
1054
- connection before.</p>
1055
- <p>For replication between older versions of AMPS, replication
1056
- resynchronization begins at the last point in the upstream
1057
- instance&#8217;s transaction log that the downstream instance has
1058
- received. For those versions of AMPS, messages from other
1059
- instances are not considered when determining the
1060
- resynchronization point.</p>
1061
- </div>
1062
- <div class="section" id="replication-compression">
1063
- <span id="index-3"></span><h2>Replication Compression<a class="headerlink" href="#replication-compression" title="Permalink to this headline">¶</a></h2>
1064
- <p>AMPS provides the ability to compress the replication connection. In
1065
- typical use, using replication compression can greatly reduce the
1066
- bandwidth required between AMPS instances.</p>
1067
- <p>The precise amount of compression that AMPS can achieve depends on the
1068
- content of the replicated messages. Compression is configured at the
1069
- replication source, and does not need to be enabled in the transport
1070
- configuration at the instance receiving the replicated messages.</p>
1071
- <p>For AMPS instances that are receiving replicated messages, no additional
1072
- configuration is necessary. AMPS automatically recognizes when an
1073
- incoming replication connection uses compression.</p>
1074
- <p>See the <em>AMPS Configuration Guide</em> for enabling compression and choosing
1075
- a compression algorithm.</p>
1076
- </div>
1077
- <div class="section" id="destination-server-failover">
1078
- <h2>Destination Server Failover<a class="headerlink" href="#destination-server-failover" title="Permalink to this headline">¶</a></h2>
1079
- <p>Your replication plan may include replication to a server that is part
1080
- of a highly-available group.</p>
1081
- <p>There are two common approaches to destination server failover:</p>
1082
- <ol class="arabic simple">
1083
- <li><strong>Wide IP</strong> - AMPS replication works transparently with wide IP and
1084
- many installations use wide IP for destination server failover. The
1085
- advantage of this approach is that it requires no additional
1086
- configuration in AMPS and redundant servers can be added or removed
1087
- from the wide IP group without reconfiguring the instances that
1088
- replicate to the group. A disadvantage to this approach is that failover
1089
- can require several seconds and messages are not replicated during the
1090
- time that it takes for failover to occur.</li>
1091
- <li><strong>AMPS Failover</strong> - AMPS allows you to specify multiple downstream
1092
- servers in the <code class="docutils literal"><span class="pre">InetAddr</span></code> element of a destination. In this case, AMPS
1093
- treats the defined list of servers as a list of equivalent servers, listed
1094
- in order of priority.</li>
1095
- </ol>
1096
- <p>When multiple addresses are specified for a destination, each time AMPS
1097
- needs to make a connection to a destination and there is no incoming
1098
- connection from a server in that destination, AMPS starts at the
1099
- beginning of the list and attempts to connect to each address in the
1100
- list. If AMPS is unable to connect to any address in the list, AMPS
1101
- waits for a timeout period, then begins again with the first server on
1102
- the list. Each time AMPS reaches the end of the list without
1103
- establishing a connection, AMPS increases the timeout period. If an incoming
1104
- connection from one of the servers on the list exists, AMPS will use that
1105
- connection for outgoing replication. If multiple incoming connections
1106
- from servers in the list exist, AMPS will choose one of the incoming
1107
- connections to use for outgoing traffic.</p>
1108
- <p>This capability allows you to easily set up replication to a
1109
- highly-available group. If the server you are replicating to fails over,
1110
- AMPS uses the prioritized list of servers to re-establish a connection.</p>
1111
- </div>
1112
- <div class="section" id="two-way-replication">
1113
- <h2>Two-Way Replication<a class="headerlink" href="#two-way-replication" title="Permalink to this headline">¶</a></h2>
1114
- <p>Two-way replication, sometimes called <em>Back Replication</em>, is a term used
1115
- to describe a replication scenario where there are two instances of AMPS
1116
- &#8211; termed <code class="docutils literal"><span class="pre">AMPS-A</span></code> and <code class="docutils literal"><span class="pre">AMPS-B</span></code> for this example.</p>
1117
- <p>In a two-way replication configuration, messages that are published to <code class="docutils literal"><span class="pre">AMPS-A</span></code>
1118
- are replicated to <code class="docutils literal"><span class="pre">AMPS-B</span></code>. Likewise, messages which are published to
1119
- <code class="docutils literal"><span class="pre">AMPS-B</span></code> are replicated to <code class="docutils literal"><span class="pre">AMPS-A</span></code>. This replication scheme is used
1120
- when both instances of AMPS need to be in sync with each other to handle
1121
- a failover scenario with no loss of messages between them. This way, if
1122
- <code class="docutils literal"><span class="pre">AMPS-A</span></code> should fail at any point, applications can immediately fail over
1123
- to the <code class="docutils literal"><span class="pre">AMPS-B</span></code> instance, allowing message flow to resume with as little
1124
- downtime as possible.</p>
1125
- <p>To enable two-way replication, each instance of AMPS defines
1126
- a replication <code class="docutils literal"><span class="pre">Transport</span></code> to receive incoming replication
1127
- messages. Each instance also defines a replication <code class="docutils literal"><span class="pre">Destination</span></code>
1128
- to deliver messages to the other instance.</p>
1129
- <p>Notice that servers are intended to function as failover partners.
1130
- Since a publisher may fail over between these two instances, the
1131
- <code class="docutils literal"><span class="pre">Destination</span></code> on each instance that replicates to the other instance
1132
- is configured to use <code class="docutils literal"><span class="pre">sync</span></code> message acknowledgment. This
1133
- ensures that a publisher does not consider a message to be persisted
1134
- until all of the failover partners have received and persisted the
1135
- message.</p>
1136
- <div class="admonition warning">
1137
- <p class="first admonition-title">Warning</p>
1138
- <p class="last">When configuring a set of instances for failover, it is important that
1139
- the instances use <code class="docutils literal"><span class="pre">sync</span></code> message acknowledgment among the set of
1140
- instances that a given client will consider for failover. It should never be
1141
- possible for a publisher to fail over from one instance to another instance
1142
- if the replication link between those instances is configured for <code class="docutils literal"><span class="pre">async</span></code>
1143
- acknowledgments.</p>
1144
- </div>
1145
- <p id="index-4">Starting with the 5.0 release, when AMPS detects back replication
1146
- between a pair of instances, AMPS will prefer using a single network
1147
- connection between the servers, replicating messages in both directions
1148
- (that is, to both destinations) over a single connection. This can
1149
- be particularly useful for situations where you need to have messages
1150
- replicated, but only one server can initiate a connection. For example,
1151
- when one of the servers is in a DMZ, and cannot make a connection to a
1152
- server within the company. AMPS also allows you to specify a replication
1153
- destination with no InetAddr provided. In this case, the instance will
1154
- replicate once the destination establishes a connection, but will not initiate
1155
- a connection. When both instances specify an InetAddr, AMPS may temporarily
1156
- create two connections between the instances while replication is being established.
1157
- In this case, after detecting that there are two connections active, AMPS will
1158
- close one of the network connections and allow both AMPS instances to use
1159
- the remaining network connection to publish messages to the other instance.
1160
- Notice that using a single network connection is simply an optimization to
1161
- more efficiently use the available sockets. This does not change the way
1162
- messages are replicated or the replication protocol, nor does it change the
1163
- requirement that all messages in a journal are replicated to all destinations
1164
- before a journal can be removed.</p>
1165
- </div>
1166
- <div class="section" id="passthrough-replication">
1167
- <span id="ug-ha-passthrough"></span><h2>PassThrough Replication<a class="headerlink" href="#passthrough-replication" title="Permalink to this headline">¶</a></h2>
1168
- <p>PassThrough Replication is a term used to describe the ability of an
1169
- AMPS instance to pass along replicated messages to another AMPS
1170
- instance. This allows you to easily keep multiple failover or DR
1171
- destinations in sync from a single AMPS instance. Unless passthrough
1172
- replication is configured, an AMPS instance only replicates messages
1173
- directly published to that instance from an application. By default,
1174
- an instance <em>does not</em> re-replicate messages received over replication.</p>
1175
- <p>PassThrough replication uses the name of the originating AMPS group to
1176
- indicate that messages that arrive at this instance of AMPS directly
1177
- from that group are to be replicated to the specified destination.
1178
- PassThrough replication supports regular expressions to specify groups,
1179
- and allows multiple server groups per destination. Notice that if the
1180
- destination instance does not specify a <code class="docutils literal"><span class="pre">Group</span></code> in its instance config,
1181
- the group name is the <code class="docutils literal"><span class="pre">Name</span></code> of the instance.</p>
1182
- <p>To ensure that an instance replicates a full copy of its transaction
1183
- log downstream (which is typically the intended result), include
1184
- a <code class="docutils literal"><span class="pre">PassThrough</span></code> configuration item that matches any group name.</p>
1185
- <p>With care, some topologies can use a <code class="docutils literal"><span class="pre">PassThrough</span></code> configuration
1186
- that only replicates messages directly published to the instance
1187
- and a subset of messages received over replication.
1188
- This can result in significant bandwidth reduction in some
1189
- topologies, but must be configured with care to ensure that
1190
- messages do not fail to reach all of the instances, since
1191
- in this case AMPS is configured to replicate only a <em>part</em> of
1192
- the transaction log of the local instance.</p>
1193
- <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;Replication&gt;</span>
1194
- <span class="nt">&lt;Destination&gt;</span>
1195
- <span class="nt">&lt;Name&gt;</span>AMPS2-HKG<span class="nt">&lt;/Name&gt;</span>
1196
- <span class="c">&lt;!-- No group specified: this destination is for</span>
1197
- <span class="c"> a server at the same site, and is responsible for</span>
1198
- <span class="c"> populating the specific replication partner. --&gt;</span>
1199
- <span class="nt">&lt;Transport&gt;</span>
1200
- <span class="nt">&lt;Name&gt;</span>amps-replication<span class="nt">&lt;/Name&gt;</span>
1201
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
1202
- <span class="nt">&lt;InetAddr&gt;</span>secondaryhost:10010<span class="nt">&lt;/InetAddr&gt;</span>
1203
- <span class="nt">&lt;/Transport&gt;</span>
1204
- <span class="nt">&lt;Topic&gt;</span>
1205
- <span class="nt">&lt;Name&gt;</span>/rep_topic<span class="nt">&lt;/Name&gt;</span>
1206
- <span class="nt">&lt;MessageType&gt;</span>fix<span class="nt">&lt;/MessageType&gt;</span>
1207
- <span class="nt">&lt;/Topic&gt;</span>
1208
- <span class="nt">&lt;Topic&gt;</span>
1209
- <span class="nt">&lt;Name&gt;</span>/rep_topic2<span class="nt">&lt;/Name&gt;</span>
1210
- <span class="nt">&lt;MessageType&gt;</span>fix<span class="nt">&lt;/MessageType&gt;</span>
1211
- <span class="nt">&lt;/Topic&gt;</span>
1212
- <span class="nt">&lt;SyncType&gt;</span>sync<span class="nt">&lt;/SyncType&gt;</span>
1213
-
1214
- <span class="c">&lt;!-- Specify which messages received via replication will be replicated</span>
1215
- <span class="c"> to this destination (provided that the Topic and MessageType also match).</span>
1216
-
1217
- <span class="c"> This destination will receive messages that arrive via replication from</span>
1218
- <span class="c"> AMPS instances with a group name that does not contain HKG. Replicated</span>
1219
- <span class="c"> messages from an instance that has a group name that matches HKG will not be</span>
1220
- <span class="c"> sent to this destination.</span>
1221
-
1222
- <span class="c"> Regardless of the PassThrough configuration, all messages published directly</span>
1223
- <span class="c"> to this instance by an AMPS client will be replicated to this destination</span>
1224
- <span class="c"> if the Topic and MessageType match.</span>
1225
- <span class="c"> --&gt;</span>
1226
- <span class="nt">&lt;PassThrough&gt;</span>^((?!HKG).)*$<span class="nt">&lt;/PassThrough&gt;</span>
1227
- <span class="nt">&lt;/Destination&gt;</span>
1228
- <span class="nt">&lt;/Replication&gt;</span>
1229
- </pre></div>
1230
- </div>
1231
- <p>When a message is eligible for passthrough replication, topic and
1232
- content filters in the replication destination still apply. The
1233
- passthrough directive simply means that the message is eligible for
1234
- replication from this instance if it comes from an instance in the
1235
- specified group.</p>
1236
- <p>AMPS protects against loops in passthrough replication by tracking the
1237
- instance names or group names that a message has passed through. AMPS
1238
- does not allow a message to travel through the same instance and group name
1239
- more than once.</p>
1240
- <div class="admonition caution">
1241
- <p class="first admonition-title">Caution</p>
1242
- <p class="last">When using passthrough, AMPS will not send a message to an
1243
- instance that the message has already traveled through
1244
- to protect against replication loops.</p>
1245
- </div>
1246
- <p>If an instance replicates a queue (distributed queue) or a group local queue, it
1247
- <em>must also</em> provide passthrough for any incoming replication group that replicates that
1248
- topic (even if the incoming replication connection is from the same group that this
1249
- instance belongs to). The reason for this is simple: AMPS must ensure that messages
1250
- for a replicated queue, including acknowledgments and transfer messages, are able
1251
- to reach every instance that hosts the queue if possible, even if a network connection
1252
- fails or an instance goes offline. Therefore, this instance must pass through messages
1253
- received from other instances that affect the queue.</p>
1254
- </div>
1255
- <div class="section" id="guarantees-on-ordering">
1256
- <h2>Guarantees on Ordering<a class="headerlink" href="#guarantees-on-ordering" title="Permalink to this headline">¶</a></h2>
1257
- <p>For each publisher, on a single topic, AMPS is guaranteed to deliver
1258
- messages to subscribers in the same order that the messages were
1259
- published by the original publisher. This guarantee holds true
1260
- regardless of how many publishers or how many subscribers are connected
1261
- to AMPS at any one time.</p>
1262
- <p>For each instance, AMPS is guaranteed to deliver messages in the order
1263
- in which the messages were received by the instance, regardless of
1264
- whether a message is received directly from a publisher or indirectly
1265
- via replication. The message order for the instance is recorded in the
1266
- transaction log, and is guaranteed to remain consistent across server
1267
- restarts.</p>
1268
- <p>These guarantees mean that subscribers will not spend unnecessary CPU
1269
- cycles checking timestamps or other message content to verify which
1270
- message is the most recent, or reordering messages during playback. This
1271
- frees up subscriber resources to do more important work.</p>
1272
- <p>AMPS preserves an absolute order across topics for a single subscription
1273
- for all topics <em>except</em> views, queues, and conflated topics.
1274
- Applications often rely on this behavior to correlate the times at which
1275
- messages to different topics were processed by AMPS. See
1276
- <a class="reference internal" href="pub_sub.html#pub-sub-ordering"><span class="std std-ref">Message Ordering</span></a> for more information.</p>
1277
- </div>
1278
- <div class="section" id="replication-security">
1279
- <h2>Replication Security<a class="headerlink" href="#replication-security" title="Permalink to this headline">¶</a></h2>
1280
- <p>AMPS allows authorization and entitlement to be configured on
1281
- replication destinations. For the instance that receives connections,
1282
- you simply configure <code class="docutils literal"><span class="pre">Authentication</span></code> and <code class="docutils literal"><span class="pre">Entitlement</span></code> for the transport
1283
- definition for the destination, as shown below:</p>
1284
- <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;Transports&gt;</span>
1285
- <span class="nt">&lt;Transport&gt;</span>
1286
- <span class="nt">&lt;Name&gt;</span>amps-replication<span class="nt">&lt;/Name&gt;</span>
1287
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
1288
- <span class="nt">&lt;InetAddr&gt;</span>10005<span class="nt">&lt;/InetAddr&gt;</span>
1289
-
1290
- <span class="c">&lt;!-- Specifies the entitlement module to use to check permissions for incoming</span>
1291
- <span class="c"> connections. The module specified must be defined in the Modules section of the</span>
1292
- <span class="c"> config file, or be one of the default modules provided by AMPS. This snippet</span>
1293
- <span class="c"> uses the default module provided by AMPS for example purposes. --&gt;</span>
1294
- <span class="nt">&lt;Entitlement&gt;</span>
1295
- <span class="nt">&lt;Module&gt;</span>amps-default-entitlement-module<span class="nt">&lt;/Module&gt;</span>
1296
- <span class="nt">&lt;/Entitlement&gt;</span>
1297
-
1298
- <span class="c">&lt;!-- Specifies the authentication module to use to verify identity for incoming</span>
1299
- <span class="c"> connections. The module specified must be defined in the Modules section of the</span>
1300
- <span class="c"> config file, or be one of the default modules provided by AMPS. This snippet</span>
1301
- <span class="c"> uses the default module provided by AMPS for example purposes. --&gt;</span>
1302
- <span class="nt">&lt;Authentication&gt;</span>
1303
- <span class="nt">&lt;Module&gt;</span>amps-default-authentication-module<span class="nt">&lt;/Module&gt;</span>
1304
- <span class="nt">&lt;/Authentication&gt;</span>
1305
- <span class="nt">&lt;/Transport&gt;</span>
1306
- ...
1307
- <span class="nt">&lt;/Transports&gt;</span>
1308
- </pre></div>
1309
- </div>
1310
- <p>For incoming connections, configuration is the same as for other types
1311
- of transports.</p>
1312
- <p>For connections from AMPS to replication destinations, you can configure
1313
- an <code class="docutils literal"><span class="pre">Authenticator</span></code> module for the destination transport. <code class="docutils literal"><span class="pre">Authenticator</span></code>
1314
- modules provide credentials for outgoing connections from AMPS. For
1315
- authentication protocols that require a challenge and response, the
1316
- <code class="docutils literal"><span class="pre">Authenticator</span></code> module handles the responses for the instance requesting
1317
- access.</p>
1318
- <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;Replication&gt;</span>
1319
- <span class="nt">&lt;Destination&gt;</span>
1320
- <span class="nt">&lt;Topic&gt;</span>
1321
- <span class="nt">&lt;MessageType&gt;</span>fix<span class="nt">&lt;/MessageType&gt;</span>
1322
- <span class="nt">&lt;Name&gt;</span>topic<span class="nt">&lt;/Name&gt;</span>
1323
- <span class="nt">&lt;/Topic&gt;</span>
1324
- <span class="nt">&lt;Name&gt;</span>amps-1<span class="nt">&lt;/Name&gt;</span>
1325
- <span class="nt">&lt;SyncType&gt;</span>async<span class="nt">&lt;/SyncType&gt;</span>
1326
- <span class="nt">&lt;Transport&gt;</span>
1327
- <span class="nt">&lt;InetAddr&gt;</span>amps-1-server.example.com:10004<span class="nt">&lt;/InetAddr&gt;</span>
1328
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
1329
-
1330
- <span class="c">&lt;!-- Specifies the authenticator module to use to provide credentials for the</span>
1331
- <span class="c"> outgoing connection. The module specified must be defined in the Modules section</span>
1332
- <span class="c"> of the config file, or be one of the default modules provided by AMPS. This</span>
1333
- <span class="c"> snippet uses the default module provided by AMPS for example purposes. --&gt;</span>
1334
-
1335
- <span class="nt">&lt;Authenticator&gt;</span>
1336
- <span class="nt">&lt;Module&gt;</span>amps-default-authenticator-module<span class="nt">&lt;/Module&gt;</span>
1337
- <span class="nt">&lt;/Authenticator&gt;</span>
1338
- <span class="nt">&lt;/Transport&gt;</span>
1339
- <span class="nt">&lt;/Destination&gt;</span>
1340
- <span class="nt">&lt;/Replication&gt;</span>
1341
- </pre></div>
1342
- </div>
1343
- </div>
1344
- <div class="section" id="understanding-replication-message-routing">
1345
- <h2>Understanding Replication Message Routing<a class="headerlink" href="#understanding-replication-message-routing" title="Permalink to this headline">¶</a></h2>
1346
- <p>An instance of AMPS will replicate a message to a given <code class="docutils literal"><span class="pre">Destination</span></code> when
1347
- all of the following conditions are met (and there is an active replication
1348
- connection to the <code class="docutils literal"><span class="pre">Destination</span></code>):</p>
1349
- <ol class="arabic simple">
1350
- <li>The message must be recorded in the transaction log for this instance (that is,
1351
- the topic that the message is published to must be recorded in the transaction
1352
- log with the appropriate message type).</li>
1353
- <li>The AMPS instance must be configured to replicate messages with that
1354
- topic and message type to the <code class="docutils literal"><span class="pre">Destination</span></code>. (If a content filter
1355
- is included in the replication configuration, the message must
1356
- also match the content filter.)</li>
1357
- <li>The message must <em>either</em> have been directly published to this instance, or
1358
- if the message was received via replication, the <code class="docutils literal"><span class="pre">Destination</span></code> must specify
1359
- a <code class="docutils literal"><span class="pre">PassThrough</span></code> rule that matches the AMPS instance that this instance
1360
- received the message from.</li>
1361
- <li>The message must not have previously passed through the <code class="docutils literal"><span class="pre">Destination</span></code>
1362
- being replicated to; replication loops are not permitted.</li>
1363
- </ol>
1364
- <p>Each instance that receives a message evaluates the conditions above for each
1365
- <code class="docutils literal"><span class="pre">Destination</span></code>. The same process is followed when replaying messages from
1366
- the transaction log while resynchronizing the downstream replication
1367
- destination.</p>
1368
- <p>To verify that a given set of configurations replicates the appropriate
1369
- messages, start at each instance that will receive publishes and trace the
1370
- possible replication paths, applying these rules. If, at any time, applying
1371
- these rules creates a situation where a message does not reach an instance
1372
- of AMPS that is intended to receive the message, revise the rules (typically,
1373
- by adjusting the topics replicated to a <code class="docutils literal"><span class="pre">Destination</span></code> or the
1374
- <code class="docutils literal"><span class="pre">PassThrough</span></code> configuration for a <code class="docutils literal"><span class="pre">Destination</span></code>) until
1375
- messages reach the intended instances regardless of route.</p>
1376
- </div>
1377
- <div class="section" id="maximum-downstream-destinations">
1378
- <h2>Maximum Downstream Destinations<a class="headerlink" href="#maximum-downstream-destinations" title="Permalink to this headline">¶</a></h2>
1379
- <p>AMPS has support for up to 64 downstream destinations
1380
- that use synchronous acknowledgment. There is no
1381
- explicit limit on the number of downstream
1382
- destinations that use asynchronous (immediate)
1383
- acknowledgment.</p>
1384
- </div>
1385
- <div class="section" id="replicated-queues">
1386
- <span id="ug-replicated-queues"></span><span id="index-5"></span><h2>Replicated Queues<a class="headerlink" href="#replicated-queues" title="Permalink to this headline">¶</a></h2>
1387
- <p>AMPS provides a unique approach to replicating queues. This approach is
1388
- designed to offer high performance in the most common cases, while
1389
- continuing to provide delivery model guarantees, resilience and failover
1390
- in the event that one of the replicated instances goes offline.</p>
1391
- <p>When a queue is replicated, AMPS replicates the <code class="docutils literal"><span class="pre">publish</span></code> commands to
1392
- the underlying topic, the <code class="docutils literal"><span class="pre">sow_delete</span></code> commands that contain the
1393
- acknowledgment messages, and special queue management commands that are
1394
- internal to AMPS.</p>
1395
- <div class="section" id="queue-message-ownership">
1396
- <span id="ug-queue-message-ownership"></span><h3>Queue Message Ownership<a class="headerlink" href="#queue-message-ownership" title="Permalink to this headline">¶</a></h3>
1397
- <p>To guarantee that no message is processed more than once, AMPS tracks
1398
- ownership of the message within the network of replicated instances.</p>
1399
- <p>For a distributed queue (that is, a queue defined with the <code class="docutils literal"><span class="pre">Queue</span></code>
1400
- configuration element), the instance that first receives the publish
1401
- command from a client owns the message. Although all replicated instances
1402
- downstream record the publish command in their transaction
1403
- logs, they do not provide the message to queue subscribers unless that
1404
- instance owns the message.</p>
1405
- <p>For a group local queue (that is, a queue defined with the <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>
1406
- tag), the instance specified in the <code class="docutils literal"><span class="pre">InitialOwner</span></code> element for the queue
1407
- owns a message when the message first enters the queue, regardless of where
1408
- the message was originally published.</p>
1409
- <p>Only one instance can own a message at any given time. Other instances
1410
- can request that the current owner transfer ownership of a message.</p>
1411
- <p>To transfer ownership, an instance that does not currently own the message
1412
- makes a request to the current message owner. The owning instance makes an
1413
- explicit decision to transfer ownership, and replicates the transfer
1414
- notification to all instances to which the queue topic is replicated.</p>
1415
- <p>The instance that owns a message will always deliver the message to a
1416
- local subscriber if possible. This means that performance for local
1417
- subscribers is unaffected by the number of downstream instances.
1418
- However, this also means that if the local subscribers are keeping up
1419
- with the message volume being published to the queue, the owning
1420
- instance will never need to grant a transfer of ownership.</p>
1421
- <p>A downstream instance will request ownership transfer if:</p>
1422
- <ol class="arabic simple">
1423
- <li>The downstream instance has subscriptions for that topic with
1424
- available backlog, <em>and</em></li>
1425
- <li>The amount of time since the message arrived at the instance is
1426
- greater than the typical time between the replicated message arriving
1427
- and the replicated acknowledgment arriving.</li>
1428
- </ol>
1429
- <p>Notice that this approach is intended to minimize ungranted transfer
1430
- requests. In normal circumstances, the typical processing time reflects
1431
- the speed at which the local processors are consuming messages at a
1432
- steady state. Downstream instances will only request messages that have
1433
- been seen to exceed that time, indicating that the processors are not
1434
- keeping up with the incoming message rate.</p>
1435
- <p>The instance that owns the message will grant ownership to a requesting
1436
- instance if:</p>
1437
- <ol class="arabic simple">
1438
- <li>The request is the first request received for this message, <em>and</em></li>
1439
- <li>There are no subscribers on the owning instance that can accept the
1440
- message</li>
1441
- </ol>
1442
- <p>When the owning instance grants the request, it logs the transfer in its
1443
- transaction log and sends the transfer of ownership to all instances
1444
- that are receiving replicated messages for the queue. When the owning
1445
- instance does not grant the transfer of ownership, it takes no action.</p>
1446
- <p>Notice that your replication topology must be able to replicate
1447
- acknowledgments to all instances that receive messages for the queue.
1448
- Otherwise, an instance that does not receive the acknowledgments will
1449
- not consider the messages to be processed. Replication validation can
1450
- help to identify topologies that do not meet this requirement.</p>
1451
- <div class="admonition tip">
1452
- <p class="first admonition-title">Tip</p>
1453
- <p class="last">A <em>barrier message</em> is delivered immediately when
1454
- there are no unacknowledged messages ahead of the
1455
- barrier message in the queue on this instance,
1456
- <em>regardless of which instance owns the message</em>. This
1457
- means that for a distributed queue or group local queue,
1458
- every queue that contains the barrier message will deliver
1459
- the barrier message when all previous messages on that
1460
- instance have been acknowledged.</p>
1461
- </div>
1462
- <div class="section" id="failover-and-queue-message-ownership">
1463
- <h4>Failover and Queue Message Ownership<a class="headerlink" href="#failover-and-queue-message-ownership" title="Permalink to this headline">¶</a></h4>
1464
- <p>When an instance that contains a queue fails or is shut down, that
1465
- instance is no longer able to grant ownership requests for the messages
1466
- that it owns. By default, those messages become unavailable for
1467
- delivery, since there is no longer a central coordination point at which
1468
- to ensure that the messages are only delivered once.</p>
1469
- <p>AMPS provides a way to make those messages available. Through the admin
1470
- console, you can choose to <code class="docutils literal"><span class="pre">enable_proxied_transfer</span></code>, which allows an
1471
- instance to act as an ownership proxy for an instance that has gone
1472
- offline. In this mode, the local instance can assume ownership of
1473
- messages that are owned by an offline instance.</p>
1474
- <p><em>Use this setting with care</em>: when active, it is possible for messages to
1475
- be delivered twice if the instance that had previously owned the message
1476
- comes back online, or if multiple instances have proxied transfer
1477
- enabled for the same queue.</p>
1478
- <p>In general, you <code class="docutils literal"><span class="pre">enable_proxied_transfer</span></code> as a temporary recovery step
1479
- while one of the instances is offline, and then disable proxied transfer
1480
- when the instance comes back online, or when all of the messages owned
1481
- by that instance have been processed.</p>
1482
- </div>
1483
- </div>
1484
- <div class="section" id="configuration-for-queue-replication">
1485
- <h3>Configuration for Queue Replication<a class="headerlink" href="#configuration-for-queue-replication" title="Permalink to this headline">¶</a></h3>
1486
- <p>To provide replication for a distributed queue, AMPS requires that the
1487
- replication configuration meet the following requirements:</p>
1488
- <ol class="arabic">
1489
- <li><p class="first">Provide bidirectional replication between the instances. In other
1490
- words, if instance A replicates a queue to instance B, instance B
1491
- must also replicate that queue to instance A.</p>
1492
- </li>
1493
- <li><p class="first">If the topic is a queue on one instance, it must be a queue on all
1494
- replicated instances.</p>
1495
- </li>
1496
- <li><p class="first">On all replicated instances, the queue must use the same underlying
1497
- topic definition and filters. For queues that use a regular
1498
- expression as the topic definition, this means that the regular
1499
- expression must be the same. For a <code class="docutils literal"><span class="pre">GroupLocalQueue</span></code>, the
1500
- <code class="docutils literal"><span class="pre">InitialOwner</span></code> must be the same on all instances that contain
1501
- the queue.</p>
1502
- </li>
1503
- <li><p class="first">The underlying topics must be replicated to all replicated instances
1504
- (since this is where the messages for the queue are stored).</p>
1505
- </li>
1506
- <li><p class="first">Replicated instances must provide passthrough for instances that
1507
- replicate queues. For example, consider the following replication
1508
- topology: Instance A in group One replicates a queue to instance B in
1509
- group Two. Instance B in group Two replicates the queue to instance C
1510
- in group Three.</p>
1511
- <p>For this configuration, instance B must provide passthrough for group
1512
- Three to instance A, and must also provide passthrough for group One
1513
- to instance C. The reason for this is to ensure that ownership
1514
- transfer and acknowledgment messages can reach all instances that
1515
- maintain a copy of the queue.</p>
1516
- <p>Likewise, consider a topology where Instance X in GroupOne replicates
1517
- a queue to Instance Y in GroupOne. Instance X must provide passthrough
1518
- for GroupOne, since any incoming replication messages for the queue
1519
- (for example, from Instance Z) that arrive at Instance X must be
1520
- <em>guaranteed</em> to reach Instance Y. Otherwise, it would be possible for the
1521
- queue on Instance Y to have different messages than Instance X and Instance
1522
- Z if Instance Z does not replicate to Instance Y (or if the network
1523
- connection between Instance Z and Instance Y fails).</p>
1524
- </li>
1525
- </ol>
1526
- <p>Notice that <em>the requirements above apply only to queue topics</em>. If the
1527
- underlying topic uses a different name than the queue topic, it is
1528
- possible to replicate the messages from the underlying topic <em>without</em>
1529
- replicating the queue itself. This approach can be convenient for simply
1530
- recording and storing the messages provided to the queue on an archival
1531
- or auditing instance. When only the underlying topic (or topics) are
1532
- replicated, the requirements above do not apply, since AMPS does not
1533
- provide queuing behavior for the underlying topics.</p>
1534
- <p>A queue defined with <code class="docutils literal"><span class="pre">LocalQueue</span></code> cannot be replicated. The data from
1535
- the underlying topics for the queue can be replicated without special
1536
- restrictions. The queue topic itself, however, cannot be replicated.
1537
- AMPS reports an error if any <code class="docutils literal"><span class="pre">LocalQueue</span></code> topic is replicated.</p>
1538
- </div>
1539
- </div>
1540
- <div class="section" id="bootstrap-initialization-of-amps-replication">
1541
- <span id="bootstrap-initialization"></span><h2>Bootstrap Initialization of AMPS Replication<a class="headerlink" href="#bootstrap-initialization-of-amps-replication" title="Permalink to this headline">¶</a></h2>
1542
- <p id="index-6">AMPS offers the ability to initialize replication by recovering
1543
- the full current set of messages in an AMPS instance from another
1544
- instance.</p>
1545
- <p>Bootstrap initialization can restore the messages in the
1546
- transaction log of the source instance. Unlike replication,
1547
- bootstrap initialization will restore messages that
1548
- would not normally be replicated, including:</p>
1549
- <ul>
1550
- <li><p class="first">The full current contents of SOW topics (including messages that
1551
- are present in the SOW, but are no longer in the transaction log).</p>
1552
- </li>
1553
- <li><p class="first">Messages that would not be replicated to the
1554
- instance being bootstrapped due to protection against
1555
- replication loops.</p>
1556
- <p>That is, if the <code class="docutils literal"><span class="pre">AMPS-Instance-A</span></code> instance is being
1557
- recovered, bootstrap recovery will copy messages
1558
- that were originally published to <code class="docutils literal"><span class="pre">AMPS-Instance-A</span></code>.</p>
1559
- <p>Replication does not return messages to the instance
1560
- that the message was originally received from (to
1561
- prevent loops, and because that instance is already
1562
- known to have the message).</p>
1563
- </li>
1564
- </ul>
1565
- <p>Bootstrap replication initialization uses the
1566
- AMPS replication transport to retrieve messages from
1567
- the source. However, the bootstrap initialization
1568
- process itself is distinct from replication and
1569
- happens as a part of AMPS recovery, <em>before</em> replication
1570
- begins.</p>
1571
- <div class="admonition caution">
1572
- <p class="first admonition-title">Caution</p>
1573
- <p>Since an instance must finish bootstrap
1574
- initialization before providing any other
1575
- service, two instances of AMPS should not
1576
- try to bootstrap from each other in a
1577
- situation where both transaction logs
1578
- are empty. In this case, both instances
1579
- will wait for the other instance, and neither
1580
- instance will recover.</p>
1581
- <p class="last">If two instances of AMPS will be recovery
1582
- partners with each other, start one instance
1583
- without a bootstrap configuration the first
1584
- time, then add the bootstrap configuration
1585
- on a later restart.</p>
1586
- </div>
1587
- <p>Bootstrap initialization only takes place when
1588
- the AMPS instance is starting, and the
1589
- <em>only</em> function of bootstrap initialization
1590
- is to restore the initial state of AMPS from
1591
- another instance. To keep the current state
1592
- of messages synchronized between instances,
1593
- use AMPS replication.</p>
1594
- <div class="section" id="when-to-use-bootstrap-initialization">
1595
- <h3>When to Use Bootstrap Initialization<a class="headerlink" href="#when-to-use-bootstrap-initialization" title="Permalink to this headline">¶</a></h3>
1596
- <p>Bootstrap initialization is most commonly used
1597
- for:</p>
1598
- <ul>
1599
- <li><p class="first"><strong>Disaster Recovery</strong> - In a situation where the
1600
- entire state of the instance has been lost,
1601
- bootstrap replication initialization can effectively
1602
- recover the state of the instance, including the
1603
- SOW topics and messages originally published to
1604
- the instance.</p>
1605
- </li>
1606
- <li><p class="first"><strong>Scale-out Scenarios</strong> - When an instance of AMPS
1607
- joins an existing set of instances that maintain
1608
- data in SOW topics for longer than the instances
1609
- maintain the transaction log.</p>
1610
- </li>
1611
- <li><p class="first"><strong>Offline Replica Scenarios</strong> - For example, bootstrap
1612
- initialization might be a good option for periodically
1613
- repopulating a development or reporting environment
1614
- that periodically needs a full copy of the data in
1615
- an instance, but does not require active message flow.</p>
1616
- <p>In this case, the state for the instance is typically
1617
- removed on a regular basis. The message contents
1618
- are recovered using bootstrap initialization, but the
1619
- upstream instance may not continue to replicate messages
1620
- while the instance is running, since active message flow
1621
- is not necessary.</p>
1622
- </li>
1623
- </ul>
1624
- </div>
1625
- <div class="section" id="starting-bootstrap-initialization">
1626
- <h3>Starting Bootstrap Initialization<a class="headerlink" href="#starting-bootstrap-initialization" title="Permalink to this headline">¶</a></h3>
1627
- <p>An instance of AMPS will begin bootstrap initialization
1628
- when:</p>
1629
- <ul class="simple">
1630
- <li>The instance is configured to bootstrap the initial state.</li>
1631
- <li>The AMPS instance does not detect persistent state
1632
- when it starts (or AMPS detects that it was
1633
- shut down while bootstrap was underway).</li>
1634
- </ul>
1635
- <p>An AMPS instance will <strong>only</strong> use bootstrap initialization when
1636
- that instance starts with no messages in the transaction log.
1637
- Bootstrap initialization will not overwrite or modify existing
1638
- messages on an instance. If there are messages in the transaction
1639
- log for the AMPS instance, the instance will not perform
1640
- bootstrap initialization.</p>
1641
- <p>An AMPS instance does not
1642
- use bootstrap initialization once the instance starts. To keep
1643
- message state consistent between two instances of AMPS while
1644
- AMPS is running, use AMPS replication.</p>
1645
- </div>
1646
- <div class="section" id="configuring-bootstrap-initialization">
1647
- <h3>Configuring Bootstrap Initialization<a class="headerlink" href="#configuring-bootstrap-initialization" title="Permalink to this headline">¶</a></h3>
1648
- <p>To configure bootstrap initialization, the configuration on the
1649
- instance being initialized must include:</p>
1650
- <ul class="simple">
1651
- <li>A replication transport (that is, a <code class="docutils literal"><span class="pre">Transport</span></code> of type <code class="docutils literal"><span class="pre">amps-replication</span></code> or <code class="docutils literal"><span class="pre">amps-replication-secure</span></code></li>
1652
- <li>A transaction log, <em>and</em></li>
1653
- <li>A bootstrap directive</li>
1654
- </ul>
1655
- <p>Most often, the instance that is the source of bootstrap
1656
- messages will also replicate to the instance that is being
1657
- initialized. However, this is not required: the instance being
1658
- bootstrapped can receive replication publishes from a
1659
- completely different instance or set of instances.</p>
1660
- <p>The instance that will serve as the source of bootstrap
1661
- initialization must define a replication transport, and
1662
- must also have recorded the information that will be
1663
- used for initialization (that is, the topics that will
1664
- be initialized must be in the transaction log and/or
1665
- SOW).</p>
1666
- <p>For example, the following configuration will initialize
1667
- the message state of the instance from the source AMPS
1668
- instance located at <code class="docutils literal"><span class="pre">source.example.com</span></code> or, if that
1669
- server is unavailable, at the AMPS instance located at
1670
- <code class="docutils literal"><span class="pre">backup.example.com</span></code>. In both cases, those instances
1671
- must have configured a replication transport listening
1672
- on port <code class="docutils literal"><span class="pre">4100</span></code>.</p>
1673
- <p>This instance will initialize the topics <code class="docutils literal"><span class="pre">important-topic</span></code>
1674
- and any topic that begins with the string <code class="docutils literal"><span class="pre">audit-topic</span></code>
1675
- of message type <code class="docutils literal"><span class="pre">json</span></code> from the source server. If either
1676
- of these topics is recorded in the <code class="docutils literal"><span class="pre">SOW</span></code>, the current
1677
- messages from the source instance will be copied to this
1678
- instance of AMPS.</p>
1679
- <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;Bootstrap&gt;</span>
1680
-
1681
- <span class="nt">&lt;Topic&gt;</span>
1682
- <span class="nt">&lt;Name&gt;</span>important-topic<span class="nt">&lt;/Name&gt;</span>
1683
- <span class="nt">&lt;MessageType&gt;</span>json<span class="nt">&lt;/MessageType&gt;</span>
1684
- <span class="nt">&lt;/Topic&gt;</span>
1685
-
1686
- <span class="nt">&lt;Topic&gt;</span>
1687
- <span class="nt">&lt;Name&gt;</span>^audit-topic<span class="nt">&lt;/Name&gt;</span>
1688
- <span class="nt">&lt;MessageType&gt;</span>json<span class="nt">&lt;/MessageType&gt;</span>
1689
- <span class="nt">&lt;/Topic&gt;</span>
1690
-
1691
- <span class="nt">&lt;DataType&gt;</span>sow,txlog<span class="nt">&lt;/DataType&gt;</span>
1692
-
1693
- <span class="nt">&lt;Transport&gt;</span>
1694
- <span class="nt">&lt;InetAddr&gt;</span>source.example.com:4100<span class="nt">&lt;/InetAddr&gt;</span>
1695
- <span class="nt">&lt;InetAddr&gt;</span>backup.example.com:4100<span class="nt">&lt;/InetAddr&gt;</span>
1696
- <span class="nt">&lt;Type&gt;</span>amps-replication<span class="nt">&lt;/Type&gt;</span>
1697
- <span class="nt">&lt;/Transport&gt;</span>
1698
-
1699
- <span class="nt">&lt;/Bootstrap&gt;</span>
1700
- </pre></div>
1701
- </div>
1702
- <p>This instance must also define a replication transport
1703
- and a transaction log. If the topics specified are
1704
- to be stored in the SOW, the instance must also
1705
- include definitions for those topics in the
1706
- configuration.</p>
1707
- <p>If an instance with this configuration starts, and
1708
- there is no message data in the transaction log,
1709
- the instance will bootstrap initialize message
1710
- contents as configured above.</p>
1711
- </div>
1712
- </div>
1713
- <div class="section" id="replication-best-practices">
1714
- <span id="common-replication-best-practices"></span><span id="index-7"></span><h2>Replication Best Practices<a class="headerlink" href="#replication-best-practices" title="Permalink to this headline">¶</a></h2>
1715
- <p>For your application to work properly in an environment that uses
1716
- AMPS replication, it is important to follow these best practices:</p>
1717
- <ul class="simple">
1718
- <li><em>Every client that changes the state of AMPS must have a distinct client
1719
- name</em> - Although AMPS only enforces this requirement for an individual
1720
- instance, if two clients with the same name are connected to two
1721
- different instances, and both clients publish messages, delete messages,
1722
- or acknowledge messages from a queue, the messages present on each
1723
- instance of AMPS can become inconsistent.</li>
1724
- <li><em>Use replication filters with caution, especially for queue topics</em> - Using
1725
- a replication filter will create different topic contents on each instance.
1726
- In addition, using a replication filter for a message queue topic (or the
1727
- underlying topic for a message queue) can create different queue contents
1728
- on different instances, and messages that are not replicated must be
1729
- consumed from the instance where they were originally published.</li>
1730
- <li><em>Do not manually set client sequence numbers on published messages</em> -
1731
- The publish store classes in the AMPS client libraries manage sequence
1732
- numbers for published messages to ensure that there is no message
1733
- loss or duplication in a high availability environment. 60East
1734
- recommends using those publish stores to manage sequence numbers
1735
- rather than setting them manually. Since AMPS uses the sequence
1736
- number to identify duplicate messages, setting sequence numbers
1737
- manually can cause AMPS to discard messages or lead to inconsistent
1738
- state across instances.</li>
1739
- <li><em>Default to PassThrough for every group</em> - PassThrough for every
1740
- group guarantees that each upstream instance will provide the
1741
- full set of messages that it has to downstream groups. For some
1742
- topologies, it is possible to reduce traffic to downstream
1743
- instances by using the PassThrough configuration to avoid replicating
1744
- messages that are guaranteed to arrive via another route (even in
1745
- cases of network or server failure), but this should be done
1746
- with caution.</li>
1747
- <li><em>Do not allow a publisher or queue consumer to fail over between
1748
- two instances that are replicating using async acknowledgment</em> - The
1749
- <code class="docutils literal"><span class="pre">async</span></code> acknowledgment mode means that messages are acknowledged
1750
- to a publisher before the downstream replication instance has
1751
- acknowledged that it has received the message. Allowing a publisher
1752
- to fail over between two instances that are using <code class="docutils literal"><span class="pre">async</span></code> acknowledgment
1753
- runs the risk of creating inconsistent state or message loss.</li>
1754
- </ul>
1755
- </div>
1756
- </div>
1757
-
1758
-
1759
- </div>
1760
- </div>
1761
- </div>
1762
- <div class="clearer"></div>
1763
- </div>
1764
- <div class="footer">
1765
- &copy;2023 60East Technologies, Inc. (version develop).
1766
-
1767
- |
1768
- Powered by <a href="http://sphinx-doc.org/">Sphinx 1.5.3</a>
1769
- &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.10</a>
1770
-
1771
- </div>
1772
-
1773
-
1774
-
1775
-
1776
- </body>
1777
- </html>