reqmgr2ms-output 2.3.2rc5__tar.gz → 2.3.2rc8__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (276) hide show
  1. {reqmgr2ms-output-2.3.2rc5/src/python/reqmgr2ms_output.egg-info → reqmgr2ms-output-2.3.2rc8}/PKG-INFO +1 -1
  2. reqmgr2ms-output-2.3.2rc8/bin/adhoc-scripts/adjustMongoDocs.py +124 -0
  3. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/updatePileupObjects.py +88 -19
  4. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmagent-mod-config +5 -3
  5. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Lexicon.py +5 -5
  6. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/DBSConcurrency.py +5 -2
  7. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/__init__.py +1 -1
  8. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8/src/python/reqmgr2ms_output.egg-info}/PKG-INFO +1 -1
  9. reqmgr2ms-output-2.3.2rc5/bin/adhoc-scripts/adjustMongoDocs.py +0 -73
  10. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/LICENSE +0 -0
  11. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/MANIFEST.in +0 -0
  12. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/NOTICE +0 -0
  13. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/README.md +0 -0
  14. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/HWMon/wmcore-SysStat +0 -0
  15. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/acdcserver-tools +0 -0
  16. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/ParseSpecCmsswdist.py +0 -0
  17. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/checkDsetFileCount.py +0 -0
  18. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/checkStuckLQE.py +0 -0
  19. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/createPileupObjects.py +0 -0
  20. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/drainAgent.py +0 -0
  21. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/fixWorkflowParentage.py +0 -0
  22. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/getWQStatusByWorkflow.py +0 -0
  23. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/injectUnified.py +0 -0
  24. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/mongoInit.py +0 -0
  25. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/parseUnifiedCampaigns.py +0 -0
  26. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/setrequeststatus.py +0 -0
  27. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/summaryWMStatsFailures.py +0 -0
  28. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/updateTotalStats.py +0 -0
  29. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/adhoc-scripts/workflowCompletion.py +0 -0
  30. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/attempt-to-patch.sh +0 -0
  31. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/buildrelease.sh +0 -0
  32. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/check-ACDC-parentage +0 -0
  33. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/check-phedex-dbs-status +0 -0
  34. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/check-request-wq-status +0 -0
  35. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/clean-oracle +0 -0
  36. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/combineMinifyWMStats.py +0 -0
  37. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/couch-thrash.py +0 -0
  38. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/couch_archiver.py +0 -0
  39. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/create-iam-token.sh +0 -0
  40. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/createStoreResults.py +0 -0
  41. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/dbsbuffer-file-fix.py +0 -0
  42. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/deploy-rpm-to-jenkins.sh +0 -0
  43. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/fix-dbs-parentage +0 -0
  44. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/inject-to-config-cache +0 -0
  45. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/kill-workflow-in-agent +0 -0
  46. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/kill-workflow-in-global +0 -0
  47. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/make-local-clones.sh +0 -0
  48. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/outputmodules-from-config +0 -0
  49. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/patchComponent.sh +0 -0
  50. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/paused-jobs +0 -0
  51. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/purgeDeletedCouchDoc.py +0 -0
  52. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/reqmgr-put-default-config +0 -0
  53. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/reqmgr-sw-update +0 -0
  54. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/vaildateCMSSWMergeVersion +0 -0
  55. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmagent-couchapp-init +0 -0
  56. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmagent-delete-couchdb-workflow +0 -0
  57. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmagent-resource-control +0 -0
  58. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmagent-unregister-wmstats +0 -0
  59. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmagent-upload-config +0 -0
  60. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmagent-workqueue +0 -0
  61. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmc-dist-patch +0 -0
  62. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmc-dist-unpatch +0 -0
  63. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmc-httpd +0 -0
  64. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmcore-db-init +0 -0
  65. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmcore-new-config +0 -0
  66. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmcore-new-flow +0 -0
  67. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/bin/wmcoreD +0 -0
  68. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/requirements.txt +0 -0
  69. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/setup.cfg +0 -0
  70. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/setup.py +0 -0
  71. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/setup_build.py +0 -0
  72. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/setup_dependencies.py +0 -0
  73. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/CPMetrics.py +0 -0
  74. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/CertTools.py +0 -0
  75. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/EmailAlert.py +0 -0
  76. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/ExtendedUnitTestCase.py +0 -0
  77. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/FileTools.py +0 -0
  78. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/IteratorTools.py +0 -0
  79. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/MathUtils.py +0 -0
  80. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/MemoryCache.py +0 -0
  81. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Patterns.py +0 -0
  82. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Pipeline.py +0 -0
  83. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/PortForward.py +0 -0
  84. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/ProcessStats.py +0 -0
  85. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/PythonVersion.py +0 -0
  86. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Signals.py +0 -0
  87. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/TemporaryEnvironment.py +0 -0
  88. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Throttled.py +0 -0
  89. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Timers.py +0 -0
  90. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Timestamps.py +0 -0
  91. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/TokenManager.py +0 -0
  92. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Tracing.py +0 -0
  93. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/TwPrint.py +0 -0
  94. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/Utilities.py +0 -0
  95. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/Utils/__init__.py +0 -0
  96. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/Alarm.py +0 -0
  97. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/MathAlgos.py +0 -0
  98. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/MiscAlgos.py +0 -0
  99. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/ParseXMLFile.py +0 -0
  100. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/Permissions.py +0 -0
  101. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/Singleton.py +0 -0
  102. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/SubprocessAlgos.py +0 -0
  103. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Algorithms/__init__.py +0 -0
  104. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Cache/GenericDataCache.py +0 -0
  105. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Cache/WMConfigCache.py +0 -0
  106. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Cache/__init__.py +0 -0
  107. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Configuration.py +0 -0
  108. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DAOFactory.py +0 -0
  109. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/File.py +0 -0
  110. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/Fileset.py +0 -0
  111. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/Job.py +0 -0
  112. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/JobGroup.py +0 -0
  113. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/JobPackage.py +0 -0
  114. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/LumiList.py +0 -0
  115. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/Mask.py +0 -0
  116. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +0 -0
  117. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +0 -0
  118. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/MathStructs/SummaryHistogram.py +0 -0
  119. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/MathStructs/__init__.py +0 -0
  120. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/Pickleable.py +0 -0
  121. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/Run.py +0 -0
  122. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/Subscription.py +0 -0
  123. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/WMObject.py +0 -0
  124. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/WorkUnit.py +0 -0
  125. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/Workflow.py +0 -0
  126. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/DataStructs/__init__.py +0 -0
  127. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/CMSCouch.py +0 -0
  128. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/ConfigDBMap.py +0 -0
  129. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/CouchUtils.py +0 -0
  130. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/DBCore.py +0 -0
  131. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/DBCreator.py +0 -0
  132. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/DBExceptionHandler.py +0 -0
  133. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/DBFactory.py +0 -0
  134. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/DBFormatter.py +0 -0
  135. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/Dialects.py +0 -0
  136. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/ExecuteDAO.py +0 -0
  137. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/MongoDB.py +0 -0
  138. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/MySQL/Destroy.py +0 -0
  139. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/MySQL/ListUserContent.py +0 -0
  140. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/MySQL/__init__.py +0 -0
  141. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/MySQLCore.py +0 -0
  142. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/Oracle/Destroy.py +0 -0
  143. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/Oracle/ListUserContent.py +0 -0
  144. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/Oracle/__init__.py +0 -0
  145. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/ResultSet.py +0 -0
  146. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/Transaction.py +0 -0
  147. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/__init__.py +0 -0
  148. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Database/ipy_profile_couch.py +0 -0
  149. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/GroupUser/CouchObject.py +0 -0
  150. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/GroupUser/Decorators.py +0 -0
  151. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/GroupUser/Group.py +0 -0
  152. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/GroupUser/Interface.py +0 -0
  153. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/GroupUser/User.py +0 -0
  154. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/GroupUser/__init__.py +0 -0
  155. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/CherryPyThreads/HeartbeatMonitor.py +0 -0
  156. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/CherryPyThreads/__init__.py +0 -0
  157. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/DataStructs/DefaultStructs.py +0 -0
  158. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/DataStructs/__init__.py +0 -0
  159. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSCore/MSAuth.py +0 -0
  160. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSCore/MSCore.py +0 -0
  161. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSCore/MSManager.py +0 -0
  162. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSCore/TaskManager.py +0 -0
  163. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSCore/__init__.py +0 -0
  164. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSOutput/MSOutput.py +0 -0
  165. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSOutput/MSOutputStreamer.py +0 -0
  166. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSOutput/MSOutputTemplate.py +0 -0
  167. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSOutput/RelValPolicy.py +0 -0
  168. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/MSOutput/__init__.py +0 -0
  169. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/Service/Data.py +0 -0
  170. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/Service/RestApiHub.py +0 -0
  171. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/Service/__init__.py +0 -0
  172. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/Tools/Common.py +0 -0
  173. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/Tools/PycurlRucio.py +0 -0
  174. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/Tools/__init__.py +0 -0
  175. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/WebGui/FrontPage.py +0 -0
  176. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/MicroService/WebGui/__init__.py +0 -0
  177. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Auth.py +0 -0
  178. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/CherryPyPeriodicTask.py +0 -0
  179. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Error.py +0 -0
  180. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Format.py +0 -0
  181. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/HeartbeatMonitorBase.py +0 -0
  182. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Main.py +0 -0
  183. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Server.py +0 -0
  184. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Services.py +0 -0
  185. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Test.py +0 -0
  186. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Tools.py +0 -0
  187. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/Validation.py +0 -0
  188. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/REST/__init__.py +0 -0
  189. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/ReqMgr/DataStructs/RequestStatus.py +0 -0
  190. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/ReqMgr/DataStructs/RequestType.py +0 -0
  191. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/ReqMgr/DataStructs/__init__.py +0 -0
  192. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/ReqMgr/__init__.py +0 -0
  193. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/AlertManager/AlertManagerAPI.py +0 -0
  194. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/AlertManager/__init__.py +0 -0
  195. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/CRIC/CRIC.py +0 -0
  196. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/CRIC/__init__.py +0 -0
  197. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/DBS3Reader.py +0 -0
  198. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/DBSErrors.py +0 -0
  199. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/DBSReader.py +0 -0
  200. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/DBSUtils.py +0 -0
  201. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/DBSWriterObjects.py +0 -0
  202. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/ProdException.py +0 -0
  203. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/DBS/__init__.py +0 -0
  204. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/FWJRDB/FWJRDBAPI.py +0 -0
  205. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/FWJRDB/__init__.py +0 -0
  206. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/HTTPS/HTTPSAuthHandler.py +0 -0
  207. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/HTTPS/__init__.py +0 -0
  208. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/LogDB/LogDB.py +0 -0
  209. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/LogDB/LogDBBackend.py +0 -0
  210. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/LogDB/LogDBExceptions.py +0 -0
  211. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/LogDB/LogDBReport.py +0 -0
  212. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/LogDB/__init__.py +0 -0
  213. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/MSPileup/MSPileupUtils.py +0 -0
  214. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/MSPileup/__init__.py +0 -0
  215. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/McM/McM.py +0 -0
  216. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/McM/__init__.py +0 -0
  217. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/MonIT/Grafana.py +0 -0
  218. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/MonIT/__init__.py +0 -0
  219. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/PyCondor/PyCondorAPI.py +0 -0
  220. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/PyCondor/PyCondorUtils.py +0 -0
  221. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/PyCondor/__init__.py +0 -0
  222. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/ReqMgr/ReqMgr.py +0 -0
  223. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/ReqMgr/__init__.py +0 -0
  224. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/ReqMgrAux/ReqMgrAux.py +0 -0
  225. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/ReqMgrAux/__init__.py +0 -0
  226. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/RequestDB/RequestDBReader.py +0 -0
  227. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/RequestDB/RequestDBWriter.py +0 -0
  228. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/RequestDB/__init__.py +0 -0
  229. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/Requests.py +0 -0
  230. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/Rucio/Rucio.py +0 -0
  231. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/Rucio/RucioUtils.py +0 -0
  232. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/Rucio/__init__.py +0 -0
  233. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/RucioConMon/RucioConMon.py +0 -0
  234. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/RucioConMon/__init__.py +0 -0
  235. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/Service.py +0 -0
  236. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/StompAMQ/__init__.py +0 -0
  237. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/TagCollector/TagCollector.py +0 -0
  238. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/TagCollector/XMLUtils.py +0 -0
  239. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/TagCollector/__init__.py +0 -0
  240. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/UUIDLib.py +0 -0
  241. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/UserFileCache/UserFileCache.py +0 -0
  242. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/UserFileCache/__init__.py +0 -0
  243. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMAgent/WMAgent.py +0 -0
  244. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMAgent/__init__.py +0 -0
  245. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMArchive/CMSSWMetrics.py +0 -0
  246. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMArchive/DataMap.py +0 -0
  247. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMArchive/WMArchive.py +0 -0
  248. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMArchive/__init__.py +0 -0
  249. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMBS/WMBS.py +0 -0
  250. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMBS/__init__.py +0 -0
  251. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +0 -0
  252. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
  253. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStats/WMStatsPycurl.py +0 -0
  254. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStats/WMStatsReader.py +0 -0
  255. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStats/WMStatsWriter.py +0 -0
  256. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStats/__init__.py +0 -0
  257. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStatsServer/WMStatsServer.py +0 -0
  258. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WMStatsServer/__init__.py +0 -0
  259. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WorkQueue/WorkQueue.py +0 -0
  260. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/WorkQueue/__init__.py +0 -0
  261. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/__init__.py +0 -0
  262. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Services/pycurl_manager.py +0 -0
  263. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/WMBase.py +0 -0
  264. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/WMConnectionBase.py +0 -0
  265. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/WMException.py +0 -0
  266. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/WMExceptions.py +0 -0
  267. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/WMFactory.py +0 -0
  268. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/WMInit.py +0 -0
  269. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/WMLogging.py +0 -0
  270. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Wrappers/JsonWrapper/JSONThunker.py +0 -0
  271. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Wrappers/JsonWrapper/__init__.py +0 -0
  272. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/WMCore/Wrappers/__init__.py +0 -0
  273. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/reqmgr2ms_output.egg-info/SOURCES.txt +0 -0
  274. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/reqmgr2ms_output.egg-info/dependency_links.txt +0 -0
  275. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/reqmgr2ms_output.egg-info/requires.txt +0 -0
  276. {reqmgr2ms-output-2.3.2rc5 → reqmgr2ms-output-2.3.2rc8}/src/python/reqmgr2ms_output.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: reqmgr2ms-output
3
- Version: 2.3.2rc5
3
+ Version: 2.3.2rc8
4
4
  Summary: UNKNOWN
5
5
  Home-page: https://github.com/dmwm/WMCore
6
6
  Maintainer: CMS DMWM Group
@@ -0,0 +1,124 @@
1
+ #!/usr/bin/env python
2
+ """
3
+ File : adjustMongoDocs.py
4
+ Author : Valentin Kuznetsov <vkuznet AT gmail dot com>
5
+ Description: adjust documents in MongoDB with given schema
6
+ The script loops over given db documents (from given db name
7
+ and collection) and add to each document a new schema provided
8
+ via input file name, e.g.
9
+
10
+ # new schema addition:
11
+ cat > /tmp/schema.json << EOF
12
+ {"foo": 1}
13
+ EOF
14
+
15
+ # run script to update all documents in test.test database and add to them
16
+ # a json structure presented in /tmp/schema.json file
17
+ adjustMongoDocs.py --fin=/tmp/schema.json --dburi=localhost:8230 --dbname=test --dbcoll=test --verbose 1
18
+
19
+ # run script to add new transition record to all MSPileup records if they do not have it
20
+ adjustMongoDocs.py --add-tran-record --dburi=localhost:8230 --dbname=test --dbcoll=test --verbose 1
21
+
22
+ NOTE: the script can run from any location assuming it has proper db uri with
23
+ credentials and availability of mongo db outside of its own cluster, but most
24
+ likely it will be run on mongo db k8s cluster
25
+ """
26
+
27
+ import argparse
28
+ import json
29
+ from pymongo import MongoClient
30
+
31
+ # WMCore services
32
+ from Utils.Timers import gmtimeSeconds
33
+
34
+
35
+ class OptionParser(object):
36
+ "Helper class to handle script options"
37
+
38
+ def __init__(self):
39
+ "User based option parser"
40
+ self.parser = argparse.ArgumentParser(prog='PROG')
41
+ self.parser.add_argument("--fin", action="store",
42
+ dest="fin", default="", help="Input file with update fields")
43
+ self.parser.add_argument("--dburi", action="store",
44
+ dest="dburi", default="", help="MongoDB URI")
45
+ self.parser.add_argument("--dbname", action="store",
46
+ dest="dbname", default="", help="MongoDB database")
47
+ self.parser.add_argument("--dbcoll", action="store",
48
+ dest="dbcoll", default="", help="MongoDB collection")
49
+ self.parser.add_argument("--userdn", action="store",
50
+ dest="userDN", default='', help="user DN")
51
+ self.parser.add_argument("--add-tran-record", action="store_true",
52
+ dest="transition", help="add transaction record")
53
+ self.parser.add_argument("--verbose", action="store",
54
+ dest="verbose", default=0, help="verbosity level")
55
+
56
+
57
+ def addTransitionRecord(dburi, dbname, dbcoll, userDN, verbose):
58
+ """
59
+ Helper function to add and update in place transition record for existing MSPileup records
60
+ :param dburi: database URI (string)
61
+ :param dbname: database name (string)
62
+ :param dbcoll: database collection name (string)
63
+ :param userDN: string representing user DN
64
+ :param verbose: verbose flag (boolean)
65
+ :return: nothing
66
+ """
67
+ if not userDN:
68
+ raise Exception("No userDN provided")
69
+ conn = MongoClient(host=dburi)
70
+ records = [r for r in conn[dbname][dbcoll].find()]
71
+ for rec in records:
72
+ if not rec.get("transition"):
73
+ tranRecord = {'containerFraction': 1.0,
74
+ 'customDID': rec['pileupName'],
75
+ 'updateTime': gmtimeSeconds(),
76
+ 'DN': userDN}
77
+ rec['transition'] = [tranRecord]
78
+ if verbose:
79
+ print(f"update rec={rec} with new transition record={tranRecord}")
80
+ spec = {'pileupName': rec['pileupName'], 'customName': rec.get('customName', '')}
81
+ # perform update of the record
82
+ conn[dbname][dbcoll].update_one(spec, {'$set': {'transition': [tranRecord]}}, upsert=True)
83
+
84
+
85
+ def adjust(dburi, dbname, dbcoll, fin, verbose):
86
+ """
87
+ helper script to update documents in MongoDB with given db name/collection
88
+ and schema file (which should contain new addition, in form of JSON, to the
89
+ db documents)
90
+ :param dburi: database URI (string)
91
+ :param dbname: database name (string)
92
+ :param dbcoll: database collection name (string)
93
+ :param fin: input file with schema content
94
+ :param verbose: verbose flag (boolean)
95
+ :return: nothing
96
+ """
97
+ conn = MongoClient(host=dburi)
98
+ schema = {}
99
+ with open(fin, 'r', encoding='utf-8') as istream:
100
+ schema = json.load(istream)
101
+ if schema:
102
+ if verbose:
103
+ print(f"read data from '{dburi}', {dbname}/{dbcoll}")
104
+ records = [r for r in conn[dbname][dbcoll].find()]
105
+ for doc in records:
106
+ if verbose:
107
+ print(f"update doc={doc} with schema={schema}")
108
+ conn[dbname][dbcoll].update_one(doc, {'$set': schema}, upsert=True)
109
+
110
+
111
+ def main():
112
+ """
113
+ Main function
114
+ """
115
+ optmgr = OptionParser()
116
+ opts = optmgr.parser.parse_args()
117
+ if opts.transition:
118
+ addTransitionRecord(opts.dburi, opts.dbname, opts.dbcoll, opts.userDN, opts.verbose)
119
+ else:
120
+ adjust(opts.dburi, opts.dbname, opts.dbcoll, opts.fin, opts.verbose)
121
+
122
+
123
+ if __name__ == '__main__':
124
+ main()
@@ -9,6 +9,9 @@ used to update every single pileup document that it fetches from MSPileup.
9
9
 
10
10
  Example usage is:
11
11
  python3 updatePileupObjects.py --url=https://cmsweb.cern.ch --fin=override_data.json
12
+
13
+ # run script to add new transition record to all MSPileup records if they do not have it
14
+ python3 updatePileupObjects.py --add-tran-record -url=https://cmsweb.cern.ch --userDN=<user-dn>
12
15
  """
13
16
  import argparse
14
17
  import json
@@ -19,6 +22,9 @@ import urllib.request
19
22
  import ssl
20
23
  from http.client import HTTPSConnection
21
24
 
25
+ # WMCore services
26
+ from Utils.Timers import gmtimeSeconds
27
+
22
28
 
23
29
  class OptionParser():
24
30
  """Class to parse the command line arguments"""
@@ -26,13 +32,17 @@ class OptionParser():
26
32
  def __init__(self):
27
33
  "User based option parser"
28
34
  self.parser = argparse.ArgumentParser(prog='PROG')
29
- self.parser.add_argument("--fin", required=True,
30
- dest="fin", help="Input JSON file")
35
+ self.parser.add_argument("--fin", action="store",
36
+ dest="fin", default="", help="Input file with update fields (optional)")
31
37
  self.parser.add_argument("--dry-run", action="store_true",
32
38
  dest="dryrun", help="Fetch docs but do not update")
33
39
  self.parser.add_argument("--url", action="store",
34
40
  dest="url", default="https://cmsweb-testbed.cern.ch",
35
41
  help="URL for the MSPileup service")
42
+ self.parser.add_argument("--userdn", action="store",
43
+ dest="userDN", default='', help="user DN")
44
+ self.parser.add_argument("--add-tran-record", action="store_true",
45
+ dest="transition", help="add transition record")
36
46
 
37
47
 
38
48
  class HTTPSClientAuthHandler(urllib.request.HTTPSHandler):
@@ -147,6 +157,79 @@ def writePileupDocs(mspileupUrl, puDocs, handler, logger):
147
157
  logger.critical(msg)
148
158
 
149
159
 
160
+ def addTransitionRecords(handler, url, userDN, logger, dryrun):
161
+ """
162
+ Helper function to add and update in place transition record for existing MSPileup records
163
+ :param handler: HTTP handler to use
164
+ :param url: url to use (string)
165
+ :param userDN: string representing user DN
166
+ :param logger: logger to use
167
+ :param dryrun: option to run dry-run mode (boolean)
168
+ :return: nothing
169
+ """
170
+ if not userDN:
171
+ raise Exception("No userDN provided")
172
+ puDocs = getPileupDocs(url, handler, logger)
173
+ logger.info("Found %d documents in MSPileup", len(puDocs))
174
+ recordsToUpdate = []
175
+ for rec in puDocs:
176
+ if not rec.get("transition"):
177
+ tranRecord = {'containerFraction': 1.0,
178
+ 'customDID': rec['pileupName'],
179
+ 'updateTime': gmtimeSeconds(),
180
+ 'DN': userDN}
181
+ rec['transition'] = [tranRecord]
182
+ logger.info("New pileup document is: %s", rec)
183
+ recordsToUpdate.append(rec)
184
+
185
+ if dryrun:
186
+ logger.info("%s documents needs to be updated but are not written due to --dry-run option\n", len(recordsToUpdate))
187
+ else:
188
+ # finally, update the pileup documents in the database
189
+ writePileupDocs(url, recordsToUpdate, handler, logger)
190
+ logger.info("%s documents are uploaded to MSPileup\n", len(recordsToUpdate))
191
+
192
+
193
+ def updatePileupRecords(handler, url, logger, dryrun, fin=""):
194
+ """
195
+ helper function to update pileup records
196
+ :param handler: HTTP handler to use
197
+ :param url: url to use (string)
198
+ :param logger: logger object to use
199
+ :param dryrun: option to run dry-run mode (boolean)
200
+ :param fin: input file name to read from (optional, string)
201
+ :return: nothing
202
+ """
203
+ if fin:
204
+ if os.path.exists(fin):
205
+ with open(fin, 'r', encoding='utf-8') as istream:
206
+ puOverride = json.load(istream)
207
+ logger.info("Pileup override file: %s has the following content: %s", fin, puOverride)
208
+ else:
209
+ logger.error("Provided %s file does not exist", fin)
210
+ os.exit(1)
211
+ else:
212
+ logger.info("No input file is provided to update pileup records")
213
+ os.exit(1)
214
+
215
+ puDocs = getPileupDocs(url, handler, logger)
216
+ logger.info("Found %d documents in MSPileup", len(puDocs))
217
+
218
+ # update the documents with the override content
219
+ for doc in puDocs:
220
+ doc.update(puOverride)
221
+ logger.info("New pileup document is: %s", doc)
222
+
223
+ if dryrun:
224
+ logger.info("Updated documents (dry-run option):")
225
+ for doc in puDocs:
226
+ logger.info(doc)
227
+ else:
228
+ # finally, update the pileup documents in the database
229
+ writePileupDocs(url, puDocs, handler, logger)
230
+ logger.info("documents are uploaded to MSPileup\n")
231
+
232
+
150
233
  def main():
151
234
  """Executes everything"""
152
235
  optmgr = OptionParser()
@@ -179,24 +262,10 @@ def main():
179
262
  # initialize HTTPS client handler
180
263
  handler = HTTPSClientAuthHandler(key, cert)
181
264
 
182
- with open(opts.fin, 'r', encoding='utf-8') as istream:
183
- puOverride = json.load(istream)
184
- logger.info("Pileup override file: %s has the following content: %s", opts.fin, puOverride)
185
-
186
- puDocs = getPileupDocs(opts.url, handler, logger)
187
- logger.info("Found %d documents in MSPileup", len(puDocs))
188
-
189
- # update the documents with the override content
190
- for doc in puDocs:
191
- doc.update(puOverride)
192
- logger.info("New pileup document is: %s", doc)
193
-
194
- if opts.dryrun:
195
- logger.info("documents are not written due to --dry-run option\n")
265
+ if opts.transition:
266
+ addTransitionRecords(handler, opts.url, opts.userDN, logger, opts.dryrun)
196
267
  else:
197
- # finally, update the pileup documents in the database
198
- writePileupDocs(opts.url, puDocs, handler, logger)
199
- logger.info("documents are uploaded to MSPileup\n")
268
+ updatePileupRecords(handler, opts.url, logger, opts.dryrun, opts.fin)
200
269
 
201
270
 
202
271
  if __name__ == '__main__':
@@ -288,13 +288,15 @@ def modifyConfiguration(config, **args):
288
288
  if hasattr(config, "ArchiveDataReporter"):
289
289
  config.ArchiveDataReporter.WMArchiveURL = args["wmarchive_url"]
290
290
 
291
- # custom WMArchiveReporter
291
+ # custom WMArchiveReporter
292
292
  if hasattr(config, "WorkflowUpdater"):
293
+ config.WorkflowUpdater.dbsUrl = args.get("dbs3_reader_url", None)
293
294
  config.WorkflowUpdater.rucioUrl = args["rucio_host"]
294
295
  config.WorkflowUpdater.rucioAuthUrl = args["rucio_auth"]
295
296
  if args.get("mspileup_url", None):
296
297
  config.WorkflowUpdater.msPileupUrl = args["mspileup_url"]
297
298
 
299
+
298
300
  return config
299
301
 
300
302
 
@@ -319,7 +321,7 @@ def main(argv=None):
319
321
  "sb_hostname=", "sb_port=", "sb_basepath=", "ufc_hostname=", "ufc_port=",
320
322
  "ufc_service_url=", "ufc_cachedir=", "client_mapping=",
321
323
  "workload_summary_url=", "coredb_url=", "wmstats_url=", "ops_proxy=",
322
- "reqmgr2_url=", "acdc_url=", "amq_auth_file=", "dbs3_url=",
324
+ "reqmgr2_url=", "acdc_url=", "amq_auth_file=", "dbs3_url=", "dbs3_reader_url=",
323
325
  "dqm_url=", "grafana_token=", "requestcouch_url=", "central_logdb_url=",
324
326
  "wmarchive_url=", "amq_credentials=",
325
327
  "rucio_account=", "rucio_host=", "rucio_auth=", "mspileup_url="])
@@ -343,7 +345,7 @@ def main(argv=None):
343
345
  '--ufc_port', '--ufc_service_url', '--ufc_cachedir',
344
346
  '--client_mapping', '--workload_summary_url',
345
347
  '--wmstats_url', '--ops_proxy', '--reqmgr2_url', '--acdc_url',
346
- '--amq_auth_file', '--dbs3_url', '--dqm_url',
348
+ '--amq_auth_file', '--dbs3_url', '--dbs3_reader_url', '--dqm_url',
347
349
  '--grafana_token', '--requestcouch_url', '--central_logdb_url',
348
350
  '--wmarchive_url', '--amq_credentials',
349
351
  '--rucio_account', '--rucio_host', '--rucio_auth', '--mspileup_url'):
@@ -99,7 +99,7 @@ def searchblock(candidate):
99
99
  """
100
100
  A block name with a * wildcard one or more times in it.
101
101
  """
102
- regexp = r"^/(\*|[a-zA-Z\*][a-zA-Z0-9_\*]{0,100})(/(\*|[a-zA-Z0-9_\.\-\*]{1,199})){0,1}(/(\*|[A-Z\-\*]{1,99})(#(\*|[a-zA-Z0-9\.\-_\*]){0,100}){0,1}){0,1}$"
102
+ regexp = r"^/(\*|[a-zA-Z\*][a-zA-Z0-9_\*]{0,100})(/(\*|[a-zA-Z0-9_\.\-\*]{1,199})){0,1}(/(\*|[A-Z0-9\-\*]{1,99})(#(\*|[a-zA-Z0-9\.\-_\*]){0,100}){0,1}){0,1}$"
103
103
  return check(regexp, candidate)
104
104
 
105
105
 
@@ -354,8 +354,8 @@ def lfn(candidate):
354
354
 
355
355
  Add for LHE files: /data/lhe/...
356
356
  """
357
- regexp1 = '/([a-z]+)/([a-z0-9]+)/(%(era)s)/([a-zA-Z0-9\-_]+)/([A-Z\-_]+)/([a-zA-Z0-9\-_]+)((/[0-9]+){3}){0,1}/([0-9]+)/([a-zA-Z0-9\-_]+).root' % lfnParts
358
- regexp2 = '/([a-z]+)/([a-z0-9]+)/([a-z0-9]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([A-Z\-_]+)/([a-zA-Z0-9\-_]+)((/[0-9]+){3}){0,1}/([0-9]+)/([a-zA-Z0-9\-_]+).root'
357
+ regexp1 = '/([a-z]+)/([a-z0-9]+)/(%(era)s)/([a-zA-Z0-9\-_]+)/([A-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)((/[0-9]+){3}){0,1}/([0-9]+)/([a-zA-Z0-9\-_]+).root' % lfnParts
358
+ regexp2 = '/([a-z]+)/([a-z0-9]+)/([a-z0-9]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([A-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)((/[0-9]+){3}){0,1}/([0-9]+)/([a-zA-Z0-9\-_]+).root'
359
359
  regexp3 = '/store/(temp/)*(user|group)/(%(hnName)s|%(physics_group)s)/%(primDS)s/%(procDS)s/%(version)s/%(counter)s/%(root)s' % lfnParts
360
360
  regexp4 = '/store/(temp/)*(user|group)/(%(hnName)s|%(physics_group)s)/%(primDS)s/(%(subdir)s/)+%(root)s' % lfnParts
361
361
 
@@ -437,8 +437,8 @@ def lfnBase(candidate):
437
437
  As lfn above, but for doing the lfnBase
438
438
  i.e., for use in spec generation and parsing
439
439
  """
440
- regexp1 = '/([a-z]+)/([a-z0-9]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([A-Z\-_]+)/([a-zA-Z0-9\-_]+)'
441
- regexp2 = '/([a-z]+)/([a-z0-9]+)/([a-z0-9]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([A-Z\-_]+)/([a-zA-Z0-9\-_]+)((/[0-9]+){3}){0,1}'
440
+ regexp1 = '/([a-z]+)/([a-z0-9]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([A-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)'
441
+ regexp2 = '/([a-z]+)/([a-z0-9]+)/([a-z0-9]+)/([a-zA-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)/([A-Z0-9\-_]+)/([a-zA-Z0-9\-_]+)((/[0-9]+){3}){0,1}'
442
442
  regexp3 = '/(store)/(temp/)*(user|group)/(%(hnName)s|%(physics_group)s)/%(primDS)s/%(procDS)s/%(version)s' % lfnParts
443
443
 
444
444
  tier0LFN = '/store/(backfill/[0-9]/){0,1}(t0temp/|unmerged/){0,1}(data|express|hidata)/%(era)s/%(primDS)s/%(tier)s/%(version)s/%(counter)s/%(counter)s/%(counter)s' % lfnParts
@@ -11,20 +11,23 @@ import urllib
11
11
  from WMCore.Services.pycurl_manager import getdata as multi_getdata
12
12
 
13
13
 
14
- def getBlockInfo4PU(blockNames, ckey, cert):
14
+ def getBlockInfo4PU(blockNames, dbsUrl, ckey, cert):
15
15
  """
16
16
  Fetch block information details, file list and number of events, from DBS
17
17
  server. Here we use concrete set of parameters for DBS to use in this case, i.e.
18
18
  we must look-up only valid files and get full details from the DBS API (in order
19
19
  to get number of events).
20
20
  :param blockNames: list of block names
21
+ :param dbsUrl: dbs URL
22
+ :param ckey: user keyfile
23
+ :param cert: user certificate
21
24
  :return: dictionary of {block: {"FileList": list of strings, "NumberOfEvents": integer}, ...}
22
25
  """
23
26
  urls = []
24
27
  for blk in blockNames:
25
28
  # need to encode block name properly
26
29
  block = urllib.parse.quote_plus(blk)
27
- url = f"https://cmsweb-prod.cern.ch/dbs/prod/global/DBSReader/files?detail=true&validFileOnly=1&block_name={block}"
30
+ url = f"{dbsUrl}/files?detail=true&validFileOnly=1&block_name={block}"
28
31
  urls.append(url)
29
32
  # place concurrent calls to DBS, please note that multi_getdata is generator, therefore
30
33
  # it does not put DBS results into the memory until this generator is iterated
@@ -6,5 +6,5 @@ Core libraries for Workload Management Packages
6
6
 
7
7
  """
8
8
 
9
- __version__ = '2.3.2rc5'
9
+ __version__ = '2.3.2rc8'
10
10
  __all__ = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: reqmgr2ms-output
3
- Version: 2.3.2rc5
3
+ Version: 2.3.2rc8
4
4
  Summary: UNKNOWN
5
5
  Home-page: https://github.com/dmwm/WMCore
6
6
  Maintainer: CMS DMWM Group
@@ -1,73 +0,0 @@
1
- #!/usr/bin/env python
2
- """
3
- File : adjustMongoDocs.py
4
- Author : Valentin Kuznetsov <vkuznet AT gmail dot com>
5
- Description: adjust documents in MongoDB with given schema
6
- The script loops over given db documents (from given db name
7
- and collection) and add to each document a new schema provided
8
- via input file name, e.g.
9
-
10
- # new schema addition:
11
- cat > /tmp/schema.json << EOF
12
- {"foo": 1}
13
- EOF
14
-
15
- # run script to update all documents in test.test database and add to them
16
- # a json structure presented in /tmp/schema.json file
17
- adjustMongoDocs.py --fin=/tmp/schema.json --dburi=localhost:8230 --dbname=test --dbcoll=test --verbose 1
18
-
19
- NOTE: the script can run from any location assuming it has proper db uri with
20
- credentials and availability of mongo db outside of its own cluster, but most
21
- likely it will be run on mongo db k8s cluster
22
- """
23
-
24
- import argparse
25
- import json
26
- from pymongo import MongoClient
27
-
28
-
29
- class OptionParser(object):
30
- "Helper class to handle script options"
31
-
32
- def __init__(self):
33
- "User based option parser"
34
- self.parser = argparse.ArgumentParser(prog='PROG')
35
- self.parser.add_argument("--fin", action="store",
36
- dest="fin", default="", help="Input file with update fields")
37
- self.parser.add_argument("--dburi", action="store",
38
- dest="dburi", default="", help="MongoDB URI")
39
- self.parser.add_argument("--dbname", action="store",
40
- dest="dbname", default="", help="MongoDB database")
41
- self.parser.add_argument("--dbcoll", action="store",
42
- dest="dbcoll", default="", help="MongoDB collection")
43
- self.parser.add_argument("--verbose", action="store",
44
- dest="verbose", default=0, help="verbosity level")
45
-
46
-
47
- def adjust():
48
- """
49
- helper script to update documents in MongoDB with given db name/collection
50
- and schema file (which should contain new addition, in form of JSON, to the
51
- db documents)
52
- """
53
- optmgr = OptionParser()
54
- opts = optmgr.parser.parse_args()
55
- conn = MongoClient(host=opts.dburi)
56
- dbname = opts.dbname
57
- dbcoll = opts.dbcoll
58
- verbose = opts.verbose
59
- schema = {}
60
- with open(opts.fin, 'r', encoding='utf-8') as istream:
61
- schema = json.load(istream)
62
- if schema:
63
- if verbose:
64
- print("read data from '%s', %s/%s" % (opts.dburi, dbname, dbcoll))
65
- records = [r for r in conn[dbname][dbcoll].find()]
66
- for doc in records:
67
- if verbose:
68
- print("update doc=%s with schema=%s" % (doc, schema))
69
- conn[dbname][dbcoll].update_one(doc, {'$set': schema}, upsert=True)
70
-
71
-
72
- if __name__ == '__main__':
73
- adjust()