reqmgr2ms-output 2.2.4rc10__tar.gz → 2.2.4.2__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (267) hide show
  1. {reqmgr2ms-output-2.2.4rc10/src/python/reqmgr2ms_output.egg-info → reqmgr2ms-output-2.2.4.2}/PKG-INFO +1 -1
  2. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/IteratorTools.py +17 -1
  3. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSCore/MSManager.py +4 -3
  4. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Error.py +21 -0
  5. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/DBS/DBS3Reader.py +68 -25
  6. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/__init__.py +1 -1
  7. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2/src/python/reqmgr2ms_output.egg-info}/PKG-INFO +1 -1
  8. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/LICENSE +0 -0
  9. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/MANIFEST.in +0 -0
  10. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/NOTICE +0 -0
  11. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/README.md +0 -0
  12. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/HWMon/wmcore-SysStat +0 -0
  13. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/acdcserver-tools +0 -0
  14. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/ParseSpecCmsswdist.py +0 -0
  15. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/checkDsetFileCount.py +0 -0
  16. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/checkStuckLQE.py +0 -0
  17. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/createPileupObjects.py +0 -0
  18. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/drainAgent.py +0 -0
  19. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/getWQStatusByWorkflow.py +0 -0
  20. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/mongoInit.py +0 -0
  21. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/parseUnifiedCampaigns.py +0 -0
  22. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/setrequeststatus.py +0 -0
  23. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/summaryWMStatsFailures.py +0 -0
  24. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/updateTotalStats.py +0 -0
  25. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/adhoc-scripts/workflowCompletion.py +0 -0
  26. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/attempt-to-patch.sh +0 -0
  27. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/buildrelease.sh +0 -0
  28. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/check-ACDC-parentage +0 -0
  29. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/check-phedex-dbs-status +0 -0
  30. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/check-request-wq-status +0 -0
  31. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/clean-oracle +0 -0
  32. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/combineMinifyWMStats.py +0 -0
  33. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/couch-thrash.py +0 -0
  34. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/couch_archiver.py +0 -0
  35. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/create-iam-token.sh +0 -0
  36. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/createStoreResults.py +0 -0
  37. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/dbsbuffer-file-fix.py +0 -0
  38. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/deploy-rpm-to-jenkins.sh +0 -0
  39. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/fix-dbs-parentage +0 -0
  40. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/inject-to-config-cache +0 -0
  41. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/kill-workflow-in-agent +0 -0
  42. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/kill-workflow-in-global +0 -0
  43. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/make-local-clones.sh +0 -0
  44. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/outputmodules-from-config +0 -0
  45. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/patchComponent.sh +0 -0
  46. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/paused-jobs +0 -0
  47. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/purgeDeletedCouchDoc.py +0 -0
  48. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/reqmgr-put-default-config +0 -0
  49. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/reqmgr-sw-update +0 -0
  50. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/vaildateCMSSWMergeVersion +0 -0
  51. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmagent-couchapp-init +0 -0
  52. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmagent-delete-couchdb-workflow +0 -0
  53. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmagent-mod-config +0 -0
  54. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmagent-resource-control +0 -0
  55. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmagent-unregister-wmstats +0 -0
  56. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmagent-upload-config +0 -0
  57. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmagent-workqueue +0 -0
  58. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmc-dist-patch +0 -0
  59. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmc-dist-unpatch +0 -0
  60. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmc-httpd +0 -0
  61. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmcore-db-init +0 -0
  62. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmcore-new-config +0 -0
  63. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmcore-new-flow +0 -0
  64. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/bin/wmcoreD +0 -0
  65. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/requirements.txt +0 -0
  66. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/setup.cfg +0 -0
  67. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/setup.py +0 -0
  68. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/setup_build.py +0 -0
  69. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/setup_dependencies.py +0 -0
  70. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/CPMetrics.py +0 -0
  71. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/CertTools.py +0 -0
  72. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/EmailAlert.py +0 -0
  73. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/ExtendedUnitTestCase.py +0 -0
  74. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/FileTools.py +0 -0
  75. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/MathUtils.py +0 -0
  76. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/MemoryCache.py +0 -0
  77. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Patterns.py +0 -0
  78. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Pipeline.py +0 -0
  79. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/PortForward.py +0 -0
  80. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/ProcessStats.py +0 -0
  81. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/PythonVersion.py +0 -0
  82. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Signals.py +0 -0
  83. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/TemporaryEnvironment.py +0 -0
  84. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Throttled.py +0 -0
  85. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Timers.py +0 -0
  86. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Timestamps.py +0 -0
  87. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/TokenManager.py +0 -0
  88. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Tracing.py +0 -0
  89. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/TwPrint.py +0 -0
  90. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/Utilities.py +0 -0
  91. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/Utils/__init__.py +0 -0
  92. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/Alarm.py +0 -0
  93. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/MathAlgos.py +0 -0
  94. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/MiscAlgos.py +0 -0
  95. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/ParseXMLFile.py +0 -0
  96. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/Permissions.py +0 -0
  97. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/Singleton.py +0 -0
  98. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/SubprocessAlgos.py +0 -0
  99. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Algorithms/__init__.py +0 -0
  100. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Cache/GenericDataCache.py +0 -0
  101. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Cache/WMConfigCache.py +0 -0
  102. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Cache/__init__.py +0 -0
  103. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Configuration.py +0 -0
  104. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DAOFactory.py +0 -0
  105. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/File.py +0 -0
  106. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/Fileset.py +0 -0
  107. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/Job.py +0 -0
  108. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/JobGroup.py +0 -0
  109. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/JobPackage.py +0 -0
  110. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/LumiList.py +0 -0
  111. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/Mask.py +0 -0
  112. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +0 -0
  113. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +0 -0
  114. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/MathStructs/SummaryHistogram.py +0 -0
  115. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/MathStructs/__init__.py +0 -0
  116. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/Pickleable.py +0 -0
  117. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/Run.py +0 -0
  118. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/Subscription.py +0 -0
  119. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/WMObject.py +0 -0
  120. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/WorkUnit.py +0 -0
  121. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/Workflow.py +0 -0
  122. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/DataStructs/__init__.py +0 -0
  123. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/CMSCouch.py +0 -0
  124. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/ConfigDBMap.py +0 -0
  125. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/CouchUtils.py +0 -0
  126. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/DBCore.py +0 -0
  127. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/DBCreator.py +0 -0
  128. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/DBExceptionHandler.py +0 -0
  129. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/DBFactory.py +0 -0
  130. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/DBFormatter.py +0 -0
  131. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/Dialects.py +0 -0
  132. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/ExecuteDAO.py +0 -0
  133. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/MongoDB.py +0 -0
  134. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/MySQL/Destroy.py +0 -0
  135. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/MySQL/ListUserContent.py +0 -0
  136. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/MySQL/__init__.py +0 -0
  137. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/MySQLCore.py +0 -0
  138. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/Oracle/Destroy.py +0 -0
  139. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/Oracle/ListUserContent.py +0 -0
  140. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/Oracle/__init__.py +0 -0
  141. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/ResultSet.py +0 -0
  142. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/Transaction.py +0 -0
  143. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/__init__.py +0 -0
  144. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Database/ipy_profile_couch.py +0 -0
  145. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/GroupUser/CouchObject.py +0 -0
  146. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/GroupUser/Decorators.py +0 -0
  147. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/GroupUser/Group.py +0 -0
  148. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/GroupUser/Interface.py +0 -0
  149. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/GroupUser/User.py +0 -0
  150. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/GroupUser/__init__.py +0 -0
  151. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Lexicon.py +0 -0
  152. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/CherryPyThreads/HeartbeatMonitor.py +0 -0
  153. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/CherryPyThreads/__init__.py +0 -0
  154. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/DataStructs/DefaultStructs.py +0 -0
  155. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/DataStructs/__init__.py +0 -0
  156. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSCore/MSAuth.py +0 -0
  157. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSCore/MSCore.py +0 -0
  158. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSCore/TaskManager.py +0 -0
  159. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSCore/__init__.py +0 -0
  160. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSOutput/MSOutput.py +0 -0
  161. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSOutput/MSOutputStreamer.py +0 -0
  162. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSOutput/MSOutputTemplate.py +0 -0
  163. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSOutput/RelValPolicy.py +0 -0
  164. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/MSOutput/__init__.py +0 -0
  165. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/Service/Data.py +0 -0
  166. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/Service/RestApiHub.py +0 -0
  167. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/Service/__init__.py +0 -0
  168. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/Tools/Common.py +0 -0
  169. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/Tools/PycurlRucio.py +0 -0
  170. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/Tools/__init__.py +0 -0
  171. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/WebGui/FrontPage.py +0 -0
  172. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/MicroService/WebGui/__init__.py +0 -0
  173. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Auth.py +0 -0
  174. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/CherryPyPeriodicTask.py +0 -0
  175. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Format.py +0 -0
  176. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/HeartbeatMonitorBase.py +0 -0
  177. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Main.py +0 -0
  178. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Server.py +0 -0
  179. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Services.py +0 -0
  180. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Test.py +0 -0
  181. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Tools.py +0 -0
  182. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/Validation.py +0 -0
  183. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/REST/__init__.py +0 -0
  184. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/ReqMgr/DataStructs/RequestStatus.py +0 -0
  185. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/ReqMgr/DataStructs/RequestType.py +0 -0
  186. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/ReqMgr/DataStructs/__init__.py +0 -0
  187. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/ReqMgr/__init__.py +0 -0
  188. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/AlertManager/AlertManagerAPI.py +0 -0
  189. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/AlertManager/__init__.py +0 -0
  190. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/CRIC/CRIC.py +0 -0
  191. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/CRIC/__init__.py +0 -0
  192. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/DBS/DBSErrors.py +0 -0
  193. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/DBS/DBSReader.py +0 -0
  194. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/DBS/DBSUtils.py +0 -0
  195. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/DBS/DBSWriterObjects.py +0 -0
  196. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/DBS/ProdException.py +0 -0
  197. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/DBS/__init__.py +0 -0
  198. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/FWJRDB/FWJRDBAPI.py +0 -0
  199. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/FWJRDB/__init__.py +0 -0
  200. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/HTTPS/HTTPSAuthHandler.py +0 -0
  201. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/HTTPS/__init__.py +0 -0
  202. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/LogDB/LogDB.py +0 -0
  203. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/LogDB/LogDBBackend.py +0 -0
  204. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/LogDB/LogDBExceptions.py +0 -0
  205. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/LogDB/LogDBReport.py +0 -0
  206. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/LogDB/__init__.py +0 -0
  207. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/McM/McM.py +0 -0
  208. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/McM/__init__.py +0 -0
  209. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/MonIT/Grafana.py +0 -0
  210. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/MonIT/__init__.py +0 -0
  211. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/PyCondor/PyCondorAPI.py +0 -0
  212. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/PyCondor/PyCondorUtils.py +0 -0
  213. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/PyCondor/__init__.py +0 -0
  214. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/ReqMgr/ReqMgr.py +0 -0
  215. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/ReqMgr/__init__.py +0 -0
  216. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/ReqMgrAux/ReqMgrAux.py +0 -0
  217. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/ReqMgrAux/__init__.py +0 -0
  218. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/RequestDB/RequestDBReader.py +0 -0
  219. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/RequestDB/RequestDBWriter.py +0 -0
  220. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/RequestDB/__init__.py +0 -0
  221. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/Requests.py +0 -0
  222. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/Rucio/Rucio.py +0 -0
  223. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/Rucio/RucioUtils.py +0 -0
  224. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/Rucio/__init__.py +0 -0
  225. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/RucioConMon/RucioConMon.py +0 -0
  226. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/RucioConMon/__init__.py +0 -0
  227. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/Service.py +0 -0
  228. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/StompAMQ/__init__.py +0 -0
  229. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/TagCollector/TagCollector.py +0 -0
  230. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/TagCollector/XMLUtils.py +0 -0
  231. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/TagCollector/__init__.py +0 -0
  232. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/UUIDLib.py +0 -0
  233. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/UserFileCache/UserFileCache.py +0 -0
  234. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/UserFileCache/__init__.py +0 -0
  235. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMAgent/WMAgent.py +0 -0
  236. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMAgent/__init__.py +0 -0
  237. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMArchive/CMSSWMetrics.py +0 -0
  238. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMArchive/DataMap.py +0 -0
  239. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMArchive/WMArchive.py +0 -0
  240. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMArchive/__init__.py +0 -0
  241. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMBS/WMBS.py +0 -0
  242. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMBS/__init__.py +0 -0
  243. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +0 -0
  244. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMStats/DataStruct/__init__.py +0 -0
  245. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMStats/WMStatsReader.py +0 -0
  246. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMStats/WMStatsWriter.py +0 -0
  247. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMStats/__init__.py +0 -0
  248. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMStatsServer/WMStatsServer.py +0 -0
  249. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WMStatsServer/__init__.py +0 -0
  250. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WorkQueue/WorkQueue.py +0 -0
  251. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/WorkQueue/__init__.py +0 -0
  252. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/__init__.py +0 -0
  253. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Services/pycurl_manager.py +0 -0
  254. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/WMBase.py +0 -0
  255. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/WMConnectionBase.py +0 -0
  256. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/WMException.py +0 -0
  257. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/WMExceptions.py +0 -0
  258. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/WMFactory.py +0 -0
  259. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/WMInit.py +0 -0
  260. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/WMLogging.py +0 -0
  261. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Wrappers/JsonWrapper/JSONThunker.py +0 -0
  262. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Wrappers/JsonWrapper/__init__.py +0 -0
  263. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/WMCore/Wrappers/__init__.py +0 -0
  264. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/reqmgr2ms_output.egg-info/SOURCES.txt +0 -0
  265. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/reqmgr2ms_output.egg-info/dependency_links.txt +0 -0
  266. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/src/python/reqmgr2ms_output.egg-info/requires.txt +0 -0
  267. {reqmgr2ms-output-2.2.4rc10 → reqmgr2ms-output-2.2.4.2}/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.2.4rc10
3
+ Version: 2.2.4.2
4
4
  Summary: UNKNOWN
5
5
  Home-page: https://github.com/dmwm/WMCore
6
6
  Maintainer: CMS DMWM Group
@@ -2,7 +2,7 @@
2
2
 
3
3
  from builtins import str, map
4
4
  import collections
5
- from itertools import islice, chain
5
+ from itertools import islice, chain, groupby
6
6
 
7
7
  def grouper(iterable, n):
8
8
  """
@@ -24,6 +24,7 @@ def flattenList(doubleList):
24
24
  """
25
25
  return list(chain.from_iterable(doubleList))
26
26
 
27
+
27
28
  def nestedDictUpdate(d, u):
28
29
  """
29
30
  Code from Alex Matelli
@@ -50,3 +51,18 @@ def convertFromUnicodeToBytes(data):
50
51
  return type(data)(list(map(convertFromUnicodeToBytes, data)))
51
52
  else:
52
53
  return data
54
+
55
+
56
+ def makeListElementsUnique(listObj):
57
+ """
58
+ Given a list of lists or a list of tuples, find all duplicate elements
59
+ and make them unique.
60
+ :param listObj: an unsorted list of lists or a list of tuples, e.g.:
61
+ [[1, 1], [1, 5], [1, 1]]; or
62
+ [(1, 1), (1, 5), (1, 1)]
63
+ :return: the same list object but with no duplicates
64
+
65
+ Source: https://stackoverflow.com/questions/2213923/removing-duplicates-from-a-list-of-lists
66
+ """
67
+ listObj.sort()
68
+ return list(k for k, _ in groupby(listObj))
@@ -11,7 +11,7 @@ used in service config.py as following
11
11
  # REST interface
12
12
  data = views.section_('data')
13
13
  data.object = 'WMCore.MicroService.Service.RestApiHub.RestApiHub'
14
- data.manager = 'WMCore.MicroService.Unified.MSManager.MSManager'
14
+ data.manager = 'WMCore.MicroService.MSManager.MSManager'
15
15
  data.reqmgr2Url = "%s/reqmgr2" % BASE_URL
16
16
  data.limitRequestsPerCycle = 500
17
17
  data.enableStatusTransition = False
@@ -217,8 +217,9 @@ class MSManager(object):
217
217
  def transferor(self, reqStatus):
218
218
  """
219
219
  MSManager transferor function.
220
- It performs Unified logic for data subscription and
221
- transfers requests from assigned to staging/staged state of ReqMgr2.
220
+ It performs input data placement logic for workflows that have
221
+ been assigned in the system. Successful workflows will be moved
222
+ to the staging status in ReqMgr2.
222
223
  For references see
223
224
  https://github.com/dmwm/WMCore/wiki/ReqMgr2-MicroService-Transferor
224
225
  """
@@ -226,6 +226,27 @@ class ExecutionError(RESTError):
226
226
  app_code = 403
227
227
  message = "Execution error"
228
228
 
229
+
230
+ class MissingBodyData(RESTError):
231
+ """Exception for requests missing body data."""
232
+ http_code = 400
233
+ app_code = 1201
234
+
235
+ def __init__(self):
236
+ RESTError.__init__(self)
237
+ self.message = "User did not pass any body data with the request"
238
+
239
+
240
+ class InvalidUnifiedSchema(RESTError):
241
+ """Exception for incorrect user data schema."""
242
+ http_code = 400
243
+ app_code = 1202
244
+
245
+ def __init__(self, message):
246
+ RESTError.__init__(self)
247
+ self.message = message
248
+
249
+
229
250
  def report_error_header(header, val):
230
251
  """If `val` is non-empty, set CherryPy response `header` to `val`.
231
252
  Replaces all newlines with "; " characters. If the resulting value is
@@ -20,7 +20,7 @@ from dbs.apis.dbsClient import DbsApi
20
20
  from dbs.exceptions.dbsClientException import dbsClientException
21
21
  from retry import retry
22
22
 
23
- from Utils.IteratorTools import grouper
23
+ from Utils.IteratorTools import grouper, makeListElementsUnique
24
24
  from Utils.PythonVersion import PY2
25
25
  from WMCore.Services.DBS.DBSErrors import DBSReaderError, formatEx3
26
26
  from WMCore.Services.DBS.DBSUtils import dbsListFileParents, dbsListFileLumis, \
@@ -848,18 +848,26 @@ class DBS3Reader(object):
848
848
  result.append({"ParentDataset": parent['parent_dataset'], "ParentFiles": list(parentFiles[childLFN])})
849
849
  return result
850
850
 
851
- def insertFileParents(self, childBlockName, childParentsIDPairs):
851
+ def insertFileParents(self, childBlockName, childParentsIDPairs, missingFiles=0):
852
852
  """
853
+ For a given block name, inject its child/parent file id relationship
853
854
  :param childBlockName: child block name
854
855
  :param childParentsIDPairs: list of list child and parent file ids, i.e. [[1,2], [3,4]...]
855
856
  dbs validate child ids from the childBlockName
857
+ :param missingFiles: an integer with the number of children files missing parents
856
858
  :return: None
857
859
  """
858
- return self.dbs.insertFileParents({"block_name": childBlockName, "child_parent_id_list": childParentsIDPairs})
860
+ self.logger.debug("Going to insert parentage for child_parent_id_list: %s",
861
+ childParentsIDPairs)
862
+ return self.dbs.insertFileParents({"block_name": childBlockName,
863
+ "child_parent_id_list": childParentsIDPairs,
864
+ "missing_files": missingFiles})
859
865
 
860
866
  def listBlocksWithNoParents(self, childDataset):
861
867
  """
862
- :param childDataset: child dataset for
868
+ Given a dataset name, list all its blocks, fetch their parentage
869
+ blocks and return a set of blocks without any parentage information.
870
+ :param childDataset: string with a dataset name
863
871
  :return: set of child blocks with no parentBlock
864
872
  """
865
873
  allBlocks = self.dbs.listBlocks(dataset=childDataset)
@@ -916,29 +924,11 @@ class DBS3Reader(object):
916
924
  self.logger.info("Found %d blocks without parentage information", len(blocks))
917
925
  for blockName in blocks:
918
926
  try:
919
- self.logger.info("Fixing parentage for block: %s", blockName)
920
- childFlatData = self.getChildBlockTrio(blockName)
921
- listChildParent = []
922
-
923
- # first resolve parentage for all common runLumi pairs between childBlock and parentDataset
924
- for runLumi in childFlatData.keys() & parentFlatData.keys():
925
- childFileId = childFlatData[runLumi]
926
- parentFileId = parentFlatData[runLumi]
927
- listChildParent.append([childFileId, parentFileId])
928
-
929
- # then add all run lumi pairs which are missing at the parent Dataset by appending None as parentage information
930
- for runLumi in childFlatData.keys() - parentFlatData.keys():
931
- childFileId = childFlatData[runLumi]
932
- parentFileId = None
933
- listChildParent.append([childFileId, parentFileId])
934
- msg = "Child file id: %s, with run/lumi: %s, has no match in the parent dataset. "
935
- msg += "Adding it with null parentage information to DBS."
936
- self.logger.warning(msg, childFileId, runLumi)
937
-
927
+ listChildParent, countMissingFiles = self._compileParentageList(blockName, parentFlatData)
938
928
  # insert block parentage information to DBS
939
929
  if insertFlag and any(listChildParent):
940
- self.insertFileParents(blockName, listChildParent)
941
- self.logger.info("Parentage information successfuly added to DBS for block %s", blockName)
930
+ self.insertFileParents(blockName, listChildParent, countMissingFiles)
931
+ self.logger.info("Parentage information successfully added to DBS for block %s", blockName)
942
932
  else:
943
933
  self.logger.warning("No parentage information added to DBS for block %s", blockName)
944
934
  except Exception as ex:
@@ -948,6 +938,59 @@ class DBS3Reader(object):
948
938
 
949
939
  return failedBlocks
950
940
 
941
+ def _compileParentageList(self, blockName, parentRunLumi):
942
+ """
943
+ Method to find out child and parent file relationship based
944
+ on their run/lumi tuples.
945
+ :param blockName: string with the child block name
946
+ :param parentRunLumi: a set like {(1, 53): 3077147397, (1, 54): 3077147397, (1, 27): 3077147397
947
+ :return: a list of child/parent file id tuples and a set of children files
948
+ that are missing parent files, e.g.
949
+ [[3077147917, 3077148037], [3077147917, 3077148037], 123
950
+ """
951
+ self.logger.info("Compiling parentage list for block: %s", blockName)
952
+ # fetch run/lumi and file ids for the child block name
953
+ childFlatData = self.getChildBlockTrio(blockName)
954
+
955
+ self.logger.debug("Block name: %s has this run/lumi/file id information: %s",
956
+ blockName, childFlatData)
957
+ listChildParent = []
958
+
959
+ # first resolve parentage for all common runLumi pairs between childBlock and parentDataset
960
+ withParents = set()
961
+ for runLumi in childFlatData.keys() & parentRunLumi.keys():
962
+ childFileId = childFlatData[runLumi]
963
+ withParents.add(childFileId)
964
+ parentFileId = parentRunLumi[runLumi]
965
+ listChildParent.append([childFileId, parentFileId])
966
+
967
+ # the next for loop will find all the children files with missing parents
968
+ # and set their parent file id to -1 instead, unless that child id already has
969
+ # a valid parent file for other lumi(s)
970
+ missingParents = set()
971
+ for runLumi in childFlatData.keys() - parentRunLumi.keys():
972
+ childFileId = childFlatData[runLumi]
973
+ msg = "Child file id: %s, with run/lumi: %s, has no match in the parent dataset. "
974
+ if childFileId in withParents:
975
+ msg += "It does have parent files for other run/lumis though."
976
+ self.logger.warning(msg, childFileId, runLumi)
977
+ continue
978
+ missingParents.add(childFileId)
979
+ listChildParent.append([childFileId, -1])
980
+ msg += "Adding it with -1 parentage information to DBS."
981
+ self.logger.warning(msg, childFileId, runLumi)
982
+ self.logger.debug("Files with parent: %s, without: %s, non-unique tuples: %d",
983
+ withParents, missingParents, len(listChildParent))
984
+
985
+ # now find out files missing parent that do not have any other parent
986
+ missingParents = missingParents - withParents
987
+ # and make it a unique list of child/parent file ids
988
+ listChildParent = makeListElementsUnique(listChildParent)
989
+
990
+ self.logger.info("Block: %s has %d child/parent tuples and it is missing %d files",
991
+ blockName, len(listChildParent), len(missingParents))
992
+ return listChildParent, len(missingParents)
993
+
951
994
  def getParentDatasetTrio(self, childDataset):
952
995
  """
953
996
  Provided a dataset name, return all the parent dataset information, such as:
@@ -6,5 +6,5 @@ Core libraries for Workload Management Packages
6
6
 
7
7
  """
8
8
 
9
- __version__ = '2.2.4rc10'
9
+ __version__ = '2.2.4.2'
10
10
  __all__ = []
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.2
2
2
  Name: reqmgr2ms-output
3
- Version: 2.2.4rc10
3
+ Version: 2.2.4.2
4
4
  Summary: UNKNOWN
5
5
  Home-page: https://github.com/dmwm/WMCore
6
6
  Maintainer: CMS DMWM Group