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,1628 @@
1
+ ////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // Copyright (c) 2010-2024 60East Technologies Inc., All Rights Reserved.
4
+ //
5
+ // This computer software is owned by 60East Technologies Inc. and is
6
+ // protected by U.S. copyright laws and other laws and by international
7
+ // treaties. This computer software is furnished by 60East Technologies
8
+ // Inc. pursuant to a written license agreement and may be used, copied,
9
+ // transmitted, and stored only in accordance with the terms of such
10
+ // license agreement and with the inclusion of the above copyright notice.
11
+ // This computer software or any other copies thereof may not be provided
12
+ // or otherwise made available to any other person.
13
+ //
14
+ // U.S. Government Restricted Rights. This computer software: (a) was
15
+ // developed at private expense and is in all respects the proprietary
16
+ // information of 60East Technologies Inc.; (b) was not developed with
17
+ // government funds; (c) is a trade secret of 60East Technologies Inc.
18
+ // for all purposes of the Freedom of Information Act; and (d) is a
19
+ // commercial item and thus, pursuant to Section 12.212 of the Federal
20
+ // Acquisition Regulations (FAR) and DFAR Supplement Section 227.7202,
21
+ // Government's use, duplication or disclosure of the computer software
22
+ // is subject to the restrictions set forth by 60East Technologies Inc..
23
+ //
24
+ ////////////////////////////////////////////////////////////////////////////
25
+
26
+ #ifndef _MEMORYBOOKMARKSTORE_H_
27
+ #define _MEMORYBOOKMARKSTORE_H_
28
+
29
+ #include <amps/BookmarkStore.hpp>
30
+ #include <amps/Field.hpp>
31
+ #include <amps/Message.hpp>
32
+ #include <amps/RecoveryPoint.hpp>
33
+ #include <amps/RecoveryPointAdapter.hpp>
34
+ #include <functional>
35
+ #include <map>
36
+ #include <sstream>
37
+ #include <vector>
38
+ #include <stdlib.h>
39
+ #include <assert.h>
40
+
41
+ #define AMPS_MIN_BOOKMARK_LEN 3
42
+ #define AMPS_INITIAL_MEMORY_BOOKMARK_SIZE 16384UL
43
+
44
+ /// \file MemoryBookmarkStore.hpp
45
+ /// \brief Provides AMPS::MemoryBookmarkStore, a bookmark store that holds
46
+ /// bookmarks in memory. This bookmark store protects against connectivity
47
+ /// failures.
48
+
49
+ namespace AMPS
50
+ {
51
+
52
+ ///
53
+ /// A BookmarkStoreImpl implementation that stores bookmarks in memory. This
54
+ /// store protects against connectivity failures. This store does not
55
+ /// persist the bookmark store, so this store cannot be used to resume
56
+ /// subscriptions after application restart.
57
+ class MemoryBookmarkStore : public BookmarkStoreImpl
58
+ {
59
+ protected:
60
+ class Subscription
61
+ {
62
+ public:
63
+ typedef std::map<Message::Field, size_t, Message::Field::FieldHash> RecoveryMap;
64
+ typedef std::map<amps_uint64_t, amps_uint64_t> PublisherMap;
65
+ typedef std::map<Message::Field, size_t, Message::Field::FieldHash>::iterator
66
+ RecoveryIterator;
67
+ typedef std::map<amps_uint64_t, amps_uint64_t>::iterator PublisherIterator;
68
+
69
+ // Start sequence at 1 so that 0 can be used during file subclasses
70
+ // recovery as an indicator that a message wasn't logged because
71
+ // isDiscarded() was true.
72
+ Subscription(MemoryBookmarkStore* store_, const Message::Field& id_)
73
+ : _current(1), _currentBase(0), _least(1), _leastBase(0)
74
+ , _recoveryMin(AMPS_UNSET_INDEX), _recoveryBase(AMPS_UNSET_INDEX)
75
+ , _recoveryMax(AMPS_UNSET_INDEX), _recoveryMaxBase(AMPS_UNSET_INDEX)
76
+ , _entriesLength(AMPS_INITIAL_MEMORY_BOOKMARK_SIZE), _entries(NULL)
77
+ , _store(store_)
78
+ {
79
+ // Need our own memory for the sub id
80
+ _id.deepCopy(id_);
81
+ _store->resize(_id, (char**)&_entries,
82
+ sizeof(Entry)*AMPS_INITIAL_MEMORY_BOOKMARK_SIZE, false);
83
+ setLastPersistedToEpoch();
84
+ }
85
+
86
+ ~Subscription()
87
+ {
88
+ Lock<Mutex> guard(_subLock);
89
+ if (_entries)
90
+ {
91
+ for (size_t i = 0; i < _entriesLength; ++i)
92
+ {
93
+ _entries[i]._val.clear();
94
+ }
95
+ // resize to 0 will free _entries
96
+ _store->resize(_id, (char**)&_entries, 0);
97
+ }
98
+ _id.clear();
99
+ _recent.clear();
100
+ _lastPersisted.clear();
101
+ _recentList.clear();
102
+ _range.clear();
103
+ _recoveryTimestamp.clear();
104
+ }
105
+
106
+ size_t log(const Message::Field& bookmark_)
107
+ {
108
+ if (bookmark_ == AMPS_BOOKMARK_NOW)
109
+ {
110
+ return 0;
111
+ }
112
+ Lock<Mutex> guard(_subLock);
113
+ // Either relog the recovery or log it
114
+ size_t index = recover(bookmark_, true);
115
+ if (index == AMPS_UNSET_INDEX)
116
+ {
117
+ // Check for wrap
118
+ if (_current >= _entriesLength)
119
+ {
120
+ _current = 0;
121
+ _currentBase += _entriesLength;
122
+ }
123
+ // Check for resize
124
+ // If list is too small, double it
125
+ if ((_current == _least && _leastBase < _currentBase) ||
126
+ (_current == _recoveryMin && _recoveryBase < _currentBase))
127
+ {
128
+ if (!_store->resize(_id, (char**)&_entries,
129
+ sizeof(Entry) * _entriesLength * 2))
130
+ {
131
+ //Try again
132
+ return log(bookmark_);
133
+ }
134
+ // Length was doubled
135
+ _entriesLength *= 2;
136
+ }
137
+
138
+ // Add this entry to the end of our list
139
+ /*
140
+ if (bookmark_ == AMPS_BOOKMARK_NOW)
141
+ {
142
+ // Save a now timestamp bookmark
143
+ char* nowTimestamp = new char[AMPS_TIMESTAMP_LEN];
144
+ struct tm timeInfo;
145
+ time_t now;
146
+ time(&now);
147
+ #ifdef _WIN32
148
+ gmtime_s(&timeInfo, &now);
149
+ #else
150
+ gmtime_r(&now, &timeInfo);
151
+ #endif
152
+ strftime(nowTimestamp, AMPS_TIMESTAMP_LEN,
153
+ "%Y%m%dT%H%M%S", &timeInfo);
154
+ nowTimestamp[AMPS_TIMESTAMP_LEN-1] = 'Z';
155
+ _entries[_current]._val.assign(nowTimestamp,
156
+ AMPS_TIMESTAMP_LEN);
157
+ _entries[_current]._active = false;
158
+ index = _current++;
159
+ return index + _currentBase;
160
+ }
161
+ else
162
+ */
163
+ {
164
+ // Is this an attempt at a range?
165
+ if (!BookmarkRange::isRange(bookmark_))
166
+ {
167
+ _entries[_current]._val.deepCopy(bookmark_);
168
+ }
169
+ else
170
+ {
171
+ // Deep copy of the range is saved
172
+ _range.set(bookmark_);
173
+ // Stricter check on range syntax
174
+ if (!_range.isValid())
175
+ {
176
+ throw CommandException("Invalid bookmark range specified.");
177
+ }
178
+ if (!_range.isStartInclusive())
179
+ {
180
+ // Put it in our publishers map
181
+ amps_uint64_t publisher, sequence;
182
+ std::vector<Field> bmList = Field::parseBookmarkList(_range.getStart());
183
+ for (std::vector<Field>::iterator bkmk = bmList.begin(); bkmk != bmList.end(); ++bkmk)
184
+ {
185
+ parseBookmark(*bkmk, publisher, sequence);
186
+ if (publisher != (amps_uint64_t)0)
187
+ {
188
+ // Compare it to our publishers map
189
+ PublisherIterator pub = _publishers.find(publisher);
190
+ if (pub == _publishers.end() || pub->second < sequence)
191
+ {
192
+ _publishers[publisher] = sequence;
193
+ }
194
+ }
195
+ }
196
+ }
197
+ Unlock<Mutex> unlock(_subLock);
198
+ _store->updateAdapter(this);
199
+ // Don't actually log a range
200
+ return 0;
201
+ }
202
+ }
203
+ _entries[_current]._active = true;
204
+ index = _current++;
205
+ }
206
+ return index + _currentBase;
207
+ }
208
+
209
+ bool discard(size_t index_)
210
+ {
211
+ Lock<Mutex> guard(_subLock);
212
+ return _discard(index_);
213
+ }
214
+
215
+ bool discard(const Message::Field& bookmark_)
216
+ {
217
+ // These are discarded when logged or not logged
218
+ if (bookmark_ == AMPS_BOOKMARK_NOW)
219
+ {
220
+ return false;
221
+ }
222
+ Lock<Mutex> guard(_subLock);
223
+ size_t search = _least;
224
+ size_t searchBase = _leastBase;
225
+ size_t searchMax = _current;
226
+ size_t searchMaxBase = _currentBase;
227
+ if (_least + _leastBase == _current + _currentBase)
228
+ {
229
+ if (_recoveryMin != AMPS_UNSET_INDEX)
230
+ {
231
+ search = _recoveryMin;
232
+ searchBase = _recoveryBase;
233
+ searchMax = _recoveryMax;
234
+ searchMaxBase = _recoveryMaxBase;
235
+ }
236
+ else // Store is empty, so nothing to do
237
+ {
238
+ return false;
239
+ }
240
+ }
241
+ assert(searchMax != AMPS_UNSET_INDEX);
242
+ assert(searchMaxBase != AMPS_UNSET_INDEX);
243
+ assert(search != AMPS_UNSET_INDEX);
244
+ assert(searchBase != AMPS_UNSET_INDEX);
245
+ // Search while we don't find the provided bookmark and we're in valid range
246
+ while (search + searchBase < searchMax + searchMaxBase)
247
+ {
248
+ if (_entries[search]._val == bookmark_)
249
+ {
250
+ return _discard(search + searchBase);
251
+ }
252
+ if (++search == _entriesLength)
253
+ {
254
+ // Least has now loooped around
255
+ searchBase += _entriesLength;
256
+ search = 0;
257
+ }
258
+ }
259
+ return false;
260
+ }
261
+
262
+ // Get sequence number from a Field that is a bookmark
263
+ static void parseBookmark(const Message::Field& field_,
264
+ amps_uint64_t& publisherId_,
265
+ amps_uint64_t& sequenceNumber_)
266
+ {
267
+ Message::Field::parseBookmark(field_, publisherId_, sequenceNumber_);
268
+ }
269
+
270
+ // Check to see if this message is older than the most recent one seen,
271
+ // and if it is, check if it discarded.
272
+ bool isDiscarded(const Message::Field& bookmark_)
273
+ {
274
+ Lock<Mutex> guard(_subLock);
275
+ if (BookmarkRange::isRange(bookmark_))
276
+ {
277
+ return false;
278
+ }
279
+ // Check if we've already recovered this bookmark
280
+ size_t recoveredIdx = recover(bookmark_, false);
281
+
282
+ amps_uint64_t publisher, sequence;
283
+ parseBookmark(bookmark_, publisher, sequence);
284
+ // Compare it to our publishers map
285
+ PublisherIterator pub = _publishers.find(publisher);
286
+ if (pub == _publishers.end() || pub->second < sequence)
287
+ {
288
+ _publishers[publisher] = sequence;
289
+ if (recoveredIdx == AMPS_UNSET_INDEX)
290
+ {
291
+ return false;
292
+ }
293
+ }
294
+ if (recoveredIdx != AMPS_UNSET_INDEX)
295
+ {
296
+ if (!_entries[recoveredIdx]._active)
297
+ {
298
+ _recovered.erase(bookmark_);
299
+ return true;
300
+ }
301
+ return false;
302
+ }
303
+ // During recovery, we don't really care if it's been discarded
304
+ // or not. We just want _publishers updated. No need for the
305
+ // costly linear search.
306
+ if (_store->_recovering)
307
+ {
308
+ return false;
309
+ }
310
+ // During failure and recovery scenarios, we'll see out of order
311
+ // bookmarks arrive, either because (a) we're replaying or (b)
312
+ // a publisher has cut over, and we've cut over to a new server.
313
+ // Scan the list to see if we have a match.
314
+ size_t base = _leastBase;
315
+ for (size_t i = _least; i + base < _current + _currentBase; i++)
316
+ {
317
+ if ( i >= _entriesLength )
318
+ {
319
+ i = 0;
320
+ base = _currentBase;
321
+ }
322
+ if (_entries[i]._val == bookmark_)
323
+ {
324
+ return !_entries[i]._active;
325
+ }
326
+ }
327
+
328
+ return true; // message is totally discarded
329
+ }
330
+
331
+ bool empty(void) const
332
+ {
333
+ if (_least == AMPS_UNSET_INDEX ||
334
+ ((_least + _leastBase) == (_current + _currentBase) &&
335
+ _recoveryMin == AMPS_UNSET_INDEX))
336
+ {
337
+ return true;
338
+ }
339
+ return false;
340
+ }
341
+
342
+ void updateMostRecent()
343
+ {
344
+ Lock<Mutex> guard(_subLock);
345
+ _updateMostRecent();
346
+ }
347
+
348
+ const BookmarkRange& getRange() const
349
+ {
350
+ return _range;
351
+ }
352
+
353
+ Message::Field getMostRecentList(bool usePublishersList_ = true)
354
+ {
355
+ Lock<Mutex> guard(_subLock);
356
+ bool useLastPersisted = !_lastPersisted.empty() &&
357
+ _lastPersisted.len() > 1;
358
+ // when this is called, we'll take a moment to update the list
359
+ // of things recovered,
360
+ // so we don't accidentally log anything we ought not to.
361
+ _updateMostRecent();
362
+ bool useRecent = !_recent.empty() && _recent.len() > 1;
363
+ amps_uint64_t lastPublisher = 0;
364
+ amps_uint64_t lastSeq = 0;
365
+ amps_uint64_t recentPublisher = 0;
366
+ amps_uint64_t recentSeq = 0;
367
+ if (useLastPersisted)
368
+ {
369
+ parseBookmark(_lastPersisted, lastPublisher, lastSeq);
370
+ }
371
+ if (useRecent)
372
+ {
373
+ parseBookmark(_recent, recentPublisher, recentSeq);
374
+ if (empty() && useLastPersisted)
375
+ {
376
+ useRecent = false;
377
+ }
378
+ else
379
+ {
380
+ if (useLastPersisted && lastPublisher == recentPublisher)
381
+ {
382
+ if (lastSeq <= recentSeq)
383
+ {
384
+ useRecent = false;
385
+ }
386
+ else
387
+ {
388
+ useLastPersisted = false;
389
+ }
390
+ }
391
+ }
392
+ }
393
+ // Set size for all bookmarks that will be used
394
+ size_t totalLen = (useLastPersisted ? _lastPersisted.len() + 1 : 0);
395
+ if (useRecent)
396
+ {
397
+ totalLen += _recent.len() + 1;
398
+ }
399
+ // If we don't have a non-EPOCH persisted ack and we don't have a
400
+ // non-EPOCH most recent bookmark, OR we have a range
401
+ // we can build a list based on all the publishers instead.
402
+ if (usePublishersList_
403
+ && ((!useLastPersisted && !useRecent)
404
+ || _lastPersisted == AMPS_BOOKMARK_EPOCH))
405
+ {
406
+ std::ostringstream os;
407
+ for (PublisherIterator pub = _publishers.begin();
408
+ pub != _publishers.end(); ++pub)
409
+ {
410
+ if (pub->first == 0 && pub->second == 0)
411
+ {
412
+ continue;
413
+ }
414
+ if (pub->first == recentPublisher && recentSeq < pub->second)
415
+ {
416
+ os << recentPublisher << '|' << recentSeq << "|,";
417
+ }
418
+ else
419
+ {
420
+ os << pub->first << '|' << pub->second << "|,";
421
+ }
422
+ }
423
+ std::string recent = os.str();
424
+ totalLen = recent.length();
425
+ if (!recent.empty())
426
+ {
427
+ if (!_recoveryTimestamp.empty())
428
+ {
429
+ totalLen += _recoveryTimestamp.len();
430
+ recent += std::string(_recoveryTimestamp);
431
+ }
432
+ else
433
+ {
434
+ // Remove trailing ,
435
+ recent.erase(--totalLen);
436
+ }
437
+ // Reset _recentList to new value and return it
438
+ _recentList.clear();
439
+ _recentList = Message::Field(recent).deepCopy();
440
+ if (_range.isValid())
441
+ {
442
+ if (_range.getStart() != recent
443
+ && _recentList != AMPS_BOOKMARK_EPOCH)
444
+ {
445
+ _range.replaceStart(_recentList, true);
446
+ }
447
+ else if (_range.isStartInclusive())
448
+ {
449
+ amps_uint64_t publisher, sequence;
450
+ parseBookmark(_range.getStart(), publisher,
451
+ sequence);
452
+ PublisherIterator pub = _publishers.find(publisher);
453
+ if (pub != _publishers.end()
454
+ && pub->second >= sequence)
455
+ {
456
+ _range.makeStartExclusive();
457
+ }
458
+ }
459
+ return _range;
460
+ }
461
+ return _recentList;
462
+ }
463
+ if (_range.isValid())
464
+ {
465
+ return _range;
466
+ }
467
+ }
468
+ if (!_recoveryTimestamp.empty() && !_range.isValid())
469
+ {
470
+ totalLen += _recoveryTimestamp.len() + 1;
471
+ }
472
+ // If we have nothing discarded, return EPOCH
473
+ if (totalLen == 0
474
+ || (_recent.len() < 2 && !empty()))
475
+ {
476
+ if (_range.isValid())
477
+ {
478
+ return _range;
479
+ }
480
+ if (!useRecent)
481
+ {
482
+ return Message::Field(AMPS_BOOKMARK_EPOCH);
483
+ }
484
+ _setLastPersistedToEpoch();
485
+ return _lastPersisted;
486
+ }
487
+ // Remove the trailing , from the length
488
+ totalLen -= 1;
489
+ char* field = new char[totalLen];
490
+ size_t len = 0;
491
+ if (useRecent)
492
+ {
493
+ len = _recent.len();
494
+ memcpy(field, _recent.data(), len);
495
+ if (len < totalLen)
496
+ {
497
+ field[len++] = ',';
498
+ }
499
+ }
500
+ if (useLastPersisted)
501
+ {
502
+ memcpy(field + len, _lastPersisted.data(), _lastPersisted.len());
503
+ len += _lastPersisted.len();
504
+ if (len < totalLen)
505
+ {
506
+ field[len++] = ',';
507
+ }
508
+ }
509
+ if (!_recoveryTimestamp.empty() && !_range.isValid())
510
+ {
511
+ memcpy(field + len, _recoveryTimestamp.data(),
512
+ _recoveryTimestamp.len());
513
+ // If more is to be written after this, uncomment the following
514
+ //len += _lastPersisted.len();
515
+ //if (len < totalLen) field[len++] = ',';
516
+ }
517
+ // _recentList clear will delete[] current buffer and assign will get cleared
518
+ _recentList.clear();
519
+ _recentList.assign(field, totalLen);
520
+ if (_range.isValid())
521
+ {
522
+ if (_recentList != AMPS_BOOKMARK_EPOCH)
523
+ {
524
+ if (_range.getStart() != _recentList)
525
+ {
526
+ _range.replaceStart(_recentList, true);
527
+ }
528
+ else if (_range.isStartInclusive())
529
+ {
530
+ amps_uint64_t publisher, sequence;
531
+ parseBookmark(_range.getStart(), publisher,
532
+ sequence);
533
+ PublisherIterator pub = _publishers.find(publisher);
534
+ if (pub != _publishers.end()
535
+ && pub->second >= sequence)
536
+ {
537
+ _range.makeStartExclusive();
538
+ }
539
+ }
540
+ }
541
+ return _range;
542
+ }
543
+ return _recentList;
544
+ }
545
+
546
+ Message::Field getMostRecent(bool update_ = false)
547
+ {
548
+ Lock<Mutex> guard(_subLock);
549
+ // Return the same as last time if nothing's changed
550
+ // _recent is the most recent bookmark.
551
+ if (update_ && _store->_recentChanged)
552
+ {
553
+ _updateMostRecent();
554
+ }
555
+ if (_recent.empty())
556
+ {
557
+ return Message::Field(AMPS_BOOKMARK_EPOCH);
558
+ }
559
+ else
560
+ {
561
+ return _recent;
562
+ }
563
+ }
564
+
565
+ Message::Field getLastPersisted()
566
+ {
567
+ Lock<Mutex> guard(_subLock);
568
+ return _lastPersisted;
569
+ }
570
+
571
+ void setMostRecent(const Message::Field& recent_)
572
+ {
573
+ _recent.clear();
574
+ _recent.deepCopy(recent_);
575
+ }
576
+
577
+ void setRecoveryTimestamp(const char* recoveryTimestamp_,
578
+ size_t len_ = 0)
579
+ {
580
+ _recoveryTimestamp.clear();
581
+ size_t len = (len_ == 0) ? AMPS_TIMESTAMP_LEN : len_;
582
+ char* ts = new char[len];
583
+ memcpy((void*)ts, (const void*)recoveryTimestamp_, len);
584
+ _recoveryTimestamp.assign(ts, len);
585
+ }
586
+
587
+ void moveEntries(char* old_, char* new_, size_t newSize_)
588
+ {
589
+ size_t least = _least;
590
+ size_t leastBase = _leastBase;
591
+ if (_recoveryMin != AMPS_UNSET_INDEX)
592
+ {
593
+ least = _recoveryMin;
594
+ leastBase = _recoveryBase;
595
+ }
596
+ // First check if we grew in place, if so, just move current after least
597
+ if (old_ == new_)
598
+ {
599
+ if (newSize_ - (sizeof(Entry)*_entriesLength) > sizeof(Entry)*least)
600
+ {
601
+ memcpy(new_ + (sizeof(Entry)*_entriesLength),
602
+ old_, (sizeof(Entry)*least));
603
+ // Clear the beginning where those entries were
604
+ memset(old_, 0, sizeof(Entry)*least);
605
+ }
606
+ else // We have to use an intermediate buffer
607
+ {
608
+ Entry* buffer = new Entry[least];
609
+ memcpy((void*)buffer, (void*)old_, sizeof(Entry)*least);
610
+ //Put the beginning entries at the start of the new buffer
611
+ memcpy((void*)new_, (void*)((char*)old_ + (sizeof(Entry)*least)),
612
+ (_entriesLength - least)*sizeof(Entry));
613
+ //Put the end entries after the beginning entries
614
+ memcpy((void*)((char*)new_ + ((_entriesLength - least)*sizeof(Entry))),
615
+ (void*)buffer, least * sizeof(Entry));
616
+ // Least is now at 0 so base must be increased
617
+ leastBase += least;
618
+ least = 0;
619
+ delete [] buffer;
620
+ }
621
+ }
622
+ else
623
+ {
624
+ //Put the beginning entries at the start of the new buffer
625
+ memcpy((void*)new_, (void*)((char*)old_ + (sizeof(Entry)*least)),
626
+ (_entriesLength - least)*sizeof(Entry));
627
+ //Put the end entries after the beginning entries
628
+ memcpy((void*)((char*)new_ + ((_entriesLength - least)*sizeof(Entry))),
629
+ (void*)old_, least * sizeof(Entry));
630
+ // Least is now at 0 so base must be increased
631
+ leastBase += least;
632
+ least = 0;
633
+ }
634
+ if (_recoveryMin != AMPS_UNSET_INDEX)
635
+ {
636
+ _least = least + (_least + _leastBase) - (_recoveryMin + _recoveryBase);
637
+ _recoveryMax = least + (_recoveryMax + _recoveryMaxBase) -
638
+ (_recoveryMin + _recoveryBase);
639
+ _recoveryMaxBase = leastBase;
640
+ _recoveryMin = least;
641
+ _recoveryBase = leastBase;
642
+ }
643
+ else
644
+ {
645
+ _least = least;
646
+ }
647
+ _leastBase = leastBase;
648
+ // Current is now after everything and using the same base
649
+ _currentBase = _leastBase;
650
+ _current = least + _entriesLength;
651
+ }
652
+
653
+ inline size_t getOldestBookmarkSeq()
654
+ {
655
+ Lock<Mutex> guard(_subLock);
656
+ // If there is nothing in the store, return -1, otherwise return lowest
657
+ return ((_least + _leastBase) == (_current + _currentBase)) ? AMPS_UNSET_INDEX :
658
+ _least + _leastBase;
659
+ }
660
+
661
+ bool lastPersisted(const Message::Field& bookmark_)
662
+ {
663
+ // These shouldn't be persisted
664
+ if (bookmark_ == AMPS_BOOKMARK_NOW
665
+ || BookmarkRange::isRange(bookmark_))
666
+ {
667
+ return false;
668
+ }
669
+ Lock<Mutex> guard(_subLock);
670
+ return _setLastPersisted(bookmark_);
671
+ }
672
+
673
+ bool _setLastPersisted(const Message::Field& bookmark_)
674
+ {
675
+ if (!_lastPersisted.empty())
676
+ {
677
+ amps_uint64_t publisher, publisher_lastPersisted;
678
+ amps_uint64_t sequence, sequence_lastPersisted;
679
+ parseBookmark(bookmark_, publisher, sequence);
680
+ parseBookmark(_lastPersisted, publisher_lastPersisted,
681
+ sequence_lastPersisted);
682
+ if (publisher == publisher_lastPersisted &&
683
+ sequence <= sequence_lastPersisted)
684
+ {
685
+ return false;
686
+ }
687
+ }
688
+ // deepCopy will clear what's in _lastPersisted
689
+ _lastPersisted.deepCopy(bookmark_);
690
+ _store->_recentChanged = true;
691
+ _recoveryTimestamp.clear();
692
+ return true;
693
+ }
694
+
695
+ Message::Field lastPersisted(size_t bookmark_)
696
+ {
697
+ Lock<Mutex> guard(_subLock);
698
+ Message::Field& bookmark = _entries[bookmark_]._val;
699
+ // These shouldn't be persisted
700
+ if (bookmark == AMPS_BOOKMARK_NOW
701
+ || BookmarkRange::isRange(bookmark))
702
+ {
703
+ return bookmark;
704
+ }
705
+ _setLastPersisted(bookmark);
706
+ return bookmark;
707
+ }
708
+
709
+ // Returns the index of the recovered item, either the index where it
710
+ // was first stored prior to getMostRecent, or the new index if it is
711
+ // relogged either because this is called from log() or because it was
712
+ // not active but also not persisted.
713
+ size_t recover(const Message::Field& bookmark_, bool relogIfNotDiscarded)
714
+ {
715
+ size_t retVal = AMPS_UNSET_INDEX;
716
+ if (_recovered.empty() || _recoveryBase == AMPS_UNSET_INDEX)
717
+ {
718
+ return retVal;
719
+ }
720
+ // Check if this is a recovered bookmark.
721
+ // If so, copy the existing one to the new location
722
+ RecoveryIterator item = _recovered.find(bookmark_);
723
+ if (item != _recovered.end())
724
+ {
725
+ size_t seqNo = item->second;
726
+ size_t index = (seqNo - _recoveryBase) % _entriesLength;
727
+ // If we only have recovery entries and isDiscarded is
728
+ // checking on an already discarded entry, update recent.
729
+ if (_least + _leastBase == _current + _currentBase &&
730
+ !_entries[index]._active)
731
+ {
732
+ _store->_recentChanged = true;
733
+ _recent.clear();
734
+ _recent = _entries[index]._val.deepCopy();
735
+ retVal = moveEntry(index);
736
+ if (retVal == AMPS_UNSET_INDEX)
737
+ {
738
+ recover(bookmark_, relogIfNotDiscarded);
739
+ }
740
+ _least = _current;
741
+ _leastBase = _currentBase;
742
+ }
743
+ else if (!_entries[index]._active || relogIfNotDiscarded)
744
+ {
745
+ retVal = moveEntry(index);
746
+ if (retVal == AMPS_UNSET_INDEX)
747
+ {
748
+ recover(bookmark_, relogIfNotDiscarded);
749
+ }
750
+ }
751
+ else
752
+ {
753
+ return index;
754
+ }
755
+ _recovered.erase(item);
756
+ if (_recovered.empty())
757
+ {
758
+ _recoveryMin = AMPS_UNSET_INDEX;
759
+ _recoveryBase = AMPS_UNSET_INDEX;
760
+ _recoveryMax = AMPS_UNSET_INDEX;
761
+ _recoveryMaxBase = AMPS_UNSET_INDEX;
762
+ }
763
+ else if (index == _recoveryMin)
764
+ {
765
+ while (_entries[_recoveryMin]._val.empty() &&
766
+ (_recoveryMin + _recoveryBase) < (_recoveryMax + _recoveryMaxBase))
767
+ {
768
+ if (++_recoveryMin == _entriesLength)
769
+ {
770
+ _recoveryMin = 0;
771
+ _recoveryBase += _entriesLength;
772
+ }
773
+ }
774
+ }
775
+ }
776
+ return retVal;
777
+ }
778
+
779
+ // Return the id of this Subscription
780
+ Message::Field id() const
781
+ {
782
+ return _id;
783
+ }
784
+
785
+ struct Entry
786
+ {
787
+ Message::Field _val; //16
788
+ bool _active; //17
789
+ char _padding[32 - sizeof(Message::Field) - sizeof(bool)]; //32
790
+
791
+ Entry() : _active(false)
792
+ {
793
+ ;
794
+ }
795
+ };
796
+
797
+ struct EntryHash
798
+ {
799
+ Field::FieldHash _hasher;
800
+
801
+ size_t operator()(const Entry* entryPtr_) const
802
+ {
803
+ return _hasher(entryPtr_->_val);
804
+ }
805
+
806
+ bool operator()(const Entry* lhsPtr_, const Entry* rhsPtr_) const
807
+ {
808
+ return _hasher(lhsPtr_->_val, rhsPtr_->_val);
809
+ }
810
+ };
811
+
812
+ //typedef std::set<Entry*, EntryHash> EntryPtrList;
813
+ typedef std::vector<Entry*> EntryPtrList;
814
+
815
+ void getRecoveryEntries(EntryPtrList& list_)
816
+ {
817
+ if (_recoveryMin == AMPS_UNSET_INDEX ||
818
+ _recoveryMax == AMPS_UNSET_INDEX)
819
+ {
820
+ return;
821
+ }
822
+ size_t base = _recoveryBase;
823
+ size_t max = _recoveryMax + _recoveryMaxBase;
824
+ for (size_t i = _recoveryMin; i + base < max; ++i)
825
+ {
826
+ if (i == _entriesLength)
827
+ {
828
+ i = 0;
829
+ base = _recoveryMaxBase;
830
+ }
831
+ //list_.insert(&(_entries[i]));
832
+ list_.push_back(&(_entries[i]));
833
+ }
834
+ return;
835
+ }
836
+
837
+ void getActiveEntries(EntryPtrList& list_)
838
+ {
839
+ size_t base = _leastBase;
840
+ for (size_t i = _least; i + base < _current + _currentBase; ++i)
841
+ {
842
+ if (i >= _entriesLength)
843
+ {
844
+ i = 0;
845
+ base = _currentBase;
846
+ }
847
+ //list_.insert(&(_entries[i]));
848
+ list_.push_back(&(_entries[i]));
849
+ }
850
+ return;
851
+ }
852
+
853
+ Entry* getEntryByIndex(size_t index_)
854
+ {
855
+ Lock<Mutex> guard(_subLock);
856
+ size_t base = (_recoveryBase == AMPS_UNSET_INDEX ||
857
+ index_ >= _least + _leastBase)
858
+ ? _leastBase : _recoveryBase;
859
+ // Return NULL if not a valid index
860
+ size_t min = (_recoveryMin == AMPS_UNSET_INDEX ?
861
+ _least + _leastBase :
862
+ _recoveryMin + _recoveryBase);
863
+ if (index_ >= _current + _currentBase || index_ < min)
864
+ {
865
+ return NULL;
866
+ }
867
+ return &(_entries[(index_ - base) % _entriesLength]);
868
+ }
869
+
870
+ void justRecovered()
871
+ {
872
+ Lock<Mutex> guard(_subLock);
873
+ _updateMostRecent();
874
+ EntryPtrList list;
875
+ getRecoveryEntries(list);
876
+ setPublishersToDiscarded(&list, &_publishers);
877
+ }
878
+
879
+ void setPublishersToDiscarded(EntryPtrList* recovered_,
880
+ PublisherMap* publishers_)
881
+ {
882
+ // Need to reset publishers to only have up to the last
883
+ // discarded sequence number. Messages that were in transit
884
+ // during previous run but not discarded should be considered
885
+ // new and not duplicate after a restart/recovery.
886
+ for (EntryPtrList::iterator i = recovered_->begin();
887
+ i != recovered_->end(); ++i)
888
+ {
889
+ if ((*i)->_val.empty())
890
+ {
891
+ continue;
892
+ }
893
+ amps_uint64_t publisher = (amps_uint64_t)0;
894
+ amps_uint64_t sequence = (amps_uint64_t)0;
895
+ parseBookmark((*i)->_val, publisher, sequence);
896
+ if (publisher && sequence && (*i)->_active &&
897
+ (*publishers_)[publisher] >= sequence)
898
+ {
899
+ (*publishers_)[publisher] = sequence - 1;
900
+ }
901
+ }
902
+ }
903
+
904
+ void clearLastPersisted()
905
+ {
906
+ Lock<Mutex> guard(_subLock);
907
+ _lastPersisted.clear();
908
+ }
909
+
910
+ void setLastPersistedToEpoch()
911
+ {
912
+ Lock<Mutex> guard(_subLock);
913
+ _setLastPersistedToEpoch();
914
+ }
915
+
916
+ private:
917
+ Subscription(const Subscription&);
918
+ Subscription& operator=(const Subscription&);
919
+
920
+ size_t moveEntry(size_t index_)
921
+ {
922
+ // Check for wrap
923
+ if (_current >= _entriesLength)
924
+ {
925
+ _current = 0;
926
+ _currentBase += _entriesLength;
927
+ }
928
+ // Check for resize
929
+ // If list is too small, double it
930
+ if ((_current == _least % _entriesLength &&
931
+ _leastBase < _currentBase) ||
932
+ (_current == _recoveryMin && _recoveryBase < _currentBase))
933
+ {
934
+ if (!_store->resize(_id, (char**)&_entries,
935
+ sizeof(Entry) * _entriesLength * 2))
936
+ {
937
+ return AMPS_UNSET_INDEX;
938
+ }
939
+ // Length was doubled
940
+ _entriesLength *= 2;
941
+ }
942
+ _entries[_current]._val = _entries[index_]._val;
943
+ _entries[_current]._active = _entries[index_]._active;
944
+ // No need to clear Field, just set it to empty
945
+ _entries[index_]._val.assign(NULL, 0);
946
+ _entries[index_]._active = false;
947
+ return _current++;
948
+ }
949
+
950
+ void _setLastPersistedToEpoch()
951
+ {
952
+ size_t fieldLen = strlen(AMPS_BOOKMARK_EPOCH);
953
+ char* field = new char[fieldLen];
954
+ memcpy(field, AMPS_BOOKMARK_EPOCH, fieldLen);
955
+ _lastPersisted.clear();
956
+ _lastPersisted.assign(field, fieldLen);
957
+ }
958
+
959
+ bool _discard(size_t index_)
960
+ {
961
+ bool retVal = false;
962
+ // Lock should already be held
963
+ assert((_recoveryBase == AMPS_UNSET_INDEX && _recoveryMin == AMPS_UNSET_INDEX) ||
964
+ (_recoveryBase != AMPS_UNSET_INDEX && _recoveryMin != AMPS_UNSET_INDEX));
965
+ size_t base = (_recoveryBase == AMPS_UNSET_INDEX
966
+ || index_ >= _least + _leastBase)
967
+ ? _leastBase : _recoveryBase;
968
+ // discard of a record not in the log is a no-op
969
+ size_t min = (_recoveryMin == AMPS_UNSET_INDEX ? _least + _leastBase :
970
+ _recoveryMin + _recoveryBase);
971
+ if (index_ >= _current + _currentBase || index_ < min)
972
+ {
973
+ return retVal;
974
+ }
975
+
976
+ // log that this one is discarded, then
977
+ // recalculate what the most recent entry is.
978
+ Entry& e = _entries[(index_ - base) % _entriesLength];
979
+ e._active = false;
980
+
981
+ size_t index = index_;
982
+ if (_recoveryMin != AMPS_UNSET_INDEX &&
983
+ index_ == _recoveryMin + _recoveryBase)
984
+ {
985
+ // Find all to discard
986
+ size_t j = _recoveryMin;
987
+ while (j + _recoveryBase < _recoveryMax + _recoveryMaxBase &&
988
+ !_entries[j]._active)
989
+ {
990
+ // This index might be left-over from a slow discard and we
991
+ // may have reconnected. We have a few possibilities at this point.
992
+ // 1. If we re-logged this bookmark, this index will point at an
993
+ // empty bookmark. This could happen if the discard thread was slow
994
+ // and the reconnect was fast. We wouldn't report the
995
+ // the re-arrival of the bookmark as a duplicate because it
996
+ // hadn't been marked as discarded. In this case, we have to
997
+ // simply move past this in the recovery area.
998
+ // 2. This bookmark should become _recent because we haven't
999
+ // yet received anything since our last call to getMostRecent.
1000
+ // In this case, we need to take it out of recovered but not
1001
+ // clear it. The publishers map should report it as duplicate.
1002
+ // 3. This is the 'oldest' recovered, but we have received new
1003
+ // bookmarks since we got this one. We can clear it because the
1004
+ // publishers map should report it as a duplicate if/when it
1005
+ // does arrive again. Move the _recoveryMin ahead and remove it
1006
+ // from recovered.
1007
+ Message::Field& bookmark = _entries[j]._val;
1008
+ // Option 1 skips this and just moves on
1009
+ if (!bookmark.empty())
1010
+ {
1011
+ _recovered.erase(bookmark);
1012
+ // Make sure our publishers map will mark it discarded
1013
+ amps_uint64_t publisher, sequence;
1014
+ parseBookmark(bookmark, publisher, sequence);
1015
+ PublisherIterator pub = _publishers.find(publisher);
1016
+ if (pub == _publishers.end() || pub->second < sequence)
1017
+ {
1018
+ _publishers[publisher] = sequence;
1019
+ }
1020
+ if (_least + _leastBase == _current + _currentBase ||
1021
+ ((_least + _leastBase) % _entriesLength) ==
1022
+ ((_recoveryMin + _recoveryBase + 1)) % _entriesLength)
1023
+ {
1024
+ // Option 2, reset recent
1025
+ retVal = true;
1026
+ _store->_recentChanged = true;
1027
+ _recoveryTimestamp.clear();
1028
+ _recent.clear();
1029
+ _recent = bookmark;
1030
+ bookmark.assign(NULL, 0);
1031
+ }
1032
+ else
1033
+ {
1034
+ // Option 3, simply clear this one
1035
+ bookmark.clear();
1036
+ }
1037
+ }
1038
+ // If we reach the buffer end,
1039
+ // keep checking from the beginning
1040
+ if (++j == _entriesLength)
1041
+ {
1042
+ // Least has now loooped around
1043
+ _recoveryBase += _entriesLength;
1044
+ j = 0;
1045
+ }
1046
+ }
1047
+ assert(j + _recoveryBase != _recoveryMax + _recoveryMaxBase ||
1048
+ _recovered.empty());
1049
+ if (_recovered.empty())
1050
+ {
1051
+ _recoveryMin = AMPS_UNSET_INDEX;
1052
+ _recoveryBase = AMPS_UNSET_INDEX;
1053
+ _recoveryMax = AMPS_UNSET_INDEX;
1054
+ _recoveryMaxBase = AMPS_UNSET_INDEX;
1055
+ // Cleared recovered, want to check onward
1056
+ index = _least + _leastBase;
1057
+ }
1058
+ else
1059
+ {
1060
+ _recoveryMin = j;
1061
+ }
1062
+ }
1063
+ // if this is the first item in the list, discard all inactive ones
1064
+ // as long as recovery also says its okay
1065
+ if (index == _least + _leastBase)
1066
+ {
1067
+ // Find all to discard
1068
+ size_t j = _least;
1069
+ while (j + _leastBase < _current + _currentBase &&
1070
+ !_entries[j]._active)
1071
+ {
1072
+ //Must free associated memory
1073
+ _recent.clear();
1074
+ _recent = _entries[j]._val;
1075
+ _entries[j]._val.assign(NULL, 0);
1076
+ _store->_recentChanged = true;
1077
+ retVal = true;
1078
+ _recoveryTimestamp.clear();
1079
+ // If we reach the buffer end,
1080
+ // keep checking from the beginning
1081
+ if (++j == _entriesLength)
1082
+ {
1083
+ // Least has now loooped around
1084
+ _leastBase += _entriesLength;
1085
+ j = 0;
1086
+ }
1087
+ }
1088
+ _least = j;
1089
+ }
1090
+ return retVal;
1091
+ }
1092
+
1093
+ void _updateMostRecent()
1094
+ {
1095
+ // Lock is already held
1096
+ _recovered.clear();
1097
+ assert((_recoveryBase == AMPS_UNSET_INDEX && _recoveryMin == AMPS_UNSET_INDEX) ||
1098
+ (_recoveryBase != AMPS_UNSET_INDEX && _recoveryMin != AMPS_UNSET_INDEX));
1099
+ size_t base = (_recoveryMin == AMPS_UNSET_INDEX) ? _leastBase : _recoveryBase;
1100
+ size_t start = (_recoveryMin == AMPS_UNSET_INDEX) ? _least : _recoveryMin;
1101
+ _recoveryMin = AMPS_UNSET_INDEX;
1102
+ _recoveryBase = AMPS_UNSET_INDEX;
1103
+ _recoveryMax = AMPS_UNSET_INDEX;
1104
+ _recoveryMaxBase = AMPS_UNSET_INDEX;
1105
+ for (size_t i = start; i + base < _current + _currentBase; i++)
1106
+ {
1107
+ if ( i >= _entriesLength )
1108
+ {
1109
+ i = 0;
1110
+ base = _currentBase;
1111
+ }
1112
+ if (i >= _recoveryMax + _recoveryBase && i < _least + _leastBase)
1113
+ {
1114
+ continue;
1115
+ }
1116
+ Entry& entry = _entries[i];
1117
+ if (!entry._val.empty())
1118
+ {
1119
+ _recovered[entry._val] = i + base;
1120
+ if (_recoveryMin == AMPS_UNSET_INDEX)
1121
+ {
1122
+ _recoveryMin = i;
1123
+ _recoveryBase = base;
1124
+ _recoveryMax = _current;
1125
+ _recoveryMaxBase = _currentBase;
1126
+ }
1127
+ }
1128
+ }
1129
+ if (_current == _entriesLength)
1130
+ {
1131
+ _current = 0;
1132
+ _currentBase += _entriesLength;
1133
+ }
1134
+ _least = _current;
1135
+ _leastBase = _currentBase;
1136
+ }
1137
+
1138
+ Message::Field _id;
1139
+ Message::Field _recent;
1140
+ Message::Field _lastPersisted;
1141
+ Message::Field _recentList;
1142
+ BookmarkRange _range;
1143
+ Message::Field _recoveryTimestamp;
1144
+ size_t _current;
1145
+ size_t _currentBase;
1146
+ size_t _least;
1147
+ size_t _leastBase;
1148
+ size_t _recoveryMin;
1149
+ size_t _recoveryBase;
1150
+ size_t _recoveryMax;
1151
+ size_t _recoveryMaxBase;
1152
+ size_t _entriesLength;
1153
+ Entry* _entries;
1154
+ MemoryBookmarkStore* _store;
1155
+ Mutex _subLock;
1156
+ RecoveryMap _recovered;
1157
+ public:
1158
+ PublisherMap _publishers;
1159
+ };
1160
+
1161
+ public:
1162
+ ///
1163
+ /// Creates a MemoryBookmarkStore
1164
+ MemoryBookmarkStore() : BookmarkStoreImpl(),
1165
+ _subsLock(),
1166
+ _lock(),
1167
+ _serverVersion(AMPS_DEFAULT_MIN_VERSION),
1168
+ _recentChanged(true),
1169
+ _recovering(false),
1170
+ _recoveryPointAdapter(NULL),
1171
+ _recoveryPointFactory(NULL)
1172
+ { ; }
1173
+
1174
+ typedef RecoveryPointAdapter::iterator RecoveryIterator;
1175
+
1176
+ ///
1177
+ /// Creates a MemoryBookmarkStore
1178
+ /// \param adapter_ The {@link RecoveryPointAdapter} to notify
1179
+ /// about updates.
1180
+ /// \param factory_ An optional factory function to use
1181
+ /// to create the {@link RecoveryPoint} objects sent to the recoveryPointAdapter_.
1182
+ MemoryBookmarkStore(const RecoveryPointAdapter& adapter_,
1183
+ RecoveryPointFactory factory_ = NULL)
1184
+ : BookmarkStoreImpl()
1185
+ , _subsLock()
1186
+ , _lock()
1187
+ , _serverVersion(AMPS_DEFAULT_MIN_VERSION)
1188
+ , _recentChanged(true)
1189
+ , _recovering(true)
1190
+ , _recoveryPointAdapter(adapter_)
1191
+ , _recoveryPointFactory(factory_)
1192
+ {
1193
+ Message msg;
1194
+ if (!_recoveryPointFactory)
1195
+ {
1196
+ _recoveryPointFactory = &FixedRecoveryPoint::create;
1197
+ }
1198
+ for (RecoveryIterator recoveryPoint = _recoveryPointAdapter.begin();
1199
+ recoveryPoint != _recoveryPointAdapter.end();
1200
+ ++recoveryPoint)
1201
+ {
1202
+ Field subId(recoveryPoint->getSubId());
1203
+ msg.setSubscriptionHandle(static_cast<amps_subscription_handle>(0));
1204
+ msg.setSubId(subId);
1205
+ Field bookmark = recoveryPoint->getBookmark();
1206
+ if (BookmarkRange::isRange(bookmark))
1207
+ {
1208
+ msg.setBookmark(bookmark);
1209
+ _log(msg);
1210
+ }
1211
+ else
1212
+ {
1213
+ std::vector<Field> bmList = Field::parseBookmarkList(bookmark);
1214
+ for (std::vector<Field>::iterator bkmk = bmList.begin(); bkmk != bmList.end(); ++bkmk)
1215
+ {
1216
+ if (Field::isTimestamp(*bkmk))
1217
+ {
1218
+ find(subId)->setRecoveryTimestamp(bkmk->data(), bkmk->len());
1219
+ }
1220
+ else
1221
+ {
1222
+ msg.assignBookmark(bkmk->data(), bkmk->len());
1223
+ _isDiscarded(msg);
1224
+ _log(msg);
1225
+ _discard(msg);
1226
+ }
1227
+ }
1228
+ // Reset to original bookmark
1229
+ msg.setBookmark(bookmark);
1230
+ }
1231
+ }
1232
+ _recovering = false;
1233
+ }
1234
+
1235
+ virtual ~MemoryBookmarkStore()
1236
+ {
1237
+ if (_recoveryPointAdapter.isValid())
1238
+ {
1239
+ _recoveryPointAdapter.close();
1240
+ }
1241
+ __purge();
1242
+ }
1243
+
1244
+ ///
1245
+ /// Log a bookmark to the persistent log and return the corresponding
1246
+ /// sequence number for this bookmark.
1247
+ /// \param message_ The Message to log.
1248
+ ///
1249
+ virtual size_t log(Message& message_)
1250
+ {
1251
+ Lock<Mutex> guard(_lock);
1252
+ return _log(message_);
1253
+ }
1254
+
1255
+ ///
1256
+ /// Log a discard-bookmark entry to the persistent log
1257
+ /// based on a bookmark sequence number.
1258
+ /// \param message_ The Message to discard.
1259
+ ///
1260
+ virtual void discard(const Message& message_)
1261
+ {
1262
+ Lock<Mutex> guard(_lock);
1263
+ (void)_discard(message_);
1264
+ }
1265
+
1266
+ ///
1267
+ /// Log a discard-bookmark entry to the persistent log
1268
+ /// based on a bookmark sequence number. Use the \ref discard(const Message&)
1269
+ /// function instead when you have the full Message object available..
1270
+ /// \param subId_ The id of the subscription to which the bookmark applies.
1271
+ /// \param bookmarkSeqNo_ The bookmark sequence number to discard.
1272
+ ///
1273
+ virtual void discard(const Message::Field& subId_, size_t bookmarkSeqNo_)
1274
+ {
1275
+ Lock<Mutex> guard(_lock);
1276
+ (void)_discard(subId_, bookmarkSeqNo_);
1277
+ }
1278
+
1279
+ ///
1280
+ /// Returns the most recent bookmark from the log that
1281
+ /// ought to be used for (re-)subscriptions.
1282
+ /// \param subId_ The id of the subscription to check.
1283
+ ///
1284
+ virtual Message::Field getMostRecent(const Message::Field& subId_)
1285
+ {
1286
+ Lock<Mutex> guard(_lock);
1287
+ return _getMostRecent(subId_);
1288
+ }
1289
+
1290
+ ///
1291
+ /// Called for each arriving message to determine if
1292
+ /// the application has already seen this bookmark and should
1293
+ /// not be reprocessed. Returns 'true' if the bookmark is
1294
+ /// in the log and should not be re-processed, false otherwise.
1295
+ /// \param message_ The Message to check.
1296
+ /// \return Whether or not the Message has been discarded from this store.
1297
+ ///
1298
+ virtual bool isDiscarded(Message& message_)
1299
+ {
1300
+ Lock<Mutex> guard(_lock);
1301
+ return _isDiscarded(message_);
1302
+ }
1303
+
1304
+ ///
1305
+ /// Called to purge the contents of this store.
1306
+ /// Removes any tracking history associated with publishers and received
1307
+ /// messages, and may delete or truncate on-disk representations as well.
1308
+ ///
1309
+ virtual void purge()
1310
+ {
1311
+ Lock<Mutex> guard(_lock);
1312
+ _purge();
1313
+ }
1314
+
1315
+ ///
1316
+ /// Called to purge the contents of this store for particular subId.
1317
+ /// Removes any tracking history associated with publishers and received
1318
+ /// messages, and will remove the subId from the file as well.
1319
+ ///
1320
+ virtual void purge(const Message::Field& subId_)
1321
+ {
1322
+ Lock<Mutex> guard(_lock);
1323
+ _purge(subId_);
1324
+ }
1325
+
1326
+ ///
1327
+ /// Called to find the oldest bookmark in the store.
1328
+ /// \param subId_ The subscription ID on which to find the oldest bookmark.
1329
+ /// \return The bookmark that is oldest in the store for subId_
1330
+ virtual size_t getOldestBookmarkSeq(const Message::Field& subId_)
1331
+ {
1332
+ Lock<Mutex> guard(_lock);
1333
+ return _getOldestBookmarkSeq(subId_);
1334
+ }
1335
+
1336
+ ///
1337
+ /// Mark the bookmark provided as replicated to all sync replication
1338
+ /// destinations for the given subscription.
1339
+ /// \param subId_ The subscription Id to which the bookmark applies.
1340
+ /// \param bookmark_ The most recent replicated bookmark.
1341
+ virtual void persisted(const Message::Field& subId_,
1342
+ const Message::Field& bookmark_)
1343
+ {
1344
+ Lock<Mutex> guard(_lock);
1345
+ _persisted(find(subId_), bookmark_);
1346
+ }
1347
+
1348
+ ///
1349
+ /// Mark the bookmark provided as replicated to all sync replication
1350
+ /// destinations for the given subscription.
1351
+ /// \param subId_ The subscription Id to which the bookmark applies.
1352
+ /// \param bookmark_ The most recent bookmark's sequence number.
1353
+ /// \return The bookmark field that was just marked persisted.
1354
+ virtual Message::Field persisted(const Message::Field& subId_,
1355
+ size_t bookmark_)
1356
+ {
1357
+ Lock<Mutex> guard(_lock);
1358
+ return _persisted(find(subId_), bookmark_);
1359
+ }
1360
+
1361
+ ///
1362
+ /// Internally used to set the server version so the store knows how to deal
1363
+ /// with persisted acks and calls to getMostRecent().
1364
+ /// \param version_ The version of the server being used.
1365
+ void setServerVersion(const VersionInfo& version_)
1366
+ {
1367
+ setServerVersion(version_.getOldStyleVersion());
1368
+ }
1369
+
1370
+ ///
1371
+ /// Internally used to set the server version so the store knows how to deal
1372
+ /// with persisted acks and calls to getMostRecent().
1373
+ /// \param version_ The version of the server being used.
1374
+ void setServerVersion(size_t version_)
1375
+ {
1376
+ Lock<Mutex> guard(_subsLock);
1377
+ _serverVersion = version_;
1378
+ }
1379
+
1380
+ inline bool isWritableBookmark(size_t length)
1381
+ {
1382
+ return length >= AMPS_MIN_BOOKMARK_LEN;
1383
+ }
1384
+
1385
+ typedef Subscription::EntryPtrList EntryPtrList;
1386
+
1387
+ protected:
1388
+
1389
+ // Called once lock is acquired
1390
+ size_t _log(Message& message_)
1391
+ {
1392
+ Message::Field bookmark = message_.getBookmark();
1393
+ Subscription* pSub = (Subscription*)(message_.getSubscriptionHandle());
1394
+ if (!pSub)
1395
+ {
1396
+ Message::Field subId = message_.getSubscriptionId();
1397
+ if (subId.empty())
1398
+ {
1399
+ subId = message_.getSubscriptionIds();
1400
+ }
1401
+ pSub = find(subId);
1402
+ message_.setSubscriptionHandle(
1403
+ static_cast<amps_subscription_handle>(pSub));
1404
+ }
1405
+ size_t retVal = pSub->log(bookmark);
1406
+ message_.setBookmarkSeqNo(retVal);
1407
+ return retVal;
1408
+ }
1409
+
1410
+ // Called once lock is acquired, or from ctor
1411
+ bool _discard(const Message& message_)
1412
+ {
1413
+ size_t bookmarkSeqNo = message_.getBookmarkSeqNo();
1414
+ Subscription* pSub = (Subscription*)(message_.getSubscriptionHandle());
1415
+ if (!pSub)
1416
+ {
1417
+ Message::Field subId = message_.getSubscriptionId();
1418
+ if (subId.empty())
1419
+ {
1420
+ subId = message_.getSubscriptionIds();
1421
+ }
1422
+ pSub = find(subId);
1423
+ }
1424
+ bool retVal = pSub->discard(bookmarkSeqNo);
1425
+ if (retVal)
1426
+ {
1427
+ updateAdapter(pSub);
1428
+ }
1429
+ return retVal;
1430
+ }
1431
+
1432
+ // Called once lock is acquired
1433
+ bool _discard(const Message::Field& subId_, size_t bookmarkSeqNo_)
1434
+ {
1435
+ Subscription* pSub = find(subId_);
1436
+ bool retVal = pSub->discard(bookmarkSeqNo_);
1437
+ if (retVal)
1438
+ {
1439
+ updateAdapter(pSub);
1440
+ }
1441
+ return retVal;
1442
+ }
1443
+
1444
+ // Called once lock is acquired
1445
+ Message::Field _getMostRecent(const Message::Field& subId_,
1446
+ bool usePublishersList_ = true)
1447
+ {
1448
+ Subscription* pSub = find(subId_);
1449
+ return pSub->getMostRecentList(usePublishersList_);
1450
+ }
1451
+
1452
+ // Called once lock is acquired
1453
+ bool _isDiscarded(Message& message_)
1454
+ {
1455
+ Message::Field subId = message_.getSubscriptionId();
1456
+ if (subId.empty())
1457
+ {
1458
+ subId = message_.getSubscriptionIds();
1459
+ }
1460
+ Subscription* pSub = find(subId);
1461
+ message_.setSubscriptionHandle(
1462
+ static_cast<amps_subscription_handle>(pSub));
1463
+ return pSub->isDiscarded(message_.getBookmark());
1464
+ }
1465
+
1466
+ // Called once lock is acquired
1467
+ size_t _getOldestBookmarkSeq(const Message::Field& subId_)
1468
+ {
1469
+ Subscription* pSub = find(subId_);
1470
+ return pSub->getOldestBookmarkSeq();
1471
+ }
1472
+
1473
+ // Called once lock is acquired
1474
+ virtual void _persisted(Subscription* pSub_,
1475
+ const Message::Field& bookmark_)
1476
+ {
1477
+ if (pSub_->lastPersisted(bookmark_))
1478
+ {
1479
+ updateAdapter(pSub_);
1480
+ }
1481
+ }
1482
+
1483
+ // Called once lock is acquired
1484
+ virtual Message::Field _persisted(Subscription* pSub_, size_t bookmark_)
1485
+ {
1486
+ return pSub_->lastPersisted(bookmark_);
1487
+ }
1488
+
1489
+ // Called once lock is acquired
1490
+ void _purge()
1491
+ {
1492
+ if (_recoveryPointAdapter.isValid())
1493
+ {
1494
+ _recoveryPointAdapter.purge();
1495
+ }
1496
+ __purge();
1497
+ }
1498
+
1499
+ // Called once lock is acquired
1500
+ void __purge()
1501
+ {
1502
+ // Walk through list and clear Fields before calling clear
1503
+ while (!_subs.empty())
1504
+ {
1505
+ SubscriptionMap::iterator iter = _subs.begin();
1506
+ //The subId key is cleared when deleting the Subscription, which shares
1507
+ //the _data pointer in its id field.
1508
+ const_cast<Message::Field&>(iter->first).clear();
1509
+ delete (iter->second);
1510
+ _subs.erase(iter);
1511
+ }
1512
+ _subs.clear();
1513
+ }
1514
+
1515
+ // Called once lock is acquired
1516
+ virtual void _purge(const Message::Field& subId_)
1517
+ {
1518
+ if (_recoveryPointAdapter.isValid())
1519
+ {
1520
+ _recoveryPointAdapter.purge(subId_);
1521
+ }
1522
+ __purge(subId_);
1523
+ }
1524
+
1525
+ // Called once lock is acquired
1526
+ virtual void __purge(const Message::Field& subId_)
1527
+ {
1528
+ Lock<Mutex> guard(_subsLock);
1529
+ SubscriptionMap::iterator iter = _subs.find(subId_);
1530
+ if (iter == _subs.end())
1531
+ {
1532
+ return;
1533
+ }
1534
+ const_cast<Message::Field&>(iter->first).clear();
1535
+ delete (iter->second);
1536
+ _subs.erase(iter);
1537
+ }
1538
+
1539
+ // Can be used by subclasses during recovery
1540
+ void setMostRecent(const Message::Field& subId_,
1541
+ const Message::Field& recent_)
1542
+ {
1543
+ find(subId_)->setMostRecent(recent_);
1544
+ }
1545
+
1546
+ Mutex _subsLock;
1547
+ Mutex _lock;
1548
+ static const char ENTRY_BOOKMARK = 'b';
1549
+ static const char ENTRY_DISCARD = 'd';
1550
+ static const char ENTRY_PERSISTED = 'p';
1551
+
1552
+ virtual Subscription* find(const Message::Field& subId_)
1553
+ {
1554
+ if (subId_.empty())
1555
+ {
1556
+ throw StoreException("A valid subscription ID must be provided to the Bookmark Store");
1557
+ }
1558
+ Lock<Mutex> guard(_subsLock);
1559
+ if (_subs.count(subId_) == 0)
1560
+ {
1561
+ // Subscription will be created
1562
+ Message::Field id;
1563
+ id.deepCopy(subId_);
1564
+ _subs[id] = new Subscription(this, id);
1565
+ return _subs[id];
1566
+ }
1567
+ return _subs[subId_];
1568
+ }
1569
+
1570
+ virtual bool resize(const Message::Field& subId_, char** newBuffer_, size_t size_,
1571
+ bool callResizeHandler_ = true)
1572
+ {
1573
+ assert(newBuffer_ != 0);
1574
+ if (size_ == 0) // Delete the buffer
1575
+ {
1576
+ if (*newBuffer_)
1577
+ {
1578
+ free(*newBuffer_);
1579
+ *newBuffer_ = NULL;
1580
+ }
1581
+ return true;
1582
+ }
1583
+ if (callResizeHandler_ && !callResizeHandler(subId_, size_))
1584
+ {
1585
+ return false;
1586
+ }
1587
+ char* oldBuffer = *newBuffer_ ? *newBuffer_ : NULL;
1588
+ *newBuffer_ = (char*)malloc(size_);
1589
+ memset(*newBuffer_, 0, size_);
1590
+ if (oldBuffer)
1591
+ {
1592
+ find(subId_)->moveEntries(oldBuffer, *newBuffer_, size_);
1593
+ free(oldBuffer);
1594
+ }
1595
+ return true;
1596
+ }
1597
+
1598
+ protected:
1599
+ void updateAdapter(Subscription* pSub_)
1600
+ {
1601
+ if (_recovering || !_recentChanged || !_recoveryPointAdapter.isValid())
1602
+ {
1603
+ return;
1604
+ }
1605
+ // We have to make a copy here, since the return from getMostRecentList
1606
+ // could get changed once the lock is released.
1607
+ RecoveryPoint update = _recoveryPointFactory(pSub_->id(),
1608
+ pSub_->getMostRecentList(false)).deepCopy();
1609
+ Unlock<Mutex> unlock(_lock);
1610
+ _recoveryPointAdapter.update(update);
1611
+ // Free memmory of the copy, adapter should have copies of the fields
1612
+ update.clear();
1613
+ }
1614
+
1615
+ typedef std::map<Message::Field, Subscription*, Message::Field::FieldHash> SubscriptionMap;
1616
+ SubscriptionMap _subs;
1617
+ size_t _serverVersion;
1618
+ bool _recentChanged;
1619
+ bool _recovering;
1620
+ typedef std::set<Subscription*> SubscriptionSet;
1621
+ RecoveryPointAdapter _recoveryPointAdapter;
1622
+ RecoveryPointFactory _recoveryPointFactory;
1623
+ };
1624
+
1625
+ } // end namespace AMPS
1626
+
1627
+ #endif //_MEMORYBOOKMARKSTORE_H_
1628
+