reqmgr2ms-output 2.3.8rc10__tar.gz → 2.3.8rc11__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {reqmgr2ms-output-2.3.8rc10/src/python/reqmgr2ms_output.egg-info → reqmgr2ms-output-2.3.8rc11}/PKG-INFO +1 -1
- reqmgr2ms-output-2.3.8rc11/bin/patchCluster.sh +259 -0
- reqmgr2ms-output-2.3.8rc11/bin/patchComponent.sh +366 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/MSManager.py +5 -0
- reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/MSUtils/MSUtils.py +54 -0
- reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/WorkQueue/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/__init__.py +1 -1
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11/src/python/reqmgr2ms_output.egg-info}/PKG-INFO +1 -1
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/reqmgr2ms_output.egg-info/SOURCES.txt +3 -1
- reqmgr2ms-output-2.3.8rc10/bin/patchComponent.sh +0 -74
- reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/MSPileup/MSPileupUtils.py +0 -31
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/LICENSE +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/MANIFEST.in +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/NOTICE +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/README.md +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/HWMon/wmcore-SysStat +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/acdcserver-tools +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/ParseSpecCmsswdist.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/adjustMongoDocs.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/checkDsetFileCount.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/checkStuckLQE.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/createPileupObjects.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/drainAgent.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/fixWorkflowParentage.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/getWQStatusByWorkflow.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/injectUnified.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/mongoInit.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/parseUnifiedCampaigns.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/setrequeststatus.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/summaryWMStatsFailures.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/updatePileupObjects.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/updateTotalStats.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/adhoc-scripts/workflowCompletion.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/attempt-to-patch.sh +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/buildrelease.sh +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/check-ACDC-parentage +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/check-phedex-dbs-status +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/check-request-wq-status +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/clean-oracle +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/combineMinifyWMStats.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/couch-thrash.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/couch_archiver.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/create-iam-token.sh +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/createStoreResults.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/dbsbuffer-file-fix.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/deploy-rpm-to-jenkins.sh +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/docker.sh +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/fix-dbs-parentage +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/inject-to-config-cache +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/kill-workflow-in-agent +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/kill-workflow-in-global +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/make-local-clones.sh +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/outputmodules-from-config +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/paused-jobs +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/purgeDeletedCouchDoc.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/reqmgr-put-default-config +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/reqmgr-sw-update +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/vaildateCMSSWMergeVersion +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-component-standalone +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-couchapp-init +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-delete-couchdb-workflow +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-mod-config +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-resource-control +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-unregister-wmstats +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-upload-config +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmagent-workqueue +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmc-dist-patch +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmc-dist-unpatch +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmc-httpd +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmcore-db-init +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmcore-new-config +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmcore-new-flow +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/bin/wmcoreD +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/requirements.txt +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/setup.cfg +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/setup.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/setup_build.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/setup_dependencies.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/CPMetrics.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/CertTools.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/EmailAlert.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/ExtendedUnitTestCase.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/FileTools.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/IteratorTools.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/MathUtils.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/MemoryCache.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Patterns.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Pipeline.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/PortForward.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/ProcessStats.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/PythonVersion.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Signals.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/TemporaryEnvironment.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Throttled.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Timers.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Timestamps.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/TokenManager.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Tracing.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/TwPrint.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/Utilities.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/Utils/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/Alarm.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/MathAlgos.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/MiscAlgos.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/ParseXMLFile.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/Permissions.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/Singleton.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/SubprocessAlgos.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Algorithms/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Cache/GenericDataCache.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Cache/WMConfigCache.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Cache/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Configuration.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DAOFactory.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/File.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/Fileset.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/Job.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/JobGroup.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/JobPackage.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/LumiList.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/Mask.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/ContinuousSummaryHistogram.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/DiscreteSummaryHistogram.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/SummaryHistogram.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/MathStructs/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/Pickleable.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/Run.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/Subscription.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/WMObject.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/WorkUnit.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/Workflow.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/DataStructs/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/CMSCouch.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/ConfigDBMap.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/CouchUtils.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/DBCore.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/DBCreator.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/DBExceptionHandler.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/DBFactory.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/DBFormatter.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/Dialects.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/ExecuteDAO.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/MongoDB.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/MySQL/Destroy.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/MySQL/ListUserContent.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/MySQL/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/MySQLCore.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/Oracle/Destroy.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/Oracle/ListUserContent.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/Oracle/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/ResultSet.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/Transaction.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Database/ipy_profile_couch.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/GroupUser/CouchObject.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/GroupUser/Decorators.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/GroupUser/Group.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/GroupUser/Interface.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/GroupUser/User.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/GroupUser/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Lexicon.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/CherryPyThreads/HeartbeatMonitor.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/CherryPyThreads/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/DataStructs/DefaultStructs.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/DataStructs/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/MSAuth.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/MSCore.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/TaskManager.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSCore/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSOutput/MSOutput.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSOutput/MSOutputStreamer.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSOutput/MSOutputTemplate.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSOutput/RelValPolicy.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/MSOutput/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/Service/Data.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/Service/RestApiHub.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/Service/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/Tools/Common.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/Tools/PycurlRucio.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/Tools/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/WebGui/FrontPage.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/MicroService/WebGui/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Auth.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/CherryPyPeriodicTask.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Error.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Format.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/HeartbeatMonitorBase.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Main.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Server.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Services.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Test.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Tools.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/Validation.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/REST/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/ReqMgr/DataStructs/RequestStatus.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/ReqMgr/DataStructs/RequestType.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/ReqMgr/DataStructs/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/ReqMgr/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/AlertManager/AlertManagerAPI.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/AlertManager/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/CRIC/CRIC.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/CRIC/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/DBS3Reader.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSConcurrency.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSErrors.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSReader.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSUtils.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/DBSWriterObjects.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/ProdException.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/DBS/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/FWJRDB/FWJRDBAPI.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/FWJRDB/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/HTTPS/HTTPSAuthHandler.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/HTTPS/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDB.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDBBackend.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDBExceptions.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/LogDB/LogDBReport.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/LogDB/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/MSPileup/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/MonIT → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/MSUtils}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/McM/McM.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/McM/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/MonIT/Grafana.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/PyCondor → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/MonIT}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/PyCondor/PyCondorAPI.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/PyCondor/PyCondorUtils.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/ReqMgr → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/PyCondor}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/ReqMgr/ReqMgr.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/ReqMgrAux → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/ReqMgr}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/ReqMgrAux/ReqMgrAux.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/RequestDB → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/ReqMgrAux}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/RequestDB/RequestDBReader.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/RequestDB/RequestDBWriter.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/Rucio → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/RequestDB}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/Requests.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/Rucio/Rucio.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/Rucio/RucioUtils.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/RucioConMon → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/Rucio}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/RucioConMon/RucioConMon.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/StompAMQ → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/RucioConMon}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/Service.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/TagCollector → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/StompAMQ}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/TagCollector/TagCollector.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/TagCollector/XMLUtils.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/WMAgent → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/TagCollector}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/UUIDLib.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/UserFileCache/UserFileCache.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/UserFileCache/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMAgent/WMAgent.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/WMArchive → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/WMAgent}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMArchive/CMSSWMetrics.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMArchive/DataMap.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMArchive/WMArchive.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/WMBS → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/WMArchive}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMBS/WMBS.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/WMStats/DataStruct → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/WMBS}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMStats/DataStruct/RequestInfoCollection.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/WMStats → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/WMStats/DataStruct}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMStats/WMStatsPycurl.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMStats/WMStatsReader.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMStats/WMStatsWriter.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/WMStatsServer → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/WMStats}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WMStatsServer/WMStatsServer.py +0 -0
- {reqmgr2ms-output-2.3.8rc10/src/python/WMCore/Services/WorkQueue → reqmgr2ms-output-2.3.8rc11/src/python/WMCore/Services/WMStatsServer}/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/WorkQueue/WorkQueue.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Services/pycurl_manager.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/WMBase.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/WMConnectionBase.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/WMException.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/WMExceptions.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/WMFactory.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/WMInit.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/WMLogging.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Wrappers/JsonWrapper/JSONThunker.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Wrappers/JsonWrapper/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/WMCore/Wrappers/__init__.py +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/reqmgr2ms_output.egg-info/dependency_links.txt +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/reqmgr2ms_output.egg-info/requires.txt +0 -0
- {reqmgr2ms-output-2.3.8rc10 → reqmgr2ms-output-2.3.8rc11}/src/python/reqmgr2ms_output.egg-info/top_level.txt +0 -0
@@ -0,0 +1,259 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
usage()
|
4
|
+
{
|
5
|
+
echo -e "\nA simple script to be used for patching all Running backends in"
|
6
|
+
echo -e "a WMCore central services K8 cluster with a patch based on:"
|
7
|
+
echo -e " * A list of upstream PRs (the order of applying them matters) or "
|
8
|
+
echo -e " * A patch file provided or"
|
9
|
+
echo -e " * A patch created from StdIn"
|
10
|
+
echo -e ""
|
11
|
+
echo -e "Usage: ./patchCluster.sh [-n] [-z] [-f <patchFile>] [-p <\"SpaceSepListOfPods\">] [-s <serviceName>] 12077 12120 ..."
|
12
|
+
echo -e ""
|
13
|
+
echo -e " -p - Space separated list of pods to be patched (Mind the quotation marks)"
|
14
|
+
echo -e " -s - Service name whose pods to be patched (if found)"
|
15
|
+
echo -e " -d - Deployment name whose pods to be patched (if found)"
|
16
|
+
echo -e " -z - Only zero the code base to the currently deployed tag for the files changed in the patch - no actual patches will be applied"
|
17
|
+
echo -e " -f - Apply the specified patch file. No multiple files supported. If opt is repeated only the last one will be considered."
|
18
|
+
echo -e " -n - Do not zero the code base neither from TAG nor from Master branch, just apply the patch"
|
19
|
+
echo -e " -o - One go - Apply the patch only through a single attempt starting from the tag deployed at the destination and avoid the second attempt upon syncing to master."
|
20
|
+
echo -e ""
|
21
|
+
echo -e "NOTE: We do not support patching from file and patching from command line simultaneously"
|
22
|
+
echo -e " If both provided at the command line patching from command line takes precedence"
|
23
|
+
echo -e ""
|
24
|
+
echo -e "Examples: \n"
|
25
|
+
echo -e " ./patchCluster.sh -s reqmgr2 11270 12120 \n"
|
26
|
+
echo -e " ./patchCluster.sh -p pod/reqmgr2-bcdccd8c6-hsmlj -f /tmp/11270.patch \n"
|
27
|
+
echo -e " git diff --no-color | ./patchCluster.sh -s reqmgr2 -n \n"
|
28
|
+
echo -e " curl https://patch-diff.githubusercontent.com/raw/dmwm/WMCore/pull/11270.patch | ./patchCluster.sh -s reqmgr2 \n"
|
29
|
+
|
30
|
+
}
|
31
|
+
|
32
|
+
# Set defaults
|
33
|
+
currPods=""
|
34
|
+
currService=""
|
35
|
+
currDeployment=""
|
36
|
+
zeroOnly=false
|
37
|
+
zeroCodeBase=true
|
38
|
+
oneGo=false
|
39
|
+
extPatchFile=""
|
40
|
+
while getopts ":f:p:s:d:znh" opt; do
|
41
|
+
case ${opt} in
|
42
|
+
p)
|
43
|
+
currPods=$OPTARG
|
44
|
+
;;
|
45
|
+
s)
|
46
|
+
currService=$OPTARG
|
47
|
+
;;
|
48
|
+
d)
|
49
|
+
currDeployment=$OPTARG
|
50
|
+
;;
|
51
|
+
f)
|
52
|
+
extPatchFile=$OPTARG
|
53
|
+
;;
|
54
|
+
z)
|
55
|
+
zeroOnly=true
|
56
|
+
;;
|
57
|
+
n)
|
58
|
+
zeroCodeBase=false
|
59
|
+
;;
|
60
|
+
o)
|
61
|
+
oneGo=true
|
62
|
+
;;
|
63
|
+
h)
|
64
|
+
usage
|
65
|
+
exit 0 ;;
|
66
|
+
\? )
|
67
|
+
echo -e "\nERROR: Invalid Option: -$OPTARG\n"
|
68
|
+
usage
|
69
|
+
exit 1 ;;
|
70
|
+
: )
|
71
|
+
echo -e "\nERROR: Invalid Option: -$OPTARG requires an argument\n"
|
72
|
+
usage
|
73
|
+
exit 1 ;;
|
74
|
+
esac
|
75
|
+
done
|
76
|
+
|
77
|
+
# shift to the last parsed option, so we can consume the patchList with a regular shift
|
78
|
+
shift $(expr $OPTIND - 1 )
|
79
|
+
|
80
|
+
|
81
|
+
# if fd 0 (stdin) is open and refers to a terminal - then we are running the script directly, without a pipe
|
82
|
+
# if fd 0 (stdin) is open but does not refer to the terminal - then we are running the script through a pipe
|
83
|
+
if [ -t 0 ] ; then pipe=false; else pipe=true ; fi
|
84
|
+
|
85
|
+
patchList=$*
|
86
|
+
|
87
|
+
which kubectl || { echo "ERROR: Missing 'kubectl'. Cannot continue! EXIT!"; exit 1 ;}
|
88
|
+
|
89
|
+
currCluster=`kubectl config get-clusters |grep -v NAME`
|
90
|
+
nameSpace=dmwm
|
91
|
+
|
92
|
+
echo
|
93
|
+
echo
|
94
|
+
echo
|
95
|
+
echo ========================================================
|
96
|
+
echo "INFO: CLUSTER: $currCluster"
|
97
|
+
echo --------------------------------------------------------
|
98
|
+
|
99
|
+
if $zeroOnly; then
|
100
|
+
echo "INFO: Only Zeroing the code base No patches will be applied"
|
101
|
+
echo "INFO: Source files affected to be taken from patches: $patchList"
|
102
|
+
elif $pipe ;then
|
103
|
+
echo "INFO: Patching from StdIn"
|
104
|
+
elif [[ -n $extPatchFile ]]; then
|
105
|
+
echo "INFO: Patching from file: $extPatchFile"
|
106
|
+
elif [[ -z $patchList ]] ; then
|
107
|
+
echo "ERROR: Neither patchList provided nor patchFile nor patching from StdIn"
|
108
|
+
exit
|
109
|
+
else
|
110
|
+
echo "INFO: Applying patches: $patchList"
|
111
|
+
fi
|
112
|
+
|
113
|
+
|
114
|
+
# -----------------------------------------------------------
|
115
|
+
# Build patchComponent.sh script command to be executed at the pod:
|
116
|
+
|
117
|
+
# NOTE: We do not support patching from file and patching from command line simultaneously
|
118
|
+
# If both provided at the command line patching from command line takes precedence
|
119
|
+
|
120
|
+
podCmdActions="sudo -v && /data/manage help && which curl && curl https://raw.githubusercontent.com/dmwm/WMCore/master/bin/patchComponent.sh -o /data/patchComponent.sh && chmod 755 /data/patchComponent.sh "
|
121
|
+
podCmdOpts=""
|
122
|
+
patchFile=""
|
123
|
+
$zeroOnly && podCmdOpts="$podCmdOpts -z"
|
124
|
+
$oneGo && podCmdOpts="$podCmdOpts -o"
|
125
|
+
$zeroCodeBase || podCmdOpts="$podCmdOpts -n"
|
126
|
+
|
127
|
+
[[ -n $extPatchFile ]] && { patchFile="/tmp/`basename $extPatchFile`"
|
128
|
+
podCmdOpts="$podCmdOpts -f $patchFile" ;}
|
129
|
+
|
130
|
+
# NOTE: We are about to create the pipeTmp_****.patch file from stdIn here
|
131
|
+
# And we are about to call `patchComponent.sh` through -f option, but we must
|
132
|
+
# explicitly break the redirection from the pipe command, because otherwise
|
133
|
+
# it will be kept through out the call to `patchComponent.sh` and will cause
|
134
|
+
# the $pipe flag to take precedence over the -f flag inside `patchComponent.sh`
|
135
|
+
# Then the so sent file will be ignored. What we need to do here is, once we create
|
136
|
+
# the temporary patch file from stdin (currently redirected through the pipe)
|
137
|
+
# to open again fd 0 (stdin) and redirect it to a tty terminal.
|
138
|
+
$pipe && { patchFile="/tmp/pipeTmp_$(id -u).patch"
|
139
|
+
extPatchFile=$patchFile
|
140
|
+
podCmdOpts="$podCmdOpts -f $patchFile"
|
141
|
+
echo "INFO: Creating a temporary patchFile from stdin at: $patchFile"
|
142
|
+
cat <&0 > $patchFile
|
143
|
+
exec 0<>/dev/tty
|
144
|
+
# The flag bellow is just for debugging purposes, never used after the printout
|
145
|
+
[[ -t 0 ]] && newPipeFlag=false || newPipeFlag=true
|
146
|
+
echo
|
147
|
+
echo "DEBUG: newPipeFlag=$newPipeFlag"
|
148
|
+
}
|
149
|
+
|
150
|
+
podCmd="$podCmdActions && sudo /data/patchComponent.sh $podCmdOpts $patchList "
|
151
|
+
restartCmd="/data/manage restart && sleep 1 && /data/manage status"
|
152
|
+
|
153
|
+
echo
|
154
|
+
echo "DEBUG: podCmd: $podCmd"
|
155
|
+
echo
|
156
|
+
# -----------------------------------------------------------
|
157
|
+
|
158
|
+
echo --------------------------------------------------------
|
159
|
+
# First try to find any pod from the service name provided and then extend the list in currPods:
|
160
|
+
if [[ -n $currService ]]; then
|
161
|
+
servicePods=`kubectl -n $nameSpace get ep $currService -o=jsonpath='{.subsets[*].addresses[*].ip}' | tr ' ' '\n' | xargs -I % kubectl -n $nameSpace get pods -o=name --field-selector=status.podIP=%`
|
162
|
+
[[ $? -eq 0 ]] || { echo "WARNING: could not find service: $currService at cluster: $currCluster"; exit ;}
|
163
|
+
|
164
|
+
# We need to trim the `pod/` prefix from every pod's name produced with the above command
|
165
|
+
if [[ -n $servicePods ]] ; then
|
166
|
+
for pod in $servicePods; do
|
167
|
+
currPods="$currPods ${pod#pod/}"
|
168
|
+
done
|
169
|
+
echo "INFO: Found the following pods for SERVICE: $currService: "
|
170
|
+
echo "$servicePods "
|
171
|
+
else
|
172
|
+
echo "WARNING: No pods found for SERVICE: $currService"
|
173
|
+
exit
|
174
|
+
fi
|
175
|
+
fi
|
176
|
+
|
177
|
+
# Second try to find any pod from the deployment name provided and then extend the list in currPods:
|
178
|
+
if [[ -n $currDeployment ]]; then
|
179
|
+
deploymentPods=`kubectl get --raw "/apis/apps/v1/namespaces/dmwm/deployments/$currDeployment/scale"|jq -r .status.selector | xargs -I % kubectl -n $nameSpace get pods -o=name --selector=%`
|
180
|
+
[[ $? -eq 0 ]] || { echo "WARNING: could not find deployment: $currDeployment at cluster: $currCluster"; exit ;}
|
181
|
+
|
182
|
+
# We need to trim the `pod/` prefix from every pod's name produced with the above command
|
183
|
+
if [[ -n $deploymentPods ]] ; then
|
184
|
+
for pod in $deploymentPods; do
|
185
|
+
currPods="$currPods ${pod#pod/}"
|
186
|
+
done
|
187
|
+
echo "INFO: Found the following pods for DEPLOYMENT: $currDeployment: "
|
188
|
+
echo "$deploymentPods "
|
189
|
+
else
|
190
|
+
echo "WARNING: No pods found for DEPLOYMENT: $currDeployment"
|
191
|
+
exit
|
192
|
+
fi
|
193
|
+
fi
|
194
|
+
|
195
|
+
|
196
|
+
|
197
|
+
if [[ -n $currPods ]] ; then
|
198
|
+
echo ========================================================
|
199
|
+
echo WARNING: We are about to patch backend pods: $currPods
|
200
|
+
echo WARNING: at k8 CLUSTER: $currCluster !!!!
|
201
|
+
else
|
202
|
+
echo ========================================================
|
203
|
+
echo WARNING: We are about to patch ANY running backend pod
|
204
|
+
echo WARNING: at k8 CLUSTER: $currCluster !!!!
|
205
|
+
fi
|
206
|
+
|
207
|
+
echo WARNING: Are you sure you want to continue?
|
208
|
+
echo -n "[y/n](Default n): "
|
209
|
+
read x && [[ $x =~ (y|yes|Yes|YES) ]] || { echo WARNING: Exit on user request!; exit 101 ;}
|
210
|
+
echo ========================================================
|
211
|
+
|
212
|
+
|
213
|
+
if [[ -n $currPods ]] ; then
|
214
|
+
runningPods=$currPods
|
215
|
+
else
|
216
|
+
# # check if any service name was actually provided at the command line and if not only then search for all running pods for the whole cluster:
|
217
|
+
# if [[ -n $currService ]] ; then
|
218
|
+
# echo "WARNING: Requested to patch: $currService at: $currCluster but NO pods were found."
|
219
|
+
# echo "WARNING: Will not patch the whole cluster. Nothing to do here, giving up now."
|
220
|
+
# exit
|
221
|
+
# else
|
222
|
+
runningPods=`kubectl get pods --no-headers -o custom-columns=":metadata.name" -n $nameSpace --field-selector=status.phase=Running`
|
223
|
+
# fi
|
224
|
+
fi
|
225
|
+
|
226
|
+
for pod in $runningPods
|
227
|
+
do
|
228
|
+
echo
|
229
|
+
echo --------------------------------------------------------
|
230
|
+
echo INFO: $pod:
|
231
|
+
|
232
|
+
if $pipe || [[ -n $extPatchFile ]]; then
|
233
|
+
echo INFO: Copying any external patchFiles provided: $extPatchFile
|
234
|
+
echo INFO: Executing: kubectl -n $nameSpace cp $extPatchFile $pod:$patchFile
|
235
|
+
kubectl -n $nameSpace cp $extPatchFile $pod:$patchFile || {
|
236
|
+
echo ERROR: While copying patch files to pod:$pod
|
237
|
+
echo ERROR: Skipping it!
|
238
|
+
continue
|
239
|
+
}
|
240
|
+
fi
|
241
|
+
echo
|
242
|
+
echo --------------------------------------------------------
|
243
|
+
echo INFO: Patching the services at pod: $pod:
|
244
|
+
echo INFO: Executing: kubectl exec -it $pod -n $nameSpace -- /bin/bash -c \"$podCmd\"
|
245
|
+
kubectl exec -it $pod -n $nameSpace -- /bin/bash -c "$podCmd" || {
|
246
|
+
echo ERROR: While patching the pod:$pod
|
247
|
+
echo ERROR: Skipping it!
|
248
|
+
continue
|
249
|
+
}
|
250
|
+
echo
|
251
|
+
echo --------------------------------------------------------
|
252
|
+
echo INFO: Restarting the services at pod: $pod:
|
253
|
+
echo INFO: Executing: kubectl exec $pod -n $nameSpace -- /bin/bash -c \"$restartCmd\"
|
254
|
+
kubectl exec $pod -n $nameSpace -- /bin/bash -c "$restartCmd" || {
|
255
|
+
echo ERROR: While restarting the service at pod:$pod
|
256
|
+
echo ERROR: Skipping it!
|
257
|
+
continue
|
258
|
+
}
|
259
|
+
done
|
@@ -0,0 +1,366 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
usage()
|
4
|
+
{
|
5
|
+
echo -e "\nA simple script to facilitate component patching"
|
6
|
+
echo -e "and to decrease the development && testing turnaround time."
|
7
|
+
echo -e " * A list of upstream PRs (the order of applying them matters) or "
|
8
|
+
echo -e " * A patch file provided or"
|
9
|
+
echo -e " * A patch created from StdIn"
|
10
|
+
echo -e ""
|
11
|
+
echo -e "Usage: ./patchComponent [-n] [-z] [-f <patchFile>] <patchNum> <patchNum> ..."
|
12
|
+
echo -e " -z - Only zero the code base to the currently deployed tag for the files changed in the patch - no actual patches will be applied"
|
13
|
+
echo -e " -f - Apply the specified patch file. No multiple files supported. If opt is repeated only the last one will be considered."
|
14
|
+
echo -e " -n - Do not zero the code base neither from TAG nor from Master branch, just apply the patch"
|
15
|
+
echo -e " -o - One go - Apply the patch only through a single attempt starting from the tag deployed at the destination and avoid the second attempt upon syncing to master."
|
16
|
+
echo -e ""
|
17
|
+
echo -e "NOTE: We do not support patching from file and patching from command line simultaneously"
|
18
|
+
echo -e " If both provided at the command line patching from command line takes precedence"
|
19
|
+
echo -e ""
|
20
|
+
echo -e "Examples: \n"
|
21
|
+
echo -e " sudo ./patchComponent.sh 11270 12120"
|
22
|
+
echo -e " sudo ./patchComponent.sh -f /tmp/11270.patch"
|
23
|
+
echo -e " git diff --no-color | sudo ./patchComponent.sh"
|
24
|
+
echo -e " curl https://patch-diff.githubusercontent.com/raw/dmwm/WMCore/pull/11270.patch | sudo ./patchComponent.sh \n"
|
25
|
+
}
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
# Add default value for zeroOnly option
|
30
|
+
zeroOnly=false
|
31
|
+
zeroCodeBase=true
|
32
|
+
oneGo=false
|
33
|
+
extPatchFile=""
|
34
|
+
while getopts ":f:znoh" opt; do
|
35
|
+
case ${opt} in
|
36
|
+
f)
|
37
|
+
extPatchFile=$OPTARG
|
38
|
+
;;
|
39
|
+
z)
|
40
|
+
zeroOnly=true
|
41
|
+
;;
|
42
|
+
n)
|
43
|
+
zeroCodeBase=false
|
44
|
+
;;
|
45
|
+
o)
|
46
|
+
oneGo=true
|
47
|
+
;;
|
48
|
+
h)
|
49
|
+
usage
|
50
|
+
exit 0 ;;
|
51
|
+
\? )
|
52
|
+
echo -e "\nERROR: Invalid Option: -$OPTARG\n"
|
53
|
+
usage
|
54
|
+
exit 1 ;;
|
55
|
+
: )
|
56
|
+
echo -e "\nERROR: Invalid Option: -$OPTARG requires an argument\n"
|
57
|
+
usage
|
58
|
+
exit 1 ;;
|
59
|
+
esac
|
60
|
+
done
|
61
|
+
# shift to the last parsed option, so we can consume the patchNum with a regular shift
|
62
|
+
shift $(expr $OPTIND - 1 )
|
63
|
+
|
64
|
+
|
65
|
+
# if fd 0 (stdin) is open and refers to a terminal - then we are running the script directly, without a pipe
|
66
|
+
# if fd 0 (stdin) is open but does not refer to the terminal - then we are running the script through a pipe
|
67
|
+
if [ -t 0 ] ; then pipe=false; else pipe=true ; fi
|
68
|
+
|
69
|
+
patchList=$*
|
70
|
+
# [[ -z $patchList ]] && patchList="temp"
|
71
|
+
|
72
|
+
currTag=$(python -c "from WMCore import __version__ as WMCoreVersion; print(WMCoreVersion)")
|
73
|
+
|
74
|
+
echo
|
75
|
+
echo
|
76
|
+
echo
|
77
|
+
echo ========================================================
|
78
|
+
echo "INFO: Current WMCoreTag: $currTag"
|
79
|
+
|
80
|
+
# Find all possible locations for the component source
|
81
|
+
# NOTE: We always consider PYTHONPATH first
|
82
|
+
pythonLibPaths=$(echo $PYTHONPATH |sed -e "s/\:/ /g")
|
83
|
+
pythonLibPaths="$pythonLibPaths $(python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")"
|
84
|
+
|
85
|
+
for path in $pythonLibPaths
|
86
|
+
do
|
87
|
+
[[ -d $path/WMCore ]] && { pythonLibPath=$path; echo "INFO: Source code found at: $path"; break ;}
|
88
|
+
done
|
89
|
+
|
90
|
+
[[ -z $pythonLibPath ]] && { echo "ERROR: Could not find WMCore source to patch"; exit 1 ;}
|
91
|
+
echo "INFO: Current PythonLibPath: $pythonLibPath"
|
92
|
+
echo --------------------------------------------------------
|
93
|
+
echo
|
94
|
+
|
95
|
+
# Set patch command parameters
|
96
|
+
stripLevel=3
|
97
|
+
patchCmd="patch -t --verbose -b --version-control=numbered -d $pythonLibPath -p$stripLevel"
|
98
|
+
|
99
|
+
# Define Auxiliary functions
|
100
|
+
_createTestFilesDst() {
|
101
|
+
# A simple function to create test files destination for not breaking the patches
|
102
|
+
# because of a missing destination:
|
103
|
+
# :param $1: The source branch to be used for checking the files: could be TAG or Master
|
104
|
+
# :param $2-*: The list of files to be checked out
|
105
|
+
local srcBranch=$1
|
106
|
+
shift
|
107
|
+
local testFileList=$*
|
108
|
+
for file in $testFileList
|
109
|
+
do
|
110
|
+
# file=${file#a\/test\/python\/}
|
111
|
+
fileName=`basename $file`
|
112
|
+
fileDir=`dirname $file`
|
113
|
+
# Create the file path if missing
|
114
|
+
mkdir -p $pythonLibPath/$fileDir
|
115
|
+
echo INFO: orig: https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/test/python/$file
|
116
|
+
echo INFO: dest: $pythonLibPath/$file
|
117
|
+
curl -f https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/test/python/$file -o $pythonLibPath/$file || {
|
118
|
+
echo INFO: file: $file missing at the origin.
|
119
|
+
echo INFO: Seems to be a new file for the curren patch.
|
120
|
+
echo INFO: Removing it from the destination as well!
|
121
|
+
rm -f $pythonLibPath/$file
|
122
|
+
}
|
123
|
+
done
|
124
|
+
}
|
125
|
+
|
126
|
+
_zeroCodeBase() {
|
127
|
+
# A simple function to zero the code base for a set of files starting from
|
128
|
+
# a given tag or branch at the origin
|
129
|
+
# :param $1: The source branch to be used for checking the files: could be TAG or Master
|
130
|
+
# :param $2-*: The list of files to be checked out
|
131
|
+
local srcBranch=$1
|
132
|
+
shift
|
133
|
+
local srcFileList=$*
|
134
|
+
for file in $srcFileList
|
135
|
+
do
|
136
|
+
# file=${file#a\/src\/python\/}
|
137
|
+
fileName=`basename $file`
|
138
|
+
fileDir=`dirname $file`
|
139
|
+
# Create the file path if missing
|
140
|
+
mkdir -p $pythonLibPath/$fileDir
|
141
|
+
echo INFO: orig: https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/src/python/$file
|
142
|
+
echo INFO: dest: $pythonLibPath/$file
|
143
|
+
curl -f https://raw.githubusercontent.com/dmwm/WMCore/$srcBranch/src/python/$file -o $pythonLibPath/$file || {
|
144
|
+
echo INFO: file: $file missing at the origin.
|
145
|
+
echo INFO: Seems to be a new file for the curren patch.
|
146
|
+
echo INFO: Removing it from the destination as well!
|
147
|
+
rm -f $pythonLibPath/$file
|
148
|
+
}
|
149
|
+
done
|
150
|
+
}
|
151
|
+
|
152
|
+
|
153
|
+
# DONE: ....HERE TO START ITERATING THROUGH THE PATCH LIST
|
154
|
+
|
155
|
+
# Create the full list of patch files to be applied - keeping the order
|
156
|
+
# from the original patch list as provided at the command line
|
157
|
+
patchFileList=""
|
158
|
+
_createPatchFiles(){
|
159
|
+
local patchFile
|
160
|
+
|
161
|
+
# Check if we are running from a pipe
|
162
|
+
$pipe && {
|
163
|
+
if $zeroOnly ;then
|
164
|
+
echo "INFO: Zeroing WMCore code base from StdIn"
|
165
|
+
else
|
166
|
+
echo "INFO: Patching WMCore code from StdIn"
|
167
|
+
fi
|
168
|
+
patchFile="/tmp/pipeTmp_$(id -u).patch"
|
169
|
+
patchFileList=$patchFile
|
170
|
+
echo "INFO: Creating a temporary patchFile from stdin at: $patchFile"
|
171
|
+
cat <&0 > $patchFile
|
172
|
+
return
|
173
|
+
}
|
174
|
+
|
175
|
+
# Check if we were sent a file to patch from
|
176
|
+
[[ -n $extPatchFile ]] && {
|
177
|
+
if $zeroOnly ;then
|
178
|
+
echo "INFO: Zeroing WMCore code base with file: $extPatchFile"
|
179
|
+
else
|
180
|
+
echo "INFO: Patching WMCore code with file: $extPatchFile"
|
181
|
+
fi
|
182
|
+
patchFile=$extPatchFile
|
183
|
+
patchFileList=$patchFile
|
184
|
+
echo "INFO: Using command line provided patch file: $patchFile"
|
185
|
+
return
|
186
|
+
}
|
187
|
+
|
188
|
+
# Finally, if none of the above, build the list of patch files to be applied from the patchNums provided at the command line
|
189
|
+
if $zeroOnly ; then
|
190
|
+
echo "INFO: Zeroing WMCore code base with PRs: $patchList"
|
191
|
+
else
|
192
|
+
echo "INFO: Patching WMCore code with PRs: $patchList"
|
193
|
+
fi
|
194
|
+
for patchNum in $patchList
|
195
|
+
do
|
196
|
+
patchFile=/tmp/$patchNum.patch
|
197
|
+
patchFileList="$patchFileList $patchFile"
|
198
|
+
echo "INFO: Downloading a temporary patchFile at: $patchFile"
|
199
|
+
curl https://patch-diff.githubusercontent.com/raw/dmwm/WMCore/pull/$patchNum.patch -o $patchFile
|
200
|
+
done
|
201
|
+
}
|
202
|
+
|
203
|
+
_warnFilelist(){
|
204
|
+
echo WARNING: Please consider checking the follwoing list of files for eventual code conflicts:
|
205
|
+
for file in $srcFileList $testFileList
|
206
|
+
do
|
207
|
+
echo WARNING: $pythonLibPath/$file
|
208
|
+
done
|
209
|
+
}
|
210
|
+
|
211
|
+
_createPatchFiles
|
212
|
+
|
213
|
+
echo "DEBUG: patchFileList: $patchFileList"
|
214
|
+
|
215
|
+
# Build full lists of files altered by the given set of patch files to be applied
|
216
|
+
srcFileList=""
|
217
|
+
testFileList=""
|
218
|
+
for patchFile in $patchFileList
|
219
|
+
do
|
220
|
+
# Parse a list of files changed only by the current patch
|
221
|
+
srcFileListTemp=`grep diff $patchFile |grep "a/src/python" |awk '{print $3}' |sort |uniq`
|
222
|
+
testFileListTemp=`grep diff $patchFile |grep "a/test/python" |awk '{print $3}' |sort |uniq`
|
223
|
+
|
224
|
+
# Reduce paths for both src and test file lists to the path depth known to
|
225
|
+
# the WMCore modules/packages and add them to the global scope file lists
|
226
|
+
for file in $srcFileListTemp
|
227
|
+
do
|
228
|
+
file=${file#a\/src\/python\/} && srcFileList="$srcFileList $file"
|
229
|
+
done
|
230
|
+
|
231
|
+
for file in $testFileListTemp
|
232
|
+
do
|
233
|
+
file=${file#a\/test\/python\/} && testFileList="$testFileList $file"
|
234
|
+
done
|
235
|
+
done
|
236
|
+
|
237
|
+
|
238
|
+
$zeroCodeBase && {
|
239
|
+
echo
|
240
|
+
echo --------------------------------------------------------
|
241
|
+
echo "INFO: Refreshing all files which are to be patched from the origin and TAG: $currTag"
|
242
|
+
echo
|
243
|
+
|
244
|
+
# First create destination for test files from currTag if missing
|
245
|
+
_createTestFilesDst $currTag $testFileList
|
246
|
+
|
247
|
+
|
248
|
+
# Then zero code base for source files from currTag
|
249
|
+
_zeroCodeBase $currTag $srcFileList
|
250
|
+
}
|
251
|
+
|
252
|
+
# exit if the user has requested to only zero the code base
|
253
|
+
$zeroOnly && { _warnFilelist; exit ;}
|
254
|
+
|
255
|
+
err=0
|
256
|
+
echo
|
257
|
+
echo
|
258
|
+
echo --------------------------------------------------------
|
259
|
+
echo "INFO: Patching all files starting from the $($zeroCodeBase && echo original version of TAG: $currTag || echo current version of files)"
|
260
|
+
for patchFile in $patchFileList
|
261
|
+
do
|
262
|
+
echo
|
263
|
+
echo
|
264
|
+
echo --------------------------------------------------------
|
265
|
+
echo "INFO: ----------------- Currently applying patch: $patchNum -----------------"
|
266
|
+
echo "INFO: cat $patchFile | $patchCmd"
|
267
|
+
cat $patchFile | $patchCmd
|
268
|
+
let err+=$?
|
269
|
+
done
|
270
|
+
|
271
|
+
echo
|
272
|
+
echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
273
|
+
echo
|
274
|
+
if [[ $err -eq 0 ]]; then
|
275
|
+
echo INFO: First patch attempt exit status: $err
|
276
|
+
echo INFO: ALL GOOD
|
277
|
+
echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
278
|
+
exit
|
279
|
+
else
|
280
|
+
echo WARNING: First patch attempt exit status: $err
|
281
|
+
echo
|
282
|
+
echo
|
283
|
+
echo WARNING: There were errors while patching from TAG: $currTag
|
284
|
+
echo WARNING: Most probably some of the files from the current patch were having changes
|
285
|
+
echo WARNING: between the current PR and the tag deployed at the host/container.
|
286
|
+
echo
|
287
|
+
echo
|
288
|
+
|
289
|
+
# exit at this stage if the user has requested to patch without zeroing the code base
|
290
|
+
$zeroCodeBase || { _warnFilelist ; exit 1 ;}
|
291
|
+
|
292
|
+
# exit at this stage if the user has requested to do the patch only in one go
|
293
|
+
# without a second attempt from master. Restore files to their version at TAG
|
294
|
+
$oneGo && {
|
295
|
+
echo WARNING: Restoring all files to their original version at TAG: $currTag
|
296
|
+
echo
|
297
|
+
echo
|
298
|
+
_createTestFilesDst $currTag $testFileList
|
299
|
+
_zeroCodeBase $currTag $srcFileList
|
300
|
+
echo
|
301
|
+
echo
|
302
|
+
echo WARNING: All files have been rolled back to their original version at TAG: $currTag
|
303
|
+
_warnFilelist
|
304
|
+
exit 1
|
305
|
+
}
|
306
|
+
echo WARNING: TRYING TO START FROM ORIGIN/MASTER BRANCH INSTEAD:
|
307
|
+
echo
|
308
|
+
echo
|
309
|
+
fi
|
310
|
+
|
311
|
+
|
312
|
+
# If we are here it means something went wrong while patching some of the files.
|
313
|
+
# Most probably some of the files are having changes between the current PR and the tag deployed.
|
314
|
+
# What we can do in such cases is to try to fetch and zero the code base for those files
|
315
|
+
# to be patched from master and hope there are no conflicts in the PR.
|
316
|
+
|
317
|
+
echo
|
318
|
+
echo --------------------------------------------------------
|
319
|
+
echo "WARNING: Refreshing all files which are to be patched from origin/master branch:"
|
320
|
+
echo
|
321
|
+
|
322
|
+
# First create destination for test files from master if missing
|
323
|
+
_createTestFilesDst "master" $testFileList
|
324
|
+
|
325
|
+
# Then zero code base for source files from master
|
326
|
+
_zeroCodeBase "master" $srcFileList
|
327
|
+
|
328
|
+
err=0
|
329
|
+
echo
|
330
|
+
echo
|
331
|
+
echo --------------------------------------------------------
|
332
|
+
echo "WARNING: Patching all files starting from origin/master branch"
|
333
|
+
for patchFile in $patchFileList
|
334
|
+
do
|
335
|
+
echo
|
336
|
+
echo
|
337
|
+
echo "WARNING: --------------- Currently applying patch: $patchNum ---------------"
|
338
|
+
echo "WARNING: cat $patchFile | $patchCmd"
|
339
|
+
cat $patchFile | $patchCmd
|
340
|
+
let err+=$?
|
341
|
+
done
|
342
|
+
|
343
|
+
|
344
|
+
echo
|
345
|
+
echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
346
|
+
echo WARNING: Second patch attempt exit status: $err
|
347
|
+
echo
|
348
|
+
echo
|
349
|
+
|
350
|
+
[[ $err -eq 0 ]] || {
|
351
|
+
|
352
|
+
_createTestFilesDst $currTag $testFileList
|
353
|
+
_zeroCodeBase $currTag $srcFileList
|
354
|
+
|
355
|
+
echo
|
356
|
+
echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
357
|
+
echo WARNING: There were errors while patching from master branch as well
|
358
|
+
echo WARNING: All files have been rolled back to their original version at TAG: $currTag
|
359
|
+
echo
|
360
|
+
echo
|
361
|
+
}
|
362
|
+
echo +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
363
|
+
|
364
|
+
_warnFilelist
|
365
|
+
|
366
|
+
exit $err
|
@@ -29,6 +29,9 @@ from builtins import object
|
|
29
29
|
from time import sleep
|
30
30
|
from datetime import datetime
|
31
31
|
|
32
|
+
# 3rd party modules
|
33
|
+
from cherrypy import HTTPError
|
34
|
+
|
32
35
|
# WMCore modules
|
33
36
|
from WMCore.MicroService.Tools.Common import getMSLogger
|
34
37
|
from WMCore.MicroService.MSCore.TaskManager import start_new_thread
|
@@ -410,6 +413,8 @@ class MSManager(object):
|
|
410
413
|
elif 'transferor' in self.services:
|
411
414
|
if 'workflow' in doc:
|
412
415
|
res = self.msTransferor.updateSites(doc)
|
416
|
+
else:
|
417
|
+
raise HTTPError(400, 'invalid payload %s to MSTransferor REST API, expecting {"workflow": <workflow>}' % doc)
|
413
418
|
return res
|
414
419
|
|
415
420
|
def update(self, doc):
|