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
@@ -0,0 +1,1017 @@
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" lang="en">
6
+ <head>
7
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
8
+
9
+ <title>9. High Availability &#8212; Python Developer Guide 5.3.4.0
10
+ documentation</title>
11
+
12
+ <link rel="stylesheet" href="../_static/alabaster.css" type="text/css" />
13
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
14
+
15
+ <script type="text/javascript">
16
+ var DOCUMENTATION_OPTIONS = {
17
+ URL_ROOT: '../',
18
+ VERSION: '5.3.4.0',
19
+ COLLAPSE_INDEX: false,
20
+ FILE_SUFFIX: '.html',
21
+ HAS_SOURCE: true,
22
+ SOURCELINK_SUFFIX: '.txt'
23
+ };
24
+ </script>
25
+ <script type="text/javascript" src="../_static/jquery.js"></script>
26
+ <script type="text/javascript" src="../_static/underscore.js"></script>
27
+ <script type="text/javascript" src="../_static/doctools.js"></script>
28
+ <link rel="index" title="Index" href="../genindex.html" />
29
+ <link rel="search" title="Search" href="../search.html" />
30
+ <link rel="next" title="10. AMPS Programming: Working with Commands" href="creating-commands.html" />
31
+ <link rel="prev" title="8. Delta Publish and Subscribe" href="deltas.html" />
32
+
33
+ <link rel="stylesheet" href="../_static/custom.css" type="text/css" />
34
+
35
+
36
+ <meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
37
+
38
+ </head>
39
+ <body role="document">
40
+ <div class="document">
41
+
42
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
43
+ <div class="sphinxsidebarwrapper">
44
+ <p class="logo"><a href="../index.html">
45
+ <img class="logo" src="../_static/flag_logo.png" alt="Logo"/>
46
+ </a></p>
47
+ <h3><a href="../index.html">Table Of Contents</a></h3>
48
+ <ul>
49
+ <li><a class="reference internal" href="#">9. High Availability</a><ul>
50
+ <li><a class="reference internal" href="#overview-of-haclient">Overview of HAClient</a></li>
51
+ <li><a class="reference internal" href="#reconnection-with-haclient">Reconnection with HAClient</a></li>
52
+ <li><a class="reference internal" href="#choosing-store-durability">Choosing Store Durability</a><ul>
53
+ <li><a class="reference internal" href="#using-the-sow-recovery-point-adapter">Using the SOW Recovery Point Adapter</a><ul>
54
+ <li><a class="reference internal" href="#amps-topic-configuration">AMPS Topic Configuration</a></li>
55
+ <li><a class="reference internal" href="#constructing-a-client-for-the-adapter">Constructing a Client for the Adapter</a></li>
56
+ </ul>
57
+ </li>
58
+ <li><a class="reference internal" href="#capacity-planning-and-store-sizing">Capacity Planning and Store Sizing</a></li>
59
+ </ul>
60
+ </li>
61
+ <li><a class="reference internal" href="#connections-and-the-server-chooser">Connections and the Server Chooser</a><ul>
62
+ <li><a class="reference internal" href="#setting-a-reconnect-delay-and-timeout">Setting a Reconnect Delay and Timeout</a></li>
63
+ <li><a class="reference internal" href="#implementing-a-server-chooser">Implementing a Server Chooser</a></li>
64
+ </ul>
65
+ </li>
66
+ <li><a class="reference internal" href="#heartbeats-and-failure-detection">Heartbeats and Failure Detection</a></li>
67
+ <li><a class="reference internal" href="#considerations-for-publishers">Considerations for Publishers</a></li>
68
+ <li><a class="reference internal" href="#detecting-failover-ahead-of-replication">Detecting Failover Ahead of Replication</a></li>
69
+ <li><a class="reference internal" href="#considerations-for-subscribers">Considerations for Subscribers</a><ul>
70
+ <li><a class="reference internal" href="#resubscription-with-asynchronous-message-processing">Resubscription with Asynchronous Message Processing</a></li>
71
+ <li><a class="reference internal" href="#resubscription-with-synchronous-message-processing">Resubscription with Synchronous Message Processing</a></li>
72
+ <li><a class="reference internal" href="#bookmark-stores">Bookmark Stores</a></li>
73
+ </ul>
74
+ </li>
75
+ <li><a class="reference internal" href="#conclusion">Conclusion</a></li>
76
+ </ul>
77
+ </li>
78
+ </ul>
79
+ <div class="relations">
80
+ <h3>Related Topics</h3>
81
+ <ul>
82
+ <li><a href="../index.html">Documentation overview</a><ul>
83
+ <li>Previous: <a href="deltas.html" title="previous chapter">8. Delta Publish and Subscribe</a></li>
84
+ <li>Next: <a href="creating-commands.html" title="next chapter">10. AMPS Programming: Working with Commands</a></li>
85
+ </ul></li>
86
+ </ul>
87
+ </div>
88
+ <div id="searchbox" style="display: none" role="search">
89
+ <h3>Quick search</h3>
90
+ <form class="search" action="../search.html" method="get">
91
+ <div><input type="text" name="q" /></div>
92
+ <div><input type="submit" value="Go" /></div>
93
+ <input type="hidden" name="check_keywords" value="yes" />
94
+ <input type="hidden" name="area" value="default" />
95
+ </form>
96
+ </div>
97
+ <script type="text/javascript">$('#searchbox').show(0);</script>
98
+ </div>
99
+ </div>
100
+ <div class="documentwrapper">
101
+ <div class="bodywrapper">
102
+ <div class="body" role="main">
103
+
104
+ <div class="section" id="high-availability">
105
+ <span id="index-0"></span><h1>9. High Availability<a class="headerlink" href="#high-availability" title="Permalink to this headline">¶</a></h1>
106
+ <p>The AMPS Python Client provides an easy way to create highly-available
107
+ applications using AMPS, via the <code class="docutils literal"><span class="pre">HAClient</span></code> class. <code class="docutils literal"><span class="pre">HAClient</span></code>
108
+ derives from <code class="docutils literal"><span class="pre">Client</span></code> and offers the same methods, but also adds
109
+ protection against network, server, and client outages.</p>
110
+ <p>Using <code class="docutils literal"><span class="pre">HAClient</span></code> allows applications to automatically:</p>
111
+ <ul class="simple">
112
+ <li>Recover from temporary disconnects between client and server.</li>
113
+ <li>Failover from one server to another when a server becomes
114
+ unavailable.</li>
115
+ </ul>
116
+ <p>Since the <code class="docutils literal"><span class="pre">HAClient</span></code> automatically manages failover and
117
+ reconnection, 60East recommends using the <code class="docutils literal"><span class="pre">HAClient</span></code> for applications
118
+ that need to:</p>
119
+ <ul class="simple">
120
+ <li>Automatically reconnect and resume work in the case of disconnection.</li>
121
+ <li>Ensure no messages are lost or duplicated after a reconnect or
122
+ failover.</li>
123
+ <li>Persist messages and bookmarks on disk for protection against client
124
+ failure.</li>
125
+ </ul>
126
+ <p>You can choose how your application uses <code class="docutils literal"><span class="pre">HAClient</span></code> features. For
127
+ example, you might need automatic reconnection, but have no need to
128
+ resume subscriptions or republish messages. The high availability
129
+ behavior in <code class="docutils literal"><span class="pre">HAClient</span></code> is provided by implementations of defined
130
+ interfaces. You can combine different implementations provided by 60East
131
+ to meet your needs, and implement those interfaces to provide your own
132
+ policies.</p>
133
+ <p>Some of these features require specific configuration settings on your
134
+ AMPS instance(s). This chapter mentions these features and describes how
135
+ to use them from the AMPS Java client. You can find full documentation
136
+ for these settings and server features in the <em>AMPS User Guide</em>.</p>
137
+ <div class="section" id="overview-of-haclient">
138
+ <h2>Overview of HAClient<a class="headerlink" href="#overview-of-haclient" title="Permalink to this headline">¶</a></h2>
139
+ <p><code class="docutils literal"><span class="pre">HAClient</span></code> derives from <code class="docutils literal"><span class="pre">Client</span></code> and offers the same methods for
140
+ sending commands to AMPS and receiving messages from AMPS.</p>
141
+ <p>The <code class="docutils literal"><span class="pre">HAClient</span></code> differs from the <code class="docutils literal"><span class="pre">Client</span></code> in two ways:</p>
142
+ <ul class="simple">
143
+ <li>The <code class="docutils literal"><span class="pre">HAClient</span></code> automatically installs a disconnect handler that
144
+ reconnects to AMPS and resumes active (asynchronous) subscriptions.
145
+ The disconnect handler optionally replays <code class="docutils literal"><span class="pre">publish</span></code> and <code class="docutils literal"><span class="pre">sow_delete</span></code>
146
+ messages that have not been acknowledged by AMPS, using a
147
+ <code class="docutils literal"><span class="pre">PublishStore</span></code>. The disconnect handler can optionally resume
148
+ replays from the transaction log at a point that guarantees
149
+ no messages are skipped and no duplicates are delivered to the
150
+ application, using a <code class="docutils literal"><span class="pre">BookmarkStore</span></code>.</li>
151
+ <li>The <code class="docutils literal"><span class="pre">HAClient</span></code> includes the infrastructure needed for
152
+ client failover, including a list of connection strings
153
+ and their associated authentication mechanisms (provided by
154
+ the <code class="docutils literal"><span class="pre">ServerChooser</span></code>), and options for controlling backoff
155
+ behavior for reconnects (provided by the <code class="docutils literal"><span class="pre">DelayStrategy</span></code>).
156
+ As a result, the <code class="docutils literal"><span class="pre">HAClient</span></code> provides a <code class="docutils literal"><span class="pre">connect_and_logon()</span></code>
157
+ function for establishing a connection to AMPS, rather than
158
+ treating these as independent steps that an application must
159
+ manage itself.</li>
160
+ </ul>
161
+ <p>If your application needs to automatically reconnect to AMPS,
162
+ 60East recommends using the <code class="docutils literal"><span class="pre">HAClient</span></code> and the automatically
163
+ provided disconnect handler rather than using a <code class="docutils literal"><span class="pre">Client</span></code>
164
+ or replacing the <code class="docutils literal"><span class="pre">HAClient</span></code> default disconnect handler.</p>
165
+ </div>
166
+ <div class="section" id="reconnection-with-haclient">
167
+ <h2>Reconnection with HAClient<a class="headerlink" href="#reconnection-with-haclient" title="Permalink to this headline">¶</a></h2>
168
+ <p>The most important difference between <code class="docutils literal"><span class="pre">Client</span></code> and <code class="docutils literal"><span class="pre">HAClient</span></code> is
169
+ that <code class="docutils literal"><span class="pre">HAClient</span></code> automatically provides a reconnect handler.</p>
170
+ <p>This description provides a high-level framework for understanding the
171
+ components involved in failover with the <code class="docutils literal"><span class="pre">HAClient</span></code>. The components
172
+ are described in more detail in the following sections.</p>
173
+ <p>The <code class="docutils literal"><span class="pre">HAClient</span></code> reconnect handler performs the following steps when
174
+ reconnecting:</p>
175
+ <ol class="arabic">
176
+ <li><p class="first">Calls the <code class="docutils literal"><span class="pre">ServerChooser</span></code> to determine the next URI to connect to
177
+ and the authenticator to use for that connection.</p>
178
+ <p>If the connection fails, calls <code class="docutils literal"><span class="pre">get_error</span></code> on the <code class="docutils literal"><span class="pre">ServerChooser</span></code>
179
+ to get a description of the failure, sends an exception to the
180
+ exception listener and stops the reconnection process.</p>
181
+ </li>
182
+ <li><p class="first">Calls the <code class="docutils literal"><span class="pre">DelayStrategy</span></code> to determine how long to wait before
183
+ attempting to reconnect and waits for that period of time.</p>
184
+ </li>
185
+ <li><p class="first">Connects to the AMPS server. If the connection fails, calls
186
+ <code class="docutils literal"><span class="pre">report_failure</span></code> on the <code class="docutils literal"><span class="pre">ServerChooser</span></code> and begins the process
187
+ again.</p>
188
+ </li>
189
+ <li><p class="first">Logs on to the AMPS server. If the connection fails, calls
190
+ <code class="docutils literal"><span class="pre">report_failure</span></code> on the <code class="docutils literal"><span class="pre">ServerChooser</span></code> and begins the process
191
+ again.</p>
192
+ </li>
193
+ <li><p class="first">Calls <code class="docutils literal"><span class="pre">report_success</span></code> on the <code class="docutils literal"><span class="pre">ServerChooser</span></code>.</p>
194
+ </li>
195
+ <li><p class="first">Receives the bookmark for the last message that the server has
196
+ persisted. Discards any older messages from the <code class="docutils literal"><span class="pre">PublishStore</span></code>.</p>
197
+ </li>
198
+ <li><p class="first">Republishes any messages in the <code class="docutils literal"><span class="pre">PublishStore</span></code> that have not been
199
+ persisted by the server.</p>
200
+ </li>
201
+ <li><p class="first">Re-establishes subscriptions using the <code class="docutils literal"><span class="pre">SubscriptionManager</span></code> for
202
+ the client. For bookmark subscriptions, the reconnect handler uses
203
+ the <code class="docutils literal"><span class="pre">BookmarkStore</span></code> for the client to determine the most recent
204
+ bookmark, and re-subscribes with that bookmark. For subscriptions that
205
+ do not use a bookmark, the <code class="docutils literal"><span class="pre">SubscriptionManager</span></code> simply re-enters
206
+ the subscription, meaning that it is entered at the point at which
207
+ the <code class="docutils literal"><span class="pre">HAClient</span></code> reconnects.</p>
208
+ </li>
209
+ </ol>
210
+ <p>The <code class="docutils literal"><span class="pre">ServerChooser</span></code>, <code class="docutils literal"><span class="pre">DelayStrategy</span></code>, <code class="docutils literal"><span class="pre">PublishStore</span></code>,
211
+ and <code class="docutils literal"><span class="pre">BookmarkStore</span></code> are all extension points
212
+ for the <code class="docutils literal"><span class="pre">HAClient</span></code>. You can adapt the failover and recovery behavior
213
+ by setting a different object for the behavior you want to customize on
214
+ the <code class="docutils literal"><span class="pre">HAClient</span></code> or by providing your own implementation.</p>
215
+ <p>For example, the convenience methods in the previous section customize
216
+ the behavior of the <code class="docutils literal"><span class="pre">PublishStore</span></code> and <code class="docutils literal"><span class="pre">BookmarkStore</span></code> by providing
217
+ either memory-backed or file-backed stores.</p>
218
+ <p>The reconnection process runs on the thread that discovers the
219
+ disconnection. This means that, in the event that an application
220
+ thread discovers the disconnection as a result of a call to
221
+ the Python AMPS client, that call may not return until a
222
+ connection is re-established (or until the server chooser
223
+ indicates failure, in which case the application will
224
+ receive an exception).</p>
225
+ <p>The Python client includes a <code class="docutils literal"><span class="pre">retry_on_disconnect</span></code> setting that
226
+ controls this retry behavior when the client is disconnected. When
227
+ set to <code class="docutils literal"><span class="pre">True</span></code> (the default), any call to the Client that results
228
+ in a command being sent to AMPS may block until a connection is
229
+ re-established. When set to <code class="docutils literal"><span class="pre">False</span></code>, the <code class="docutils literal"><span class="pre">HAClient</span></code> will
230
+ retry the connection a single time and throw an exception
231
+ if the connection cannot be re-established.</p>
232
+ <p>Regardless of the <code class="docutils literal"><span class="pre">retry_on_disconnect</span></code> setting, a call
233
+ to <code class="docutils literal"><span class="pre">publish</span></code> will result in the message being stored in
234
+ the <code class="docutils literal"><span class="pre">PublishStore</span></code> for the client if one is set.</p>
235
+ </div>
236
+ <div class="section" id="choosing-store-durability">
237
+ <h2>Choosing Store Durability<a class="headerlink" href="#choosing-store-durability" title="Permalink to this headline">¶</a></h2>
238
+ <p id="index-1">If your application needs reliable publish to AMPS, install a
239
+ <code class="docutils literal"><span class="pre">PublishStore</span></code> in the <code class="docutils literal"><span class="pre">HAClient</span></code>. If your application needs to
240
+ resume replays from the transaction log, install a <code class="docutils literal"><span class="pre">BookmarkStore</span></code> in
241
+ the <code class="docutils literal"><span class="pre">HAClient</span></code>.</p>
242
+ <p>These stores provide the following capabilities:</p>
243
+ <ul class="simple">
244
+ <li>A <em>bookmark store</em> tracks received messages and is used to resume
245
+ subscriptions that replay from the transaction log.</li>
246
+ <li>A <em>publish store</em> tracks published messages and is used to ensure that
247
+ messages are persisted in AMPS.</li>
248
+ </ul>
249
+ <p>The AMPS client provides a memory-backed version of each store and a
250
+ file-backed version of each store. The store interface is public, and an
251
+ application can create and provide a custom store as necessary. An
252
+ <code class="docutils literal"><span class="pre">HAClient</span></code> can use either a memory backed store or a file backed store
253
+ for protection. Each method provides resilience to different failures, as
254
+ described below:</p>
255
+ <ul>
256
+ <li><p class="first"><em>Memory-backed stores</em> provide recovery disconnection from AMPS by
257
+ storing messages and bookmarks in your process&#8217; address space. This
258
+ is the highest performance option for working with AMPS in a highly
259
+ available manner. The trade-off with this method is there is no
260
+ protection from a crash or failure of your client application. If
261
+ your application is terminated prematurely or, if the application
262
+ terminates at the same time as an AMPS instance failure or network
263
+ outage, then messages may be lost or duplicated. The state of
264
+ bookmark replays will be lost when the application shuts down.
265
+ Messages in the publish store when the application shuts down
266
+ will not be maintained through a restart, so the application will
267
+ not be able to attempt any necessary redelivery when the application restarts.</p>
268
+ <p>A memory-backed store should only be used by one instance of a client at
269
+ a time.</p>
270
+ </li>
271
+ <li><p class="first"><em>File-backed stores</em> provide recovery after client failure and
272
+ disconnection from AMPS by storing messages and bookmarks on disk. To
273
+ use this protection method, the <code class="docutils literal"><span class="pre">create_file_backed</span></code> method
274
+ requests additional arguments for the two files that will be used for
275
+ both bookmark storage and message storage. If these files exist and
276
+ are non-empty (as they would be after a client application is
277
+ restarted), the <code class="docutils literal"><span class="pre">HAClient</span></code> loads their contents and ensures
278
+ synchronization with the AMPS server once connected. The performance
279
+ of this option depends heavily on the speed of the device on which
280
+ these files are placed. When the files do not exist (as they would
281
+ the first time a client starts on a given system), the <code class="docutils literal"><span class="pre">HAClient</span></code>
282
+ creates and initializes the files, and in this case the client does
283
+ not have a point at which to resume the subscription or messages to
284
+ republish.</p>
285
+ <p>A store file should only be used by one instance of a client at
286
+ a time.</p>
287
+ <p>When using file-backed stores, 60East recommends periodically removing
288
+ unneeded entries by calling the <code class="docutils literal"><span class="pre">prune()</span></code> method. The precise strategy
289
+ that your application uses to call <code class="docutils literal"><span class="pre">prune()</span></code> depends on the nature of the
290
+ application. Most applications call <code class="docutils literal"><span class="pre">prune()</span></code> when the application exits.</p>
291
+ <p>There are two basic strategies that applications follow while the
292
+ application runs:</p>
293
+ <ul class="simple">
294
+ <li>Install a resize handler and call <code class="docutils literal"><span class="pre">prune()</span></code> after a specified number
295
+ of resize operations or when the store reaches a specific size.</li>
296
+ <li>Call <code class="docutils literal"><span class="pre">prune()</span></code> after a specific number of messages are processed (for
297
+ example, every 10,000 messages received or every 1,000 updates completed).</li>
298
+ </ul>
299
+ <p>Regardless of the strategy, it is best to call <code class="docutils literal"><span class="pre">prune()</span></code> when the application
300
+ is idle, since the <code class="docutils literal"><span class="pre">prune()</span></code> call rewrites the log file.</p>
301
+ </li>
302
+ </ul>
303
+ <p>The store interface is public and an application can create and provide
304
+ a custom store as necessary. While clients provide convenience methods
305
+ for creating file-backed and memory-backed <code class="docutils literal"><span class="pre">HAClient</span></code> objects with the
306
+ appropriate stores, you can also create and set the stores in your
307
+ application code. For the AMPS Python client, stores are implemented in
308
+ C++. You can implement stores using C++, and use the technique described
309
+ in Chapter 12 of this guide - <em>Using the C++ Client</em>, to set the store on
310
+ the client.</p>
311
+ <p>Starting in 5.3.2.0, the underlying AMPS client contains a recovery point
312
+ adapter interface to make it easier to add a custom persistence layer
313
+ to a bookmark store. The distribution includes a recovery point adapter
314
+ that can store bookmark recovery information in an AMPS SOW topic.</p>
315
+ <p>The <code class="docutils literal"><span class="pre">HAClient</span></code> provides convenience methods for creating clients and
316
+ setting stores. You can also construct an <code class="docutils literal"><span class="pre">HAClient</span></code> and set the store
317
+ implementations you choose.</p>
318
+ <p>In this example, we create several clients. The first client uses memory
319
+ stores for both bookmarks and publishes. The second client uses files
320
+ for both bookmarks and publishes. The third client uses a file for
321
+ bookmarks. The third client does not set a store for publishes, which
322
+ means that AMPS provides the default store (and no outgoing messages are
323
+ stored). The final client does not specify any stores, so has no
324
+ persistence for published messages or bookmark subscriptions, but can
325
+ take advantage of the automatic failover and reconnection in the
326
+ <code class="docutils literal"><span class="pre">HAClient</span></code>.</p>
327
+ <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="c1"># Memory publish store, memory bookmark store</span>
328
+ <span class="n">memoryClient</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;lessImportantMessages&quot;</span><span class="p">)</span>
329
+
330
+ <span class="c1"># File-backed publish store, file-backed bookmark store</span>
331
+ <span class="n">diskClient</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;moreImportantMessages&quot;</span><span class="p">,</span>
332
+ <span class="s2">&quot;/mnt/fastDisk/moreImportantMessages.outgoing&quot;</span><span class="p">,</span>
333
+ <span class="s2">&quot;/mnt/fastDisk/moreImportantMessages.incoming&quot;</span><span class="p">)</span>
334
+
335
+ <span class="c1"># No-op publish store, file-backed bookmark store</span>
336
+ <span class="n">subscriberClient</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;subscriber&quot;</span><span class="p">,</span> <span class="n">no_store</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
337
+ <span class="n">subscriberClient</span><span class="o">.</span><span class="n">set_bookmark_store</span><span class="p">(</span> \
338
+ <span class="n">AMPS</span><span class="o">.</span><span class="n">MMapBookmarkStore</span><span class="p">(</span><span class="s2">&quot;/mnt/fastdisk/bookmark.store&quot;</span><span class="p">))</span>
339
+
340
+ <span class="c1"># No-op publish store, no-op bookmark store</span>
341
+ <span class="c1"># Failover behavior only.</span>
342
+ <span class="n">streamReader</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;streamReader&quot;</span><span class="p">,</span><span class="n">no_store</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
343
+ </pre></div>
344
+ </div>
345
+ <p><strong>Example 9.1:</strong> <em>HAClient creation example</em></p>
346
+ <div class="section" id="using-the-sow-recovery-point-adapter">
347
+ <h3>Using the SOW Recovery Point Adapter<a class="headerlink" href="#using-the-sow-recovery-point-adapter" title="Permalink to this headline">¶</a></h3>
348
+ <p>The AMPS client also includes the ability to use a SOW topic to store bookmark
349
+ state for a bookmark store. This can be a useful option in a situation
350
+ where an application needs a persistent bookmark store, but does not have
351
+ the ability to store a file on the filesystem, or where an application
352
+ has a bookmark file, but wants to have the ability to resume the subscription
353
+ if the file is lost or damaged, or if the application is started on a
354
+ system that does not have access to the file.</p>
355
+ <p>To use the SOW topic recovery point adapter, you create a bookmark store of
356
+ the type you would like to use for the <code class="docutils literal"><span class="pre">Client</span></code>, passing an
357
+ adapter when you construct the store. You then set this bookmark store as
358
+ the store for the <code class="docutils literal"><span class="pre">Client</span></code> to use. The constructor for the
359
+ SOW recovery adapter allows you to customize the topic name and
360
+ field names used to store the recovery point information in AMPS.
361
+ As with the <code class="docutils literal"><span class="pre">RecoveryPointAdapter</span></code> interface
362
+ in general, it is possible to customize the behavior of the SOW recovery
363
+ point adapter by overriding the provided methods.</p>
364
+ <p>This section describes how to use the adapter with the default settings.
365
+ Should you need to change the behavior of the class, you would adjust
366
+ the guidance in this section accordingly. (For example, if you override
367
+ methods to produce a message with a different set of keys or
368
+ a different message format, you would update the topic definition
369
+ accordingly).</p>
370
+ <div class="section" id="amps-topic-configuration">
371
+ <h4>AMPS Topic Configuration<a class="headerlink" href="#amps-topic-configuration" title="Permalink to this headline">¶</a></h4>
372
+ <p>To store recovery point state in AMPS, the AMPS instance
373
+ that will store the recovery point state must define a <code class="docutils literal"><span class="pre">SOW/Topic</span></code>
374
+ to hold the recovery point data.</p>
375
+ <p>By default, the adapter uses a topic named <code class="docutils literal"><span class="pre">/ADMIN/bookmark_store</span></code> of
376
+ <code class="docutils literal"><span class="pre">json</span></code> message type, with the <code class="docutils literal"><span class="pre">/clientName</span></code> and <code class="docutils literal"><span class="pre">/subId</span></code> fields
377
+ as keys, similar to the following definition:</p>
378
+ <div class="highlight-xml"><div class="highlight"><pre><span></span><span class="nt">&lt;Topic&gt;</span>
379
+ <span class="nt">&lt;Name&gt;</span>/ADMIN/bookmark_store<span class="nt">&lt;/Name&gt;</span>
380
+ <span class="nt">&lt;MessageType&gt;</span>json<span class="nt">&lt;/MessageType&gt;</span>
381
+ <span class="nt">&lt;Key&gt;</span>/clientName<span class="nt">&lt;/Key&gt;</span>
382
+ <span class="nt">&lt;Key&gt;</span>/subId<span class="nt">&lt;/Key&gt;</span>
383
+ <span class="c">&lt;!-- Storage/persistence configuration here.</span>
384
+ <span class="c"> In most cases, this topic should be</span>
385
+ <span class="c"> persisted to a file, but that is not</span>
386
+ <span class="c"> a requirement. --&gt;</span>
387
+ <span class="nt">&lt;/Topic&gt;</span>
388
+ </pre></div>
389
+ </div>
390
+ <p>You must include this definition, or an equivalent definition,
391
+ in the configuration file for the AMPS instance that will host
392
+ the recovery point.</p>
393
+ <p>If you define a topic with a different configuration (for
394
+ example, different key names, a different topic name or a
395
+ different message type), you must ensure that the
396
+ adapter that you create uses the same parameters as those
397
+ configured on the server.</p>
398
+ </div>
399
+ <div class="section" id="constructing-a-client-for-the-adapter">
400
+ <h4>Constructing a Client for the Adapter<a class="headerlink" href="#constructing-a-client-for-the-adapter" title="Permalink to this headline">¶</a></h4>
401
+ <p>The AMPS SOW Recovery Point Adapter requires a <code class="docutils literal"><span class="pre">Client</span></code> or <code class="docutils literal"><span class="pre">HAClient</span></code>
402
+ connected to the instance that contains the SOW topic. The Adapter will
403
+ use this client to recover bookmark state and store bookmarks in AMPS.
404
+ Notice that this client <strong>must not</strong> be a client that the Adapter is
405
+ keeping state for. This must be a completely separate client instance,
406
+ otherwise the client may deadlock while updating the store.</p>
407
+ <p>The client must be connected and logged in to the instance that
408
+ contains the SOW topic, using the message type defined for the topic.</p>
409
+ </div>
410
+ </div>
411
+ <div class="section" id="capacity-planning-and-store-sizing">
412
+ <h3>Capacity Planning and Store Sizing<a class="headerlink" href="#capacity-planning-and-store-sizing" title="Permalink to this headline">¶</a></h3>
413
+ <p>When an application uses a file-backed store, it is important to make
414
+ sure that there is enough space available on the file system to
415
+ be able to manage the store.</p>
416
+ <p>For logged bookmark stores, an application needs to keep a bookmark record for
417
+ each message received, each message discarded, and the persisted
418
+ acknowledgments delivered by the server approximately once a second.
419
+ Each bookmark entry consumes roughly 70 bytes of storage <em>plus</em> the length
420
+ of the subscription ID for the subscription receiving the message. The logged
421
+ bookmark store retains entries until an application explicitly calls
422
+ <code class="docutils literal"><span class="pre">prune()</span></code>. The capacity needed for a logged bookmark store will
423
+ depend on the strategy that the application uses for pruning the file.</p>
424
+ <p>For a file-backed publish store, the application needs to be able to
425
+ store published messages until the AMPS server that the publisher is
426
+ connected to acknowledges those messages as persisted. The volume of
427
+ messages that needs to be stored depends on the failover policy for
428
+ the server &#8211; that is, the maximum amount of time that the server will
429
+ allow a downstream instance to fail to acknowledge a message before
430
+ the server downgrades that connection to <code class="docutils literal"><span class="pre">async</span></code> acknowledgment.
431
+ By default, AMPS does not downgrade connections: this policy must
432
+ be set explicitly using the AMPS actions. As an example, if the
433
+ server is configured to downgrade connections that are more than
434
+ 120 seconds behind, then &#8211; for disaster recovery &#8211; the application
435
+ must have the capacity to store 120 seconds of published messages
436
+ at peak publishing load. However, unlike the logged bookmark store, a
437
+ file-backed publish store removes messages from the store and reuses
438
+ the space once AMPS has acknowledged the message.</p>
439
+ </div>
440
+ </div>
441
+ <div class="section" id="connections-and-the-server-chooser">
442
+ <h2>Connections and the Server Chooser<a class="headerlink" href="#connections-and-the-server-chooser" title="Permalink to this headline">¶</a></h2>
443
+ <p id="index-2">Unlike <code class="docutils literal"><span class="pre">Client</span></code>, the <code class="docutils literal"><span class="pre">HAClient</span></code> attempts to keep itself connected to
444
+ an AMPS instance at all times, by automatically reconnecting or failing
445
+ over when it detects that the client is disconnected. When you are using
446
+ the <code class="docutils literal"><span class="pre">Client</span></code> directly, your disconnect handler usually takes care of
447
+ reconnection. <code class="docutils literal"><span class="pre">HAClient</span></code>, on the other hand, provides a disconnect
448
+ handler that automatically reconnects to the current server or to the
449
+ next available server.</p>
450
+ <p>To inform the <code class="docutils literal"><span class="pre">HAClient</span></code> of the addresses of the AMPS instances in
451
+ your system, you pass a <code class="docutils literal"><span class="pre">ServerChooser</span></code> instance to the <code class="docutils literal"><span class="pre">HAClient</span></code>.
452
+ <code class="docutils literal"><span class="pre">ServerChooser</span></code> acts as a smart enumerator over the servers available:
453
+ <code class="docutils literal"><span class="pre">HAClient</span></code> calls <code class="docutils literal"><span class="pre">ServerChooser</span></code> methods to inquire about what
454
+ server should be connected, and calls methods to indicate whether a
455
+ given server succeeded or failed.</p>
456
+ <p id="index-3">The AMPS Python client provides a simple implementation of
457
+ <code class="docutils literal"><span class="pre">ServerChooser</span></code>, called <code class="docutils literal"><span class="pre">DefaultServerChooser</span></code>, that provides very
458
+ simple logic for reconnecting. This server chooser is most suitable for
459
+ basic testing, or in cases where an application should simply rotate
460
+ through a list of servers. For most applications, you implement the
461
+ <code class="docutils literal"><span class="pre">ServerChooser</span></code> interface yourself for more advanced logic, such as
462
+ choosing a backup server based on your network topology, or limiting the
463
+ number of times your application should try to reconnect to a given
464
+ address.</p>
465
+ <p>To connect to AMPS, you provide a <code class="docutils literal"><span class="pre">ServerChooser</span></code> to <code class="docutils literal"><span class="pre">HAClient</span></code> and
466
+ then call <code class="docutils literal"><span class="pre">connect_and_logon()</span></code> to create the first connection:</p>
467
+ <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="n">memoryClient</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;myClient&quot;</span><span class="p">)</span>
468
+
469
+ <span class="c1"># primary.amps.xyz.com is the primary AMPS instance, and</span>
470
+ <span class="c1"># secondary.amps.xyz.com is the secondary</span>
471
+ <span class="n">chooser</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">DefaultServerChooser</span><span class="p">()</span>
472
+ <span class="n">chooser</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;tcp://primary.amps.xyz.com:12345/fix&quot;</span><span class="p">)</span>
473
+ <span class="n">chooser</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;tcp://secondary.amps.xyz.com:12345/fix&quot;</span><span class="p">)</span>
474
+ <span class="n">memoryClient</span><span class="o">.</span><span class="n">set_server_chooser</span><span class="p">(</span><span class="n">chooser</span><span class="p">)</span>
475
+ <span class="n">memoryClient</span><span class="o">.</span><span class="n">connect_and_logon</span><span class="p">()</span>
476
+ <span class="o">...</span>
477
+ <span class="n">myClient</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span>
478
+ </pre></div>
479
+ </div>
480
+ <p><strong>Example 9.2:</strong> <em>Multiple HAClient creation example</em></p>
481
+ <p id="index-4">Similar to <code class="docutils literal"><span class="pre">Client</span></code>, <code class="docutils literal"><span class="pre">HAClient</span></code> remains connected to the server until
482
+ <code class="docutils literal"><span class="pre">disconnect()</span></code> is called. Unlike <code class="docutils literal"><span class="pre">Client</span></code>, <code class="docutils literal"><span class="pre">HAClient</span></code>
483
+ automatically attempts to reconnect to your server if it detects a
484
+ disconnect and if that server cannot be connected, fails over to the
485
+ next server provided by the <code class="docutils literal"><span class="pre">ServerChooser</span></code>. In this example, the call
486
+ to <code class="docutils literal"><span class="pre">connect_and_logon()</span></code> attempts to connect and login to
487
+ <code class="docutils literal"><span class="pre">primary.amps.xyz.com</span></code>, and returns if that is successful. If it
488
+ cannot connect, it tries <code class="docutils literal"><span class="pre">secondary.amps.xyz.com</span></code>, and continues
489
+ trying servers from the <code class="docutils literal"><span class="pre">ServerChooser</span></code> until a connection is
490
+ established. Likewise, if it detects a disconnection while the client is
491
+ in use, then <code class="docutils literal"><span class="pre">HAClient</span></code> attempts to reconnect to the server with which
492
+ it was most recently connected; if that is not possible, then it moves
493
+ on to the next server provided by the <code class="docutils literal"><span class="pre">ServerChooser</span></code>.</p>
494
+ <p>The default <code class="docutils literal"><span class="pre">ServerChooser</span></code> simply provides the next URL in the
495
+ sequence. This strategy works for many applications. If you need a
496
+ different strategy, you can implement your own logic for failover by
497
+ creating a class derived from <code class="docutils literal"><span class="pre">ServerChooser</span></code>.</p>
498
+ <div class="section" id="setting-a-reconnect-delay-and-timeout">
499
+ <h3>Setting a Reconnect Delay and Timeout<a class="headerlink" href="#setting-a-reconnect-delay-and-timeout" title="Permalink to this headline">¶</a></h3>
500
+ <p id="index-5">You can control the amount of time between reconnection attempts and
501
+ set a total amount of time for the <code class="docutils literal"><span class="pre">HAClient</span></code> to attempt to reconnect.</p>
502
+ <p>The AMPS Python client includes a method for setting a delay strategy on
503
+ a client, <code class="docutils literal"><span class="pre">set_reconnect_delay_strategy</span></code>. This method accepts an
504
+ instance of any type that provides the methods
505
+ <code class="docutils literal"><span class="pre">get_connect_wait_duration</span></code> and <code class="docutils literal"><span class="pre">reset</span></code>, as described in the API
506
+ documentation.</p>
507
+ <p>While you can easily implement your own delay strategy, the client also
508
+ provides two delay strategies:</p>
509
+ <ul class="simple">
510
+ <li><code class="docutils literal"><span class="pre">FixedDelayStrategy</span></code> provides the same delay each time the
511
+ <code class="docutils literal"><span class="pre">HAClient</span></code> tries to reconnect.</li>
512
+ <li><code class="docutils literal"><span class="pre">ExponentialDelayStrategy</span></code> provides an exponential backoff until a
513
+ connection attempt succeeds.</li>
514
+ </ul>
515
+ <p>To use either of these classes, you simply create an instance, set the
516
+ appropriate parameters, and install that instance as the delay strategy
517
+ for the <code class="docutils literal"><span class="pre">HAClient</span></code>. For example, the following code sets up a
518
+ reconnect delay that starts at 200ms and increases the delay by 1.5
519
+ times after each failure. The strategy allows a maximum delay between
520
+ connection attempts of 5 seconds, and will not retry longer than 60
521
+ seconds.</p>
522
+ <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="n">theClient</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;myClient&quot;</span><span class="p">)</span>
523
+
524
+ <span class="n">theClient</span><span class="o">.</span><span class="n">set_reconnect_delay_strategy</span><span class="p">(</span> \
525
+ <span class="n">AMPS</span><span class="o">.</span><span class="n">ExponentialDelayStrategy</span><span class="p">(</span> \
526
+ <span class="n">initial_delay</span><span class="o">=</span><span class="mi">200</span><span class="p">,</span> \
527
+ <span class="n">backoff_exponent</span><span class="o">=</span><span class="mf">1.5</span><span class="p">,</span> \
528
+ <span class="n">maximum_delay</span><span class="o">=</span><span class="mi">5000</span><span class="p">,</span> \
529
+ <span class="n">maximum_retry_time</span><span class="o">=</span><span class="mi">60000</span><span class="p">)</span> \
530
+ <span class="p">)</span>
531
+ </pre></div>
532
+ </div>
533
+ </div>
534
+ <div class="section" id="implementing-a-server-chooser">
535
+ <h3>Implementing a Server Chooser<a class="headerlink" href="#implementing-a-server-chooser" title="Permalink to this headline">¶</a></h3>
536
+ <p id="index-6">As described above, you provide the <code class="docutils literal"><span class="pre">HAClient</span></code>
537
+ with connection strings to one or more AMPS servers using a
538
+ <code class="docutils literal"><span class="pre">ServerChooser</span></code>. The purpose of a <code class="docutils literal"><span class="pre">ServerChooser</span></code> is to provide
539
+ information to the <code class="docutils literal"><span class="pre">HAClient</span></code>. A <code class="docutils literal"><span class="pre">ServerChooser</span></code> does not manage the
540
+ reconnection process, and should not call methods on the <code class="docutils literal"><span class="pre">HAClient</span></code>.</p>
541
+ <p>A <code class="docutils literal"><span class="pre">ServerChooser</span></code> has two required responsibilities to the
542
+ <code class="docutils literal"><span class="pre">HAClient</span></code>:</p>
543
+ <ul>
544
+ <li><p class="first">Tells the <code class="docutils literal"><span class="pre">HAClient</span></code> the connection string for the server to
545
+ connect to. If there are no servers, or the <code class="docutils literal"><span class="pre">ServerChooser</span></code> wants
546
+ the connection to fail, the <code class="docutils literal"><span class="pre">ServerChooser</span></code> returns an empty
547
+ string.</p>
548
+ <p>To provide this information, the <code class="docutils literal"><span class="pre">ServerChooser</span></code> implements the
549
+ <code class="docutils literal"><span class="pre">get_current_uri()</span></code> method.</p>
550
+ </li>
551
+ <li><p class="first">Provides an <code class="docutils literal"><span class="pre">Authenticator</span></code> for the current connection string. This
552
+ is especially important for installations where different servers
553
+ require different credentials or authentication tokens must be reset
554
+ after each connection attempt.</p>
555
+ <p>To provide the authenticator, the <code class="docutils literal"><span class="pre">ServerChooser</span></code> implements the
556
+ <code class="docutils literal"><span class="pre">get_current_authenticator()</span></code> method.</p>
557
+ </li>
558
+ </ul>
559
+ <p>The <code class="docutils literal"><span class="pre">HAClient</span></code> calls the <code class="docutils literal"><span class="pre">get_current_uri()</span></code> and
560
+ <code class="docutils literal"><span class="pre">get_current_authenticator()</span></code> methods each time it needs to make a
561
+ connection.</p>
562
+ <p>Each time a connection succeeds, the <code class="docutils literal"><span class="pre">HAClient</span></code> calls the
563
+ <code class="docutils literal"><span class="pre">report_success()</span></code> method of the <code class="docutils literal"><span class="pre">ServerChooser</span></code>. Each time a
564
+ connection fails, the <code class="docutils literal"><span class="pre">HAClient</span></code> calls the <code class="docutils literal"><span class="pre">report_failure()</span></code> method
565
+ of the <code class="docutils literal"><span class="pre">ServerChooser</span></code>. The <code class="docutils literal"><span class="pre">HAClient</span></code> does not require the
566
+ <code class="docutils literal"><span class="pre">ServerChooser</span></code> to take any particular action when it calls these
567
+ methods. These methods are provided for the <code class="docutils literal"><span class="pre">HAClient</span></code> to do internal
568
+ maintenance, logging, or record keeping. For example, an <code class="docutils literal"><span class="pre">HAClient</span></code>
569
+ might keep a list of available URIs with a current failure count, and
570
+ skip over URIs that have failed more than 5 consecutive times until all
571
+ URIs in the list have failed more than 5 consecutive times.</p>
572
+ <p>When the <code class="docutils literal"><span class="pre">ServerChooser</span></code> returns an empty string from
573
+ <code class="docutils literal"><span class="pre">get_current_uri()</span></code>, indicating that no servers are available for
574
+ connection, the <code class="docutils literal"><span class="pre">HAClient</span></code> calls the <code class="docutils literal"><span class="pre">get_error()</span></code> method on the
575
+ <code class="docutils literal"><span class="pre">ServerChooser</span></code>, if one is provided, and includes the string returned
576
+ by <code class="docutils literal"><span class="pre">get_error()</span></code> in the generated exception.</p>
577
+ </div>
578
+ </div>
579
+ <div class="section" id="heartbeats-and-failure-detection">
580
+ <h2>Heartbeats and Failure Detection<a class="headerlink" href="#heartbeats-and-failure-detection" title="Permalink to this headline">¶</a></h2>
581
+ <p id="index-7">Use of the <code class="docutils literal"><span class="pre">HAClient</span></code> allows your application to quickly recover from
582
+ detected connection failures. By default, connection failure detection
583
+ occurs when AMPS receives an operating system error on the connection.
584
+ This system may result in unpredictable delays in detecting a connection
585
+ failure on the client, particularly when failures in network routing
586
+ hardware occur, and the client primarily acts as a subscriber.</p>
587
+ <p>The heartbeat feature of the AMPS client allows connection failure to be
588
+ detected quickly. Heartbeats ensure that regular messages are sent
589
+ between the AMPS client and server on a predictable schedule. The AMPS
590
+ client and server both assume disconnection has occurred if these
591
+ regular heartbeats cease, ensuring disconnection is detected in a timely
592
+ manner. To use the heartbeat feature, call the <code class="docutils literal"><span class="pre">set_heartbeat</span></code> method on
593
+ <code class="docutils literal"><span class="pre">Client</span></code> or <code class="docutils literal"><span class="pre">HAClient</span></code>:</p>
594
+ <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="n">memoryClient</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;importantStuff&quot;</span><span class="p">)</span>
595
+ <span class="o">...</span>
596
+ <span class="n">memoryClient</span><span class="o">.</span><span class="n">set_heartbeat</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
597
+ <span class="n">memoryClient</span><span class="o">.</span><span class="n">connect_and_logon</span><span class="p">()</span>
598
+ <span class="o">...</span>
599
+ </pre></div>
600
+ </div>
601
+ <p><strong>Example 9.3:</strong> <em>Heartbeat example</em></p>
602
+ <p id="index-8">Method <code class="docutils literal"><span class="pre">set_heartbeat</span></code> takes one parameter: the heartbeat interval. The
603
+ heartbeat interval specifies the periodicity of heartbeat messages sent
604
+ by the server: the value <code class="docutils literal"><span class="pre">3</span></code> indicates messages are sent on a
605
+ three-second interval. If the client receives no messages in a
606
+ six-second window (two heartbeat intervals), the connection is assumed
607
+ to be dead, and the <code class="docutils literal"><span class="pre">HAClient</span></code> attempts reconnection. An additional
608
+ variant of <code class="docutils literal"><span class="pre">set_heartbeat</span></code> allows the idle period to be set to a value
609
+ other than two heartbeat intervals. (The server, however, will always consider
610
+ a connection to be closed after two heartbeat intervals without any traffic.)</p>
611
+ <p>Notice that, for <code class="docutils literal"><span class="pre">HAClient</span></code>, <code class="docutils literal"><span class="pre">setHeartbeat</span></code> must be called <em>before</em>
612
+ the client is connected. For <code class="docutils literal"><span class="pre">Client</span></code>, <code class="docutils literal"><span class="pre">setHeartbeat</span></code> must be called
613
+ <em>after</em> the client is connected.</p>
614
+ <div class="admonition caution">
615
+ <p class="first admonition-title">Caution</p>
616
+ <p class="last">Heartbeats are serviced on the receive thread created by the AMPS
617
+ client. Your application must not block the receive thread for longer
618
+ than the heartbeat interval or the application is subject to being
619
+ disconnected.</p>
620
+ </div>
621
+ </div>
622
+ <div class="section" id="considerations-for-publishers">
623
+ <h2>Considerations for Publishers<a class="headerlink" href="#considerations-for-publishers" title="Permalink to this headline">¶</a></h2>
624
+ <p id="index-9">Publishing with an <code class="docutils literal"><span class="pre">HAClient</span></code> is nearly identical to regular
625
+ publishing; you simply call the <code class="docutils literal"><span class="pre">publish()</span></code> method with your message&#8217;s
626
+ topic and data. The AMPS client sends the message to AMPS, and then
627
+ returns from the <code class="docutils literal"><span class="pre">publish()</span></code> call. For maximum performance, the client
628
+ does not wait for the AMPS server to acknowledge that the message has
629
+ been received.</p>
630
+ <p>When an <code class="docutils literal"><span class="pre">HAClient</span></code> sets a publish store, the publish store retains a
631
+ copy of each outgoing message and requests that AMPS acknowledge that
632
+ the message has been persisted. The AMPS server acknowledges messages
633
+ back to the publisher. Acknowledgments can be delivered for multiple
634
+ messages at periodic intervals (for topics recorded in the transaction
635
+ log) or after each message (for topics that are not recorded in the
636
+ transaction log). When an acknowledgment for a message is received, the
637
+ <code class="docutils literal"><span class="pre">HAClient</span></code> removes that message from the bookmark store. When a connection
638
+ to a server is made, the <code class="docutils literal"><span class="pre">HAClient</span></code> automatically determines which
639
+ messages from the publish store (if any) the server has not processed,
640
+ and replays those messages to the server once the connection is
641
+ established.</p>
642
+ <p>For reliable publishers, the application must choose how best to handle
643
+ application shutdown. For example, it is possible for the network to
644
+ fail immediately after the publisher sends the message, while the
645
+ message is still in transit. In this case, the publisher has sent the
646
+ message, but the server has not processed it and acknowledged it. During
647
+ normal operation, the <code class="docutils literal"><span class="pre">HAClient</span></code> will automatically connect and retry
648
+ the message. On shutdown, however, the application must decide whether
649
+ to wait for messages to be acknowledged, or whether to exit.</p>
650
+ <p>Publish store implementations provide an <code class="docutils literal"><span class="pre">unpersisted_count()</span></code> method
651
+ that reports the number of messages that have not yet been acknowledged
652
+ by the AMPS server. When the <code class="docutils literal"><span class="pre">unpersisted_count()</span></code> reaches <code class="docutils literal"><span class="pre">0</span></code>,
653
+ there are no unpersisted messages in the local publish store.</p>
654
+ <p>For the highest level of safety, an application can wait until the
655
+ <code class="docutils literal"><span class="pre">unpersisted_count()</span></code> reaches <code class="docutils literal"><span class="pre">0</span></code>, which indicates that all of the
656
+ messages have been persisted to the instance that the application is
657
+ connected to, and the synchronous replication destinations configured
658
+ for that instance. When a synchronous replication destination goes
659
+ offline, this approach will cause the publisher to wait to exit until
660
+ the destination comes back online or until the destination is downgraded
661
+ to asynchronous replication.</p>
662
+ <p>For applications that are shut down periodically for short periods of
663
+ time (for example, applications that are only offline during a weekly
664
+ maintenance window), another approach is to use the <code class="docutils literal"><span class="pre">publish_flush()</span></code>
665
+ method to ensure that messages are delivered to AMPS, and then rely on
666
+ the connection logic to replay messages as necessary when the
667
+ application restarts.</p>
668
+ <p>For example, the following code flushes messages to AMPS, then warns if
669
+ not all messages have been acknowledged:</p>
670
+ <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="n">client</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span><span class="s2">&quot;ha-publisher&quot;</span><span class="p">,</span>
671
+ <span class="s2">&quot;/mnt/fastDisk/moreImportantMessages.outgoing&quot;</span><span class="p">,</span>
672
+ <span class="s2">&quot;/mnt/fastDisk/moreImportantMessages.incoming&quot;</span><span class="p">)</span>
673
+ <span class="o">...</span>
674
+ <span class="n">client</span><span class="o">.</span><span class="n">connect_and_logon</span><span class="p">()</span>
675
+
676
+ <span class="c1"># Publish messages</span>
677
+ <span class="o">...</span>
678
+
679
+
680
+ <span class="c1"># We think we are done, but the server may not</span>
681
+ <span class="c1"># have received or acknowledged all messages yet.</span>
682
+
683
+ <span class="c1"># Wait until the server has received all messages.</span>
684
+ <span class="c1"># The program could also specify a timeout in this</span>
685
+ <span class="c1"># command to avoid blocking forever if the network</span>
686
+ <span class="c1"># is down or all servers are offline.</span>
687
+
688
+ <span class="n">client</span><span class="o">.</span><span class="n">publish_flush</span><span class="p">()</span>
689
+
690
+ <span class="c1"># Print warning to the console if messages have</span>
691
+ <span class="c1"># been published but not yet acknowledged as</span>
692
+ <span class="c1"># persisted</span>
693
+
694
+ <span class="k">if</span> <span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">get_unpersisted_count</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">):</span>
695
+ <span class="nb">print</span><span class="p">(</span> <span class="s2">&quot;all messages have been published, &quot;</span> \
696
+ <span class="o">+</span> <span class="s2">&quot; but not all have been persisted&quot;</span> <span class="p">)</span>
697
+
698
+ <span class="n">client</span><span class="o">.</span><span class="n">disconnect</span><span class="p">()</span>
699
+ </pre></div>
700
+ </div>
701
+ <p><strong>Example 9.4:</strong> <em>HAPublisher</em></p>
702
+ <p id="index-10">In this example, the client sends each
703
+ message immediately when <code class="docutils literal"><span class="pre">publish()</span></code> is called. If AMPS becomes
704
+ unavailable between the final <code class="docutils literal"><span class="pre">publish()</span></code> and the <code class="docutils literal"><span class="pre">disconnect()</span></code>, or
705
+ one of the servers that the AMPS instance replicates to is offline, the
706
+ client may not have received a persisted acknowledgment for all of the
707
+ published messages. For example, if a message has not yet been persisted
708
+ by all of the servers in the replication fabric that are connected with
709
+ synchronous replication, AMPS will not have acknowledged the message.</p>
710
+ <p>Before shutting down the client, the code does two things:</p>
711
+ <ul class="simple">
712
+ <li>First, the code flushes messages to the server to ensure that all
713
+ messages have been delivered to AMPS.</li>
714
+ <li>Next, the code checks to see if all of the messages in the publish store
715
+ have been acknowledged as persisted by AMPS. If the messages have not
716
+ been acknowledged, they will remain in the publish store file and will
717
+ be published to AMPS, if necessary, the next time the application
718
+ connects. An application may choose to loop until
719
+ <code class="docutils literal"><span class="pre">get_unpersisted_count()</span></code> returns <code class="docutils literal"><span class="pre">0</span></code>, or (as we do in this case)
720
+ simply warn that AMPS has not confirmed that the messages are fully
721
+ persisted. The behavior you choose in your application should be
722
+ consistent with the high-availability guarantees your application needs
723
+ to provide.</li>
724
+ </ul>
725
+ <div class="admonition caution">
726
+ <p class="first admonition-title">Caution</p>
727
+ <p class="last">AMPS uses the name of the <code class="docutils literal"><span class="pre">HAClient</span></code> to determine the
728
+ origin of messages. For the AMPS server to correctly
729
+ identify duplicate messages, each instance of an
730
+ application that publishes messages must use a distinct
731
+ name. That name must be consistent across different runs
732
+ of the application.</p>
733
+ </div>
734
+ <p>If your application crashes or is terminated, some published messages
735
+ may not have been persisted in the AMPS server. If you use the
736
+ file-based store—in other words, if you provide file names for
737
+ persistent storage when you create the <code class="docutils literal"><span class="pre">HAClient</span></code>—the <code class="docutils literal"><span class="pre">HAClient</span></code>
738
+ will recover the messages, and once logged on, will correlate the
739
+ message store to what the AMPS server has received, re-publishing any
740
+ missing messages. This occurs automatically when <code class="docutils literal"><span class="pre">HAClient</span></code> connects,
741
+ without any explicit consideration in your code, other than ensuring
742
+ that the same file name is used to create the <code class="docutils literal"><span class="pre">HAClient</span></code> if recovery
743
+ is desired.</p>
744
+ <div class="admonition warning">
745
+ <p class="first admonition-title">Warning</p>
746
+ <p class="last">AMPS provides persisted acknowledgment messages for
747
+ topics that do not have a transaction log enabled.
748
+ However, the level of durability provided for topics with
749
+ no transaction log is minimal. Learn more about
750
+ transaction logs in the <em>AMPS User Guide</em>.</p>
751
+ </div>
752
+ </div>
753
+ <div class="section" id="detecting-failover-ahead-of-replication">
754
+ <h2>Detecting Failover Ahead of Replication<a class="headerlink" href="#detecting-failover-ahead-of-replication" title="Permalink to this headline">¶</a></h2>
755
+ <p>AMPS replication provides two different acknowledgment modes
756
+ for outgoing replication links from an instance:</p>
757
+ <ul class="simple">
758
+ <li>For a link in <code class="docutils literal"><span class="pre">sync</span></code> acknowledgment mode, a message must
759
+ be successfully acknowledged by the downstream instance of AMPS
760
+ before this instance of AMPS will acknowledge the message.</li>
761
+ <li>For a link in <code class="docutils literal"><span class="pre">async</span></code> acknowledgment mode, this link is
762
+ not considered for acknowledging the message. In this mode,
763
+ the downstream side of the replication link may not have
764
+ received or processed the message at the time that
765
+ the publisher receives an acknowledgment.</li>
766
+ </ul>
767
+ <p>As described in the <em>AMPS User Guide</em>, a publisher must not
768
+ failover from one instance of AMPS to another instance when
769
+ any link between those instances uses <code class="docutils literal"><span class="pre">async</span></code> acknowledgment
770
+ <em>unless</em> replication is certain to have reached that instance.
771
+ (For example, if replication is taking a maximum of 1.2 seconds
772
+ between the instances and the publisher has been disconnected for
773
+ 30 seconds, all messages from that publisher will have been
774
+ replicated).</p>
775
+ <p>To help detect a situation where a publisher may be
776
+ &#8220;jumping ahead&#8221; of messages that it has published, but which
777
+ have not yet been replicated, the AMPS client allows an application
778
+ to consider it to be an error to make a connection to a server
779
+ that has not received messages previously published by the application.</p>
780
+ <p>To enable this behavior, set the <code class="docutils literal"><span class="pre">set_error_on_publish_gap()</span></code> method on
781
+ the <code class="docutils literal"><span class="pre">PublishStore</span></code> that is set for the client.
782
+ When this property is set, the client will consider it to be an
783
+ error to connect to a server that has not received messages
784
+ previously published by the client, and consider the connection
785
+ to have failed.</p>
786
+ <p>Notice that an application that uses this approach may need to
787
+ handle situations where no server has received the message, particularly
788
+ if the replication configuration uses automated replication downgrade.</p>
789
+ </div>
790
+ <div class="section" id="considerations-for-subscribers">
791
+ <h2>Considerations for Subscribers<a class="headerlink" href="#considerations-for-subscribers" title="Permalink to this headline">¶</a></h2>
792
+ <p><code class="docutils literal"><span class="pre">HAClient</span></code> provides two important features for applications that
793
+ subscribe to one or more topics: re-subscription, and a bookmark store
794
+ to track the correct point at which to resume a bookmark subscription.</p>
795
+ <div class="section" id="resubscription-with-asynchronous-message-processing">
796
+ <h3>Resubscription with Asynchronous Message Processing<a class="headerlink" href="#resubscription-with-asynchronous-message-processing" title="Permalink to this headline">¶</a></h3>
797
+ <p>Any asynchronous subscription placed using an <code class="docutils literal"><span class="pre">HAClient</span></code> is
798
+ automatically reinstated after a disconnect or a failover. These
799
+ subscriptions are placed in an in-memory <code class="docutils literal"><span class="pre">SubscriptionManager</span></code>, which
800
+ is created automatically when the <code class="docutils literal"><span class="pre">HAClient</span></code> is instantiated.</p>
801
+ <p>When a re-subscription occurs, the AMPS Python client re-executes the
802
+ command as originally submitted, including the original topic, options,
803
+ and so on. AMPS sends the subscriber any messages for the specified
804
+ topic (or topic expression) that are published after the subscription is
805
+ placed. For a <code class="docutils literal"><span class="pre">sow_and_subscribe</span></code> command, this means that the client
806
+ re-issues the full command, including the SOW query as well as the
807
+ subscription.</p>
808
+ </div>
809
+ <div class="section" id="resubscription-with-synchronous-message-processing">
810
+ <h3>Resubscription with Synchronous Message Processing<a class="headerlink" href="#resubscription-with-synchronous-message-processing" title="Permalink to this headline">¶</a></h3>
811
+ <p>The <code class="docutils literal"><span class="pre">HAClient</span></code> (starting with the AMPS Python client version 4.3.1.1)
812
+ does not track synchronous message processing subscriptions in the
813
+ <code class="docutils literal"><span class="pre">SubscriptionManager</span></code>. The reason for this is to preserve the iterator
814
+ semantics. That is, once the <code class="docutils literal"><span class="pre">MessageStream</span></code> indicates that there are
815
+ no more elements in the stream, it does not suddenly produce more
816
+ elements.</p>
817
+ <p>To re-subscribe when the <code class="docutils literal"><span class="pre">HAClient</span></code> fails over, you can simply re-issue
818
+ the subscription. For example, the snippet below re-issues the subscribe
819
+ command when the message stream ends:</p>
820
+ <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="k">while</span> <span class="n">still_need_to_process</span><span class="p">:</span>
821
+ <span class="c1"># Exiting the for loop is the end of stream.</span>
822
+ <span class="c1"># For a subscribe, this likely means that the</span>
823
+ <span class="c1"># client has disconnected.</span>
824
+ <span class="k">try</span><span class="p">:</span>
825
+ <span class="k">for</span> <span class="n">message</span> <span class="ow">in</span> <span class="n">client</span><span class="o">.</span><span class="n">subscribe</span><span class="p">(</span><span class="s2">&quot;messages&quot;</span><span class="p">):</span>
826
+ <span class="c1"># process messages here</span>
827
+ <span class="c1"># check condition on still_need_to_process</span>
828
+ <span class="k">if</span> <span class="n">still_need_to_process</span> <span class="o">==</span> <span class="kc">False</span><span class="p">:</span> <span class="k">break</span>
829
+ <span class="k">except</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">DisconnectedException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
830
+ <span class="k">pass</span>
831
+ </pre></div>
832
+ </div>
833
+ <p><strong>Example 9.5:</strong> <em>Resubscription</em></p>
834
+ </div>
835
+ <div class="section" id="bookmark-stores">
836
+ <h3>Bookmark Stores<a class="headerlink" href="#bookmark-stores" title="Permalink to this headline">¶</a></h3>
837
+ <p>In cases where it is critical not to miss a single message, it is
838
+ important to be able to resume a subscription at the exact point that a
839
+ failure occurred. In this case, simply recreating a subscription isn&#8217;t
840
+ sufficient. Even though the subscription is recreated, the subscriber
841
+ may have been disconnected at precisely the wrong time and will not see
842
+ the message.</p>
843
+ <p>To ensure delivery of every message from a topic or set of topics, the
844
+ AMPS <code class="docutils literal"><span class="pre">HAClient</span></code> includes a <code class="docutils literal"><span class="pre">BookmarkStore</span></code> that, combined with the
845
+ bookmark subscription and transaction log functionality in the AMPS
846
+ server, ensures that clients receive any messages that might have been
847
+ missed. The client stores the bookmark associated with each message
848
+ received, and tracks whether the application has processed that message;
849
+ if a disconnect occurs, the client uses the <code class="docutils literal"><span class="pre">BookmarkStore</span></code> to determine
850
+ the correct resubscription point, and sends that bookmark to AMPS when
851
+ it re-subscribes. AMPS then replays messages from its transaction log
852
+ from the point after the specified bookmark, thus ensuring the client is
853
+ completely up-to-date.</p>
854
+ <p><code class="docutils literal"><span class="pre">HAClient</span></code> helps you to take advantage of this bookmark mechanism
855
+ through the <code class="docutils literal"><span class="pre">BookmarkStore</span></code> interface and <code class="docutils literal"><span class="pre">bookmarkSubscribe()</span></code>
856
+ method on <code class="docutils literal"><span class="pre">Client</span></code>. When you create subscriptions with
857
+ <code class="docutils literal"><span class="pre">bookmarkSubscribe()</span></code>, whenever a disconnection or failover occurs,
858
+ your application automatically re-subscribes to the message after the
859
+ last message it processed. <code class="docutils literal"><span class="pre">HAClients</span></code> created by
860
+ <code class="docutils literal"><span class="pre">createFileBacked()</span></code> additionally store these bookmarks on disk, so
861
+ that the application can restart with the appropriate message if the
862
+ client application fails and restarts.</p>
863
+ <p>To take advantage of bookmark subscriptions, do the following:</p>
864
+ <ul class="simple">
865
+ <li>Ensure the topic(s) to be subscribed to are included in a transaction
866
+ log. See the <em>AMPS User Guide</em> for information on how to specify the
867
+ contents of a transaction log.</li>
868
+ </ul>
869
+ <blockquote>
870
+ <div></div></blockquote>
871
+ <ul class="simple" id="index-11">
872
+ <li>Use <code class="docutils literal"><span class="pre">bookmark_subscribe()</span></code> instead of <code class="docutils literal"><span class="pre">subscribe()</span></code> when
873
+ creating a <code class="docutils literal"><span class="pre">subscription()</span></code> and decide how the application will
874
+ manage subscription identifiers (SubIds). If you are using a
875
+ <code class="docutils literal"><span class="pre">Command</span></code> object, you can simply set the bookmark on that object.</li>
876
+ </ul>
877
+ <blockquote>
878
+ <div></div></blockquote>
879
+ <ul class="simple" id="index-12">
880
+ <li>Use the <code class="docutils literal"><span class="pre">discard()</span></code> method in message handlers to indicate
881
+ when a message has been fully processed by the application,
882
+ that is, when the application does not need to receive
883
+ the message again if the application fails over.</li>
884
+ </ul>
885
+ <p>The following example creates a bookmark subscription against a
886
+ transaction-logged topic and fully processes each message as soon as it
887
+ is delivered:</p>
888
+ <div class="code python highlight-default"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">MessagePrinter</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
889
+ <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
890
+ <span class="bp">self</span><span class="o">.</span><span class="n">_client</span> <span class="o">=</span> <span class="n">client</span>
891
+
892
+ <span class="k">def</span> <span class="fm">__call__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
893
+ <span class="nb">print</span> <span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">get_data</span><span class="p">())</span>
894
+ <span class="bp">self</span><span class="o">.</span><span class="n">_client</span><span class="o">.</span><span class="n">discard</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
895
+
896
+
897
+ <span class="o">...</span>
898
+
899
+ <span class="n">client</span> <span class="o">=</span> <span class="n">AMPS</span><span class="o">.</span><span class="n">HAClient</span><span class="p">(</span>
900
+ <span class="s2">&quot;aClient&quot;</span><span class="p">,</span>
901
+ <span class="s2">&quot;/logs/aClient.publishLog&quot;</span><span class="p">,</span>
902
+ <span class="s2">&quot;/logs/aClient.subscribeLog&quot;</span><span class="p">)</span>
903
+
904
+ <span class="c1"># Create ServerChooser, populate chooser, connect client</span>
905
+ <span class="o">...</span>
906
+
907
+ <span class="n">client</span><span class="o">.</span><span class="n">execute_async</span><span class="p">(</span> \
908
+ <span class="n">AMPS</span><span class="o">.</span><span class="n">Command</span><span class="p">(</span><span class="s2">&quot;subscribe&quot;</span><span class="p">)</span> \
909
+ <span class="o">.</span><span class="n">set_topic</span><span class="p">(</span><span class="s2">&quot;myTopic&quot;</span><span class="p">)</span> \
910
+ <span class="o">.</span><span class="n">set_bookmark</span><span class="p">(</span><span class="n">AMPS</span><span class="o">.</span><span class="n">Client</span><span class="o">.</span><span class="n">Bookmarks</span><span class="o">.</span><span class="n">MOST_RECENT</span><span class="p">)</span> \
911
+ <span class="o">.</span><span class="n">set_sub_id</span><span class="p">(</span><span class="s2">&quot;MySubID&quot;</span><span class="p">),</span> \
912
+ <span class="n">MessagePrinter</span><span class="p">(</span><span class="n">client</span><span class="p">))</span>
913
+ </pre></div>
914
+ </div>
915
+ <p><strong>Example 9.6:</strong> <em>HAClient subscription</em></p>
916
+ <p>In this example, the client is a file-backed client, meaning that
917
+ arriving bookmarks will be stored in a file (<code class="docutils literal"><span class="pre">aClient.subscribeLog</span></code>).
918
+ Storing these bookmarks in a file allows the application to restart the
919
+ subscription from the last message processed, in the event of either
920
+ server or client failure.</p>
921
+ <div class="admonition tip">
922
+ <p class="first admonition-title">Tip</p>
923
+ <p class="last">For optimum performance, it is critical to discard every
924
+ message once its processing is complete. If a message is
925
+ never discarded, it remains in the bookmark store. During
926
+ re-subscription, <code class="docutils literal"><span class="pre">HAClient</span></code> always restarts the
927
+ bookmark subscription with the oldest undiscarded
928
+ message, and then filters out any more recent messages
929
+ that have been discarded. If an old message remains in
930
+ the store, but is no longer important for the
931
+ application’s functioning, then the client and the AMPS
932
+ server will incur unnecessary network, disk and CPU
933
+ activity.</p>
934
+ </div>
935
+ <p>The fourth parameter, <code class="docutils literal"><span class="pre">sub_id</span></code>, specifies an identifier to be used for
936
+ this subscription. Passing <code class="docutils literal"><span class="pre">None</span></code> causes <code class="docutils literal"><span class="pre">HAClient</span></code> to generate one
937
+ and return it, like most other <code class="docutils literal"><span class="pre">Client</span></code> functions. However, if you
938
+ wish to resume a subscription from a previous point after the
939
+ application has terminated and restarted, the application must pass the
940
+ same subscription ID as during its previous run. Passing a different
941
+ subscription ID bypasses any recovery mechanisms, creating an entirely
942
+ new subscription. When you use an existing subscription ID, the
943
+ <code class="docutils literal"><span class="pre">HAClient</span></code> locates the last-used bookmark for that subscription in the
944
+ local store, and attempts to re-subscribe from that point.</p>
945
+ <p>Below are the different bookmark types that can be used to enable different
946
+ recovery strategies for an application:</p>
947
+ <ul class="simple" id="index-13">
948
+ <li><code class="docutils literal"><span class="pre">Client.Bookmarks.NOW</span></code> specifies that the subscription
949
+ should begin from the moment the server receives the subscription
950
+ request. This results in the same messages being delivered as if you
951
+ had invoked <code class="docutils literal"><span class="pre">subscribe()</span></code> instead, except that the messages will be
952
+ accompanied by bookmarks. This is also the behavior that results if
953
+ you supply an invalid bookmark.</li>
954
+ </ul>
955
+ <ul class="simple" id="index-14">
956
+ <li><code class="docutils literal"><span class="pre">Client.Bookmarks.EPOCH</span></code>
957
+ specifies that the subscription should begin from the beginning of
958
+ the AMPS transaction log (that is, the first entry in the oldest
959
+ journal file for the transaction log).</li>
960
+ </ul>
961
+ <blockquote>
962
+ <div></div></blockquote>
963
+ <ul class="simple" id="index-15">
964
+ <li><code class="docutils literal"><span class="pre">Client.Bookmarks.MOST_RECENT</span></code> specifies that the
965
+ subscription should begin from the last-used message in the
966
+ associated <code class="docutils literal"><span class="pre">BookmarkStore</span></code>. Alternatively, if this subscription has
967
+ not been seen before, it instructs the subscription to begin with
968
+ <code class="docutils literal"><span class="pre">EPOCH</span></code>. This is the most common value for this parameter and is
969
+ the value used in the preceding example. By using <code class="docutils literal"><span class="pre">MOST_RECENT</span></code>,
970
+ the application automatically resumes from wherever the subscription
971
+ left off, taking into account any messages that have already been
972
+ processed and discarded.</li>
973
+ </ul>
974
+ <p>When the <code class="docutils literal"><span class="pre">HAClient</span></code> re-subscribes after a disconnection and
975
+ reconnection, it always uses <code class="docutils literal"><span class="pre">MOST_RECENT</span></code>, ensuring that the
976
+ continued subscription always begins from the last message used before
977
+ the disconnect, so that no messages are missed.</p>
978
+ </div>
979
+ </div>
980
+ <div class="section" id="conclusion">
981
+ <h2>Conclusion<a class="headerlink" href="#conclusion" title="Permalink to this headline">¶</a></h2>
982
+ <p>With only a few changes, most AMPS applications can take advantage of
983
+ the <code class="docutils literal"><span class="pre">HAClient</span></code> and associated classes to become more highly-available
984
+ and resilient. Using the <code class="docutils literal"><span class="pre">PublishStore</span></code>, publishers can ensure that
985
+ every message published has actually been persisted by AMPS. Using
986
+ <code class="docutils literal"><span class="pre">BookmarkStore</span></code>, subscribers can make sure that there are no gaps or
987
+ duplicates in the messages received. <code class="docutils literal"><span class="pre">HAClient</span></code> makes both kinds of
988
+ applications more resilient to network and server outages, as well as temporary
989
+ issues. By utilizing the file based <code class="docutils literal"><span class="pre">HAClient</span></code>, clients can recover
990
+ their state after an unexpected termination or crash. Though
991
+ <code class="docutils literal"><span class="pre">HAClient</span></code> provides useful defaults for the <code class="docutils literal"><span class="pre">Store</span></code>,
992
+ <code class="docutils literal"><span class="pre">BookmarkStore</span></code>, and <code class="docutils literal"><span class="pre">ServerChooser</span></code>, you
993
+ can customize any or all of these to the specific needs of your
994
+ application and architecture.</p>
995
+ </div>
996
+ </div>
997
+
998
+
999
+ </div>
1000
+ </div>
1001
+ </div>
1002
+ <div class="clearer"></div>
1003
+ </div>
1004
+ <div class="footer">
1005
+ &copy;2022, 60East Technologies, Inc..
1006
+
1007
+ |
1008
+ Powered by <a href="http://sphinx-doc.org/">Sphinx 1.5.3</a>
1009
+ &amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.10</a>
1010
+
1011
+ </div>
1012
+
1013
+
1014
+
1015
+
1016
+ </body>
1017
+ </html>