panda-server 0.3.3__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {panda_server-0.3.3 → panda_server-0.3.4}/PKG-INFO +1 -1
- panda_server-0.3.4/PandaPkgInfo.py +1 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/JobUtils.py +0 -8
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/OraDBProxy.py +101 -67
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ResourceSpec.py +46 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SiteSpec.py +1 -9
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/TaskBuffer.py +1 -1
- panda_server-0.3.3/PandaPkgInfo.py +0 -1
- {panda_server-0.3.3 → panda_server-0.3.4}/.pre-commit-config.yaml +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/ChangeLog.txt +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/Dockerfile +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/INSTALL.md +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/INSTALL_ATLAS.md +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/LICENSE.txt +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/MANIFEST.in +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/README.md +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/package/hatch_build.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/panda-server.spec +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/ErrorCode.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/SiteMapper.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/brokerage/broker.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/config_utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/daemon_config.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/config/panda_config.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/Carbon.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/Configurator.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/configurator/aux.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/master.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/master_systemd.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/add_main.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/add_sub.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/cache_pilots.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/cache_schedconfig.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/carbon.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/configurator.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/copyArchive.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/datasetManager.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/dummy_test.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/evpPD2P.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/metric_collector.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/panda_activeusers_query.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/pilotStreaming.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/process_workflow_files_daemon.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/recover_lost_files_daemon.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/task_evaluator.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/tmpwatch.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/worker_synchronization.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderAtlasPlugin.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderDummyPlugin.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderGen.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderPluginBase.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderResult.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/AdderSimplePlugin.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/DataServiceUtils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ErrorCode.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ProcessLimiter.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/RecoverLostFilesCore.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/Setupper.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/SetupperAtlasPlugin.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/SetupperDummyPlugin.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/SetupperPluginBase.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/activator.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/closer.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/closer_atlas_plugin.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ddm.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/ddm_handler.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/dyn_data_distributer.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/event_lookup_client_ei.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/event_picker.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/finisher.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/dataservice/forkSetupper.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/DispatcherUtils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/ErrorCode.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/JobDispatcher.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/Protocol.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/Watcher.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/jobdispatcher/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/proxycache/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/proxycache/panda_proxy_cache.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/server/.gacl +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/server/panda.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/CoreUtils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/MailUtils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/allowed_methods.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/oidc_utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/panda_request.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/srvcore/srv_msg_utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/CloudSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/CloudTaskSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ConBridge.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/DBProxyPool.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/DatasetSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/DdmSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ErrorCode.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/EventServiceUtils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/FileSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/GlobalShares.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/HarvesterMetricsSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/Initializer.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/JobSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/NucleusSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PanDAMsgProcessor.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PandaDBSchemaInfo.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PickleFileSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PickleJobSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/PrioUtil.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/ProcessGroups.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SQLDumper.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SQLManager.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/SupErrors.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/TaskBufferInterface.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/Utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WorkerSpec.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WrappedCursor.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WrappedPickle.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/WrappedPostgresConn.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/retryModule.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/task_split_rules.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/taskbuffer/workflow_processor.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/SchemaChecker.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/README.txt +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/mysetup +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/titan_testScript_ec2_alice_1.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/alice/titan_testScript_ec2_alice_2.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/banUser.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/boostPrio.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/boostUser.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/callbackDDM.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/daod_on_demand.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/finishJob.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/finishTaskJEDI.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/getJobs.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killJob.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killJobLowPrio.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killJobsInTask.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killProdJobs.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killTask.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killTaskJEDI.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/killUser.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/README.txt +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/lsstSubmit.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/lsstSubmitMERGEtest.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/lsstSubmitPhosim332.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignJobs.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignSite.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignTask.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reassignWaiting.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/recoverLostFiles.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/reloadInputDS.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/sendCommandToJob.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/setDebugMode.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/setPriority.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testEvgen.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testEvgen17.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testG4sim.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testG4sim17.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testGetCriteriaForGlobalShares.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testGlobalShares.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testJobFlowATLAS.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testReco.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testSimulReco14.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testSiteMap.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testUpdateWorkerPilotStatus.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/test/testutils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/userinterface/Client.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/userinterface/UserIF.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/userinterface/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/pcwl_test.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/pcwl_utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/psnakemake_container.json +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/psnakemake_task.json +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/psnakemake_test.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/__init__.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/extensions.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/log.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/names.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/parser.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/snakeparser/utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/workflow/workflow_utils.py +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/pyproject.toml +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/bin/panda_server-makeSlsXml.exe.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/bin/panda_server-vomsrenew.exe.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/conda_meta.yaml.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/init.d/panda_daemon.exe.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/init.d/panda_httpd.exe.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/init.d/panda_server.exe.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/logrotate.d/panda_server.logrotate.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/panda_server-httpd-FastCGI.conf.rpmnew.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/panda_server-httpd.conf.rpmnew.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/panda_server.cfg.rpmnew.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/sysconfig/panda_server.sysconfig.rpmnew.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/sysconfig/panda_server_env.systemd.rpmnew.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/systemd/panda.service.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/systemd/panda_daemon.service.template +0 -0
- {panda_server-0.3.3 → panda_server-0.3.4}/templates/systemd/panda_httpd.service.template +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
release_version = "0.3.4"
|
|
@@ -26,14 +26,6 @@ job_labels = [ANALY_PS, PROD_PS]
|
|
|
26
26
|
priorityTasksToJumpOver = 1500
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def translate_resourcetype_to_cores(resource_type, cores_queue):
|
|
30
|
-
# resolve the multiplying core factor
|
|
31
|
-
if "MCORE" in resource_type:
|
|
32
|
-
return cores_queue
|
|
33
|
-
else:
|
|
34
|
-
return 1
|
|
35
|
-
|
|
36
|
-
|
|
37
29
|
def translate_prodsourcelabel_to_jobtype(queue_type, prodsourcelabel):
|
|
38
30
|
if prodsourcelabel in analy_sources:
|
|
39
31
|
return ANALY_PS
|
|
@@ -43,7 +43,11 @@ from pandaserver.taskbuffer.DdmSpec import DdmSpec
|
|
|
43
43
|
from pandaserver.taskbuffer.FileSpec import FileSpec
|
|
44
44
|
from pandaserver.taskbuffer.HarvesterMetricsSpec import HarvesterMetricsSpec
|
|
45
45
|
from pandaserver.taskbuffer.JobSpec import JobSpec, push_status_changes
|
|
46
|
-
from pandaserver.taskbuffer.ResourceSpec import
|
|
46
|
+
from pandaserver.taskbuffer.ResourceSpec import (
|
|
47
|
+
BASIC_RESOURCE_TYPE,
|
|
48
|
+
ResourceSpec,
|
|
49
|
+
ResourceSpecMapper,
|
|
50
|
+
)
|
|
47
51
|
from pandaserver.taskbuffer.SupErrors import SupErrors
|
|
48
52
|
from pandaserver.taskbuffer.Utils import create_shards
|
|
49
53
|
from pandaserver.taskbuffer.WorkerSpec import WorkerSpec
|
|
@@ -156,6 +160,11 @@ class DBProxy:
|
|
|
156
160
|
self.__hs_distribution = None # HS06s distribution of sites
|
|
157
161
|
self.__t_update_distribution = None # Timestamp when the HS06s distribution was last updated
|
|
158
162
|
|
|
163
|
+
# resource type mapper
|
|
164
|
+
# if you want to use it, you need to call __reload_resource_spec_mapper first
|
|
165
|
+
self.__resource_spec_mapper = None
|
|
166
|
+
self.__t_update_resource_type_mapper = None
|
|
167
|
+
|
|
159
168
|
# priority boost
|
|
160
169
|
self.job_prio_boost_dict = None
|
|
161
170
|
self.job_prio_boost_dict_update_time = None
|
|
@@ -166,9 +175,6 @@ class DBProxy:
|
|
|
166
175
|
# mb proxy
|
|
167
176
|
self.mb_proxy_dict = None
|
|
168
177
|
|
|
169
|
-
# self.__reload_shares()
|
|
170
|
-
# self.__reload_hs_distribution()
|
|
171
|
-
|
|
172
178
|
# connect to DB
|
|
173
179
|
def connect(
|
|
174
180
|
self,
|
|
@@ -16809,7 +16815,7 @@ class DBProxy:
|
|
|
16809
16815
|
|
|
16810
16816
|
# set score site to ES job
|
|
16811
16817
|
def setScoreSiteToEs(self, jobSpec, methodName, comment):
|
|
16812
|
-
_logger.debug(f"{methodName} looking for
|
|
16818
|
+
_logger.debug(f"{methodName} looking for single-core site")
|
|
16813
16819
|
|
|
16814
16820
|
# get score PQ in the nucleus associated to the site to run the small ES job
|
|
16815
16821
|
sqlSN = "SELECT /* use_json_type */ ps2.panda_site_name "
|
|
@@ -16867,9 +16873,9 @@ class DBProxy:
|
|
|
16867
16873
|
jobSpec.resource_type = self.get_resource_type_job(jobSpec)
|
|
16868
16874
|
newSiteName = jobSpec.computingSite
|
|
16869
16875
|
if newSiteName is not None:
|
|
16870
|
-
_logger.info(f"{methodName} set
|
|
16876
|
+
_logger.info(f"{methodName} set single-core site to {newSiteName}")
|
|
16871
16877
|
else:
|
|
16872
|
-
_logger.info(f"{methodName} no
|
|
16878
|
+
_logger.info(f"{methodName} no single-core site for {jobSpec.computingSite}")
|
|
16873
16879
|
# return
|
|
16874
16880
|
return
|
|
16875
16881
|
|
|
@@ -22672,6 +22678,18 @@ class DBProxy:
|
|
|
22672
22678
|
_logger.error(f"{comment}: {type} {value}")
|
|
22673
22679
|
return -1
|
|
22674
22680
|
|
|
22681
|
+
def __reload_resource_spec_mapper(self):
|
|
22682
|
+
# update once per hour only
|
|
22683
|
+
if self.__t_update_resource_type_mapper and self.__t_update_resource_type_mapper > datetime.datetime.now() - datetime.timedelta(hours=1):
|
|
22684
|
+
return
|
|
22685
|
+
|
|
22686
|
+
# get the resource types from the DB and make the ResourceSpecMapper object
|
|
22687
|
+
resource_types = self.load_resource_types()
|
|
22688
|
+
if resource_types:
|
|
22689
|
+
self.__resource_spec_mapper = ResourceSpecMapper(resource_types)
|
|
22690
|
+
self.__t_update_resource_type_mapper = datetime.datetime.now()
|
|
22691
|
+
return
|
|
22692
|
+
|
|
22675
22693
|
def load_resource_types(self, formatting="spec"):
|
|
22676
22694
|
"""
|
|
22677
22695
|
Load the resource type table to memory
|
|
@@ -22872,57 +22890,74 @@ class DBProxy:
|
|
|
22872
22890
|
return False, "database error"
|
|
22873
22891
|
|
|
22874
22892
|
# update stat of workers with jobtype breakdown
|
|
22875
|
-
def reportWorkerStats_jobtype(self, harvesterID, siteName,
|
|
22893
|
+
def reportWorkerStats_jobtype(self, harvesterID, siteName, parameter_list):
|
|
22876
22894
|
comment = " /* DBProxy.reportWorkerStats_jobtype */"
|
|
22877
|
-
|
|
22878
|
-
|
|
22895
|
+
method_name = comment.split(" ")[-2].split(".")[-1]
|
|
22896
|
+
tmp_log = LogWrapper(
|
|
22879
22897
|
_logger,
|
|
22880
|
-
|
|
22898
|
+
f"{method_name} < harvesterID={harvesterID} siteName={siteName} >",
|
|
22881
22899
|
)
|
|
22882
|
-
|
|
22883
|
-
|
|
22900
|
+
tmp_log.debug("start")
|
|
22901
|
+
tmp_log.debug(f"params={str(parameter_list)}")
|
|
22884
22902
|
try:
|
|
22885
22903
|
# load new site data
|
|
22886
|
-
|
|
22904
|
+
parameter_list = json.loads(parameter_list)
|
|
22887
22905
|
# set autocommit on
|
|
22888
22906
|
self.conn.begin()
|
|
22889
|
-
|
|
22890
|
-
|
|
22891
|
-
|
|
22892
|
-
|
|
22893
|
-
|
|
22894
|
-
|
|
22895
|
-
|
|
22907
|
+
|
|
22908
|
+
# lock the site data rows
|
|
22909
|
+
var_map = dict()
|
|
22910
|
+
var_map[":harvesterID"] = harvesterID
|
|
22911
|
+
var_map[":siteName"] = siteName
|
|
22912
|
+
sql_lock = "SELECT harvester_ID, computingSite FROM ATLAS_PANDA.Harvester_Worker_Stats "
|
|
22913
|
+
sql_lock += "WHERE harvester_ID=:harvesterID AND computingSite=:siteName FOR UPDATE NOWAIT "
|
|
22914
|
+
try:
|
|
22915
|
+
self.cur.execute(sql_lock + comment, var_map)
|
|
22916
|
+
except Exception:
|
|
22917
|
+
self._rollback()
|
|
22918
|
+
message = "rows locked by another update"
|
|
22919
|
+
tmp_log.debug(message)
|
|
22920
|
+
tmp_log.debug("done")
|
|
22921
|
+
return False, message
|
|
22922
|
+
|
|
22923
|
+
# delete them
|
|
22924
|
+
sql_delete = "DELETE FROM ATLAS_PANDA.Harvester_Worker_Stats "
|
|
22925
|
+
sql_delete += "WHERE harvester_ID=:harvesterID AND computingSite=:siteName "
|
|
22926
|
+
self.cur.execute(sql_delete + comment, var_map)
|
|
22927
|
+
|
|
22896
22928
|
# insert new site data
|
|
22897
|
-
|
|
22898
|
-
|
|
22929
|
+
sql_insert = "INSERT INTO ATLAS_PANDA.Harvester_Worker_Stats (harvester_ID, computingSite, jobType, resourceType, status, n_workers, lastUpdate) "
|
|
22930
|
+
sql_insert += "VALUES (:harvester_ID, :siteName, :jobType, :resourceType, :status, :n_workers, CURRENT_DATE) "
|
|
22899
22931
|
|
|
22900
|
-
|
|
22901
|
-
|
|
22932
|
+
var_map_list = []
|
|
22933
|
+
for jobType in parameter_list:
|
|
22934
|
+
jt_params = parameter_list[jobType]
|
|
22902
22935
|
for resourceType in jt_params:
|
|
22903
22936
|
params = jt_params[resourceType]
|
|
22904
22937
|
if resourceType == "Undefined":
|
|
22905
22938
|
continue
|
|
22906
22939
|
for status in params:
|
|
22907
22940
|
n_workers = params[status]
|
|
22908
|
-
|
|
22909
|
-
|
|
22910
|
-
|
|
22911
|
-
|
|
22912
|
-
|
|
22913
|
-
|
|
22914
|
-
|
|
22915
|
-
|
|
22916
|
-
|
|
22941
|
+
var_map = {
|
|
22942
|
+
":harvester_ID": harvesterID,
|
|
22943
|
+
":siteName": siteName,
|
|
22944
|
+
":status": status,
|
|
22945
|
+
":jobType": jobType,
|
|
22946
|
+
":resourceType": resourceType,
|
|
22947
|
+
":n_workers": n_workers,
|
|
22948
|
+
}
|
|
22949
|
+
var_map_list.append(var_map)
|
|
22950
|
+
|
|
22951
|
+
self.cur.executemany(sql_insert + comment, var_map_list)
|
|
22952
|
+
|
|
22917
22953
|
if not self._commit():
|
|
22918
22954
|
raise RuntimeError("Commit error")
|
|
22919
|
-
|
|
22920
|
-
|
|
22955
|
+
|
|
22956
|
+
tmp_log.debug("done")
|
|
22921
22957
|
return True, "OK"
|
|
22922
|
-
except Exception:
|
|
22923
|
-
# roll back
|
|
22958
|
+
except Exception as e:
|
|
22924
22959
|
self._rollback()
|
|
22925
|
-
self.dumpErrorMessage(
|
|
22960
|
+
self.dumpErrorMessage(tmp_log, method_name)
|
|
22926
22961
|
return False, "database error"
|
|
22927
22962
|
|
|
22928
22963
|
# get stat of workers
|
|
@@ -23412,40 +23447,39 @@ class DBProxy:
|
|
|
23412
23447
|
|
|
23413
23448
|
comment = " /* DBProxy.ups_new_worker_distribution */"
|
|
23414
23449
|
method_name = comment.split(" ")[-2].split(".")[-1]
|
|
23415
|
-
|
|
23416
|
-
|
|
23450
|
+
tmp_log = LogWrapper(_logger, f"{method_name}-{queue}")
|
|
23451
|
+
tmp_log.debug("start")
|
|
23417
23452
|
n_cores_running = 0
|
|
23418
23453
|
workers_queued = {}
|
|
23419
23454
|
n_cores_queued = 0
|
|
23420
23455
|
harvester_ids_temp = list(worker_stats)
|
|
23421
23456
|
|
|
23422
|
-
# HIMEM resource types group
|
|
23423
23457
|
HIMEM = "HIMEM"
|
|
23424
|
-
|
|
23458
|
+
self.__reload_resource_spec_mapper()
|
|
23425
23459
|
|
|
23426
23460
|
# get the configuration for maximum workers of each type
|
|
23427
23461
|
pq_data_des = self.get_config_for_pq(queue)
|
|
23428
23462
|
resource_type_limits = {}
|
|
23429
23463
|
queue_type = "production"
|
|
23430
23464
|
if not pq_data_des:
|
|
23431
|
-
|
|
23465
|
+
tmp_log.debug("Error retrieving queue configuration from DB, limits can not be applied")
|
|
23432
23466
|
else:
|
|
23433
23467
|
try:
|
|
23434
23468
|
resource_type_limits = pq_data_des["uconfig"]["resource_type_limits"]
|
|
23435
23469
|
except KeyError:
|
|
23436
|
-
|
|
23470
|
+
tmp_log.debug("No resource type limits")
|
|
23437
23471
|
pass
|
|
23438
23472
|
try:
|
|
23439
23473
|
queue_type = pq_data_des["type"]
|
|
23440
23474
|
except KeyError:
|
|
23441
|
-
|
|
23475
|
+
tmp_log.error("No queue type")
|
|
23442
23476
|
pass
|
|
23443
23477
|
try:
|
|
23444
23478
|
cores_queue = pq_data_des["corecount"]
|
|
23445
23479
|
if not cores_queue:
|
|
23446
23480
|
cores_queue = 1
|
|
23447
23481
|
except KeyError:
|
|
23448
|
-
|
|
23482
|
+
tmp_log.error("No corecount")
|
|
23449
23483
|
pass
|
|
23450
23484
|
|
|
23451
23485
|
# Retrieve the assigned harvester instance and submit UPS commands only to this instance. We have had multiple
|
|
@@ -23470,7 +23504,7 @@ class DBProxy:
|
|
|
23470
23504
|
for job_type in worker_stats[harvester_id]:
|
|
23471
23505
|
workers_queued.setdefault(job_type, {})
|
|
23472
23506
|
for resource_type in worker_stats[harvester_id][job_type]:
|
|
23473
|
-
core_factor =
|
|
23507
|
+
core_factor = self.__resource_spec_mapper.translate_resourcetype_to_cores(resource_type, cores_queue)
|
|
23474
23508
|
try:
|
|
23475
23509
|
n_cores_running = n_cores_running + worker_stats[harvester_id][job_type][resource_type]["running"] * core_factor
|
|
23476
23510
|
|
|
@@ -23479,14 +23513,14 @@ class DBProxy:
|
|
|
23479
23513
|
resource_type_limits[resource_type] = (
|
|
23480
23514
|
resource_type_limits[resource_type] - worker_stats[harvester_id][job_type][resource_type]["running"]
|
|
23481
23515
|
)
|
|
23482
|
-
|
|
23516
|
+
tmp_log.debug(f"Limit for rt {resource_type} down to {resource_type_limits[resource_type]}")
|
|
23483
23517
|
|
|
23484
23518
|
# This limit is in #CORES, since it mixes single and multi core jobs
|
|
23485
|
-
if resource_type
|
|
23519
|
+
if self.__resource_spec_mapper.is_high_memory(resource_type) and HIMEM in resource_type_limits:
|
|
23486
23520
|
resource_type_limits[HIMEM] = (
|
|
23487
23521
|
resource_type_limits[HIMEM] - worker_stats[harvester_id][job_type][resource_type]["running"] * core_factor
|
|
23488
23522
|
)
|
|
23489
|
-
|
|
23523
|
+
tmp_log.debug(f"Limit for rt group {HIMEM} down to {resource_type_limits[HIMEM]}")
|
|
23490
23524
|
|
|
23491
23525
|
except KeyError:
|
|
23492
23526
|
pass
|
|
@@ -23509,7 +23543,7 @@ class DBProxy:
|
|
|
23509
23543
|
except KeyError:
|
|
23510
23544
|
pass
|
|
23511
23545
|
|
|
23512
|
-
|
|
23546
|
+
tmp_log.debug(f"Queue {queue} queued worker overview: {workers_queued}")
|
|
23513
23547
|
|
|
23514
23548
|
# For queues that need more pressure towards reaching a target
|
|
23515
23549
|
n_cores_running_fake = 0
|
|
@@ -23519,15 +23553,15 @@ class DBProxy:
|
|
|
23519
23553
|
"brokeroff",
|
|
23520
23554
|
]: # don't flood test sites with workers
|
|
23521
23555
|
n_cores_running_fake = pq_data_des["params"]["ups_core_target"]
|
|
23522
|
-
|
|
23523
|
-
except KeyError: # no value defined in
|
|
23556
|
+
tmp_log.debug(f"Using ups_core_target {n_cores_running_fake} for queue {queue}")
|
|
23557
|
+
except KeyError: # no value defined in CRIC
|
|
23524
23558
|
pass
|
|
23525
23559
|
|
|
23526
23560
|
n_cores_running = max(n_cores_running, n_cores_running_fake)
|
|
23527
23561
|
|
|
23528
23562
|
n_cores_target = max(int(n_cores_running * 0.4), 75 * cores_queue)
|
|
23529
23563
|
n_cores_to_submit = max(n_cores_target - n_cores_queued, 5 * cores_queue)
|
|
23530
|
-
|
|
23564
|
+
tmp_log.debug(f"IN CORES: nrunning {n_cores_running}, ntarget {n_cores_target}, nqueued {n_cores_queued}. We need to process {n_cores_to_submit} cores")
|
|
23531
23565
|
|
|
23532
23566
|
# Get the sorted global shares
|
|
23533
23567
|
sorted_shares = self.get_sorted_leaves()
|
|
@@ -23545,20 +23579,20 @@ class DBProxy:
|
|
|
23545
23579
|
"""
|
|
23546
23580
|
self.cur.execute(sql + comment, var_map)
|
|
23547
23581
|
activated_jobs = self.cur.fetchall()
|
|
23548
|
-
|
|
23582
|
+
tmp_log.debug(f"Processing share: {share.name}. Got {len(activated_jobs)} activated jobs")
|
|
23549
23583
|
for gshare, prodsourcelabel, resource_type in activated_jobs:
|
|
23550
|
-
core_factor =
|
|
23584
|
+
core_factor = self.__resource_spec_mapper.translate_resourcetype_to_cores(resource_type, cores_queue)
|
|
23551
23585
|
|
|
23552
23586
|
# translate prodsourcelabel to a subset of job types, typically 'user' and 'managed'
|
|
23553
23587
|
job_type = JobUtils.translate_prodsourcelabel_to_jobtype(queue_type, prodsourcelabel)
|
|
23554
23588
|
# if we reached the limit for the resource type, skip the job
|
|
23555
23589
|
if resource_type in resource_type_limits and resource_type_limits[resource_type] <= 0:
|
|
23556
|
-
#
|
|
23590
|
+
# tmp_log.debug('Reached resource type limit for {0}'.format(resource_type))
|
|
23557
23591
|
continue
|
|
23558
23592
|
|
|
23559
23593
|
# if we reached the limit for the HIMEM resource type group, skip the job
|
|
23560
|
-
if resource_type
|
|
23561
|
-
#
|
|
23594
|
+
if self.__resource_spec_mapper.is_high_memory(resource_type) and HIMEM in resource_type_limits and resource_type_limits[HIMEM] <= 0:
|
|
23595
|
+
# tmp_log.debug('Reached resource type limit for {0}'.format(resource_type))
|
|
23562
23596
|
continue
|
|
23563
23597
|
|
|
23564
23598
|
workers_queued.setdefault(job_type, {})
|
|
@@ -23570,15 +23604,15 @@ class DBProxy:
|
|
|
23570
23604
|
|
|
23571
23605
|
# We reached the number of workers needed
|
|
23572
23606
|
if n_cores_to_submit <= 0:
|
|
23573
|
-
|
|
23607
|
+
tmp_log.debug("Reached cores needed (inner)")
|
|
23574
23608
|
break
|
|
23575
23609
|
|
|
23576
23610
|
# We reached the number of workers needed
|
|
23577
23611
|
if n_cores_to_submit <= 0:
|
|
23578
|
-
|
|
23612
|
+
tmp_log.debug("Reached cores needed (outer)")
|
|
23579
23613
|
break
|
|
23580
23614
|
|
|
23581
|
-
|
|
23615
|
+
tmp_log.debug(f"workers_queued: {workers_queued}")
|
|
23582
23616
|
|
|
23583
23617
|
new_workers = {}
|
|
23584
23618
|
for job_type in workers_queued:
|
|
@@ -23591,7 +23625,7 @@ class DBProxy:
|
|
|
23591
23625
|
# we don't have enough workers for this resource type
|
|
23592
23626
|
new_workers[job_type][resource_type] = -workers_queued[job_type][resource_type] + 1
|
|
23593
23627
|
|
|
23594
|
-
# We should still submit a
|
|
23628
|
+
# We should still submit a basic worker, even if there are no activated jobs to avoid queue deactivation
|
|
23595
23629
|
workers = False
|
|
23596
23630
|
for job_type in new_workers:
|
|
23597
23631
|
for resource_type in new_workers[job_type]:
|
|
@@ -23599,7 +23633,7 @@ class DBProxy:
|
|
|
23599
23633
|
workers = True
|
|
23600
23634
|
break
|
|
23601
23635
|
if not workers:
|
|
23602
|
-
new_workers["managed"] = {
|
|
23636
|
+
new_workers["managed"] = {BASIC_RESOURCE_TYPE: 1}
|
|
23603
23637
|
|
|
23604
23638
|
# In case multiple harvester instances are serving a panda queue, split workers evenly between them
|
|
23605
23639
|
new_workers_per_harvester = {}
|
|
@@ -23612,8 +23646,8 @@ class DBProxy:
|
|
|
23612
23646
|
math.ceil(new_workers[job_type][resource_type] * 1.0 / len(harvester_ids))
|
|
23613
23647
|
)
|
|
23614
23648
|
|
|
23615
|
-
|
|
23616
|
-
|
|
23649
|
+
tmp_log.debug(f"Workers to submit: {new_workers_per_harvester}")
|
|
23650
|
+
tmp_log.debug("done")
|
|
23617
23651
|
return new_workers_per_harvester
|
|
23618
23652
|
|
|
23619
23653
|
# get active consumers
|
|
@@ -5,6 +5,43 @@ Resource type specification for JEDI
|
|
|
5
5
|
|
|
6
6
|
from . import JobUtils
|
|
7
7
|
|
|
8
|
+
HIMEM_THRESHOLD = 2000 # MB per core
|
|
9
|
+
BASIC_RESOURCE_TYPE = "SCORE"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class ResourceSpecMapper(object):
|
|
13
|
+
def __init__(self, resource_types):
|
|
14
|
+
"""
|
|
15
|
+
:param resource_types: list of ResourceSpec objects
|
|
16
|
+
"""
|
|
17
|
+
self.resource_types = resource_types
|
|
18
|
+
|
|
19
|
+
def is_single_core(self, resource_name):
|
|
20
|
+
for resource_type in self.resource_types:
|
|
21
|
+
if resource_type.resource_name == resource_name:
|
|
22
|
+
return resource_type.is_single_core()
|
|
23
|
+
return False
|
|
24
|
+
|
|
25
|
+
def is_multi_core(self, resource_name):
|
|
26
|
+
for resource_type in self.resource_types:
|
|
27
|
+
if resource_type.resource_name == resource_name:
|
|
28
|
+
return resource_type.is_multi_core()
|
|
29
|
+
return False
|
|
30
|
+
|
|
31
|
+
def is_high_memory(self, resource_name):
|
|
32
|
+
for resource_type in self.resource_types:
|
|
33
|
+
if resource_type.resource_name == resource_name:
|
|
34
|
+
if resource_type.minrampercore is not None and resource_type.minrampercore > HIMEM_THRESHOLD:
|
|
35
|
+
return True
|
|
36
|
+
return False
|
|
37
|
+
|
|
38
|
+
def translate_resourcetype_to_cores(self, resource_name, cores_queue):
|
|
39
|
+
# if the resource type is multi-core, return the number of cores in the queue
|
|
40
|
+
if self.is_multi_core(resource_name):
|
|
41
|
+
return cores_queue
|
|
42
|
+
|
|
43
|
+
return 1
|
|
44
|
+
|
|
8
45
|
|
|
9
46
|
class ResourceSpec(object):
|
|
10
47
|
# attributes
|
|
@@ -105,6 +142,15 @@ class ResourceSpec(object):
|
|
|
105
142
|
|
|
106
143
|
return True
|
|
107
144
|
|
|
145
|
+
def is_single_core(self):
|
|
146
|
+
if self.mincore is not None and self.mincore == 1 and self.maxcore is not None and self.maxcore == 1:
|
|
147
|
+
return True
|
|
148
|
+
return False
|
|
149
|
+
|
|
150
|
+
def is_multi_core(self):
|
|
151
|
+
if self.mincore is not None and self.mincore > 1:
|
|
152
|
+
return True
|
|
153
|
+
|
|
108
154
|
def column_names(cls, prefix=None):
|
|
109
155
|
"""
|
|
110
156
|
return column names for DB interactions
|
|
@@ -82,14 +82,6 @@ class SiteSpec(object):
|
|
|
82
82
|
return True
|
|
83
83
|
return False
|
|
84
84
|
|
|
85
|
-
# get resource type
|
|
86
|
-
def getResourceType(self):
|
|
87
|
-
if self.type == "analysis":
|
|
88
|
-
return "ANALY"
|
|
89
|
-
if self.coreCount > 1:
|
|
90
|
-
return "MCORE"
|
|
91
|
-
return "SCORE"
|
|
92
|
-
|
|
93
85
|
# check what type of jobs are allowed
|
|
94
86
|
def getJobSeed(self):
|
|
95
87
|
tmpVal = self.jobseed
|
|
@@ -157,7 +149,7 @@ class SiteSpec(object):
|
|
|
157
149
|
return None
|
|
158
150
|
return int(tmpVal)
|
|
159
151
|
|
|
160
|
-
# get minimum of
|
|
152
|
+
# get minimum of remaining events for jumbo jobs
|
|
161
153
|
def getMinEventsForJumbo(self):
|
|
162
154
|
tmpVal = self.getValueFromCatchall("minEventsForJumbo")
|
|
163
155
|
if tmpVal is None:
|
|
@@ -3580,7 +3580,7 @@ class TaskBuffer:
|
|
|
3580
3580
|
|
|
3581
3581
|
def getResourceTypes(self):
|
|
3582
3582
|
"""
|
|
3583
|
-
Get resource types (SCORE, MCORE,
|
|
3583
|
+
Get resource types (SCORE, MCORE, ...) and their definitions
|
|
3584
3584
|
"""
|
|
3585
3585
|
# get DB proxy
|
|
3586
3586
|
proxy = self.proxyPool.getProxy()
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
release_version = "0.3.3"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/panda_activeusers_query.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/recover_lost_files_daemon.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{panda_server-0.3.3 → panda_server-0.3.4}/pandaserver/daemons/scripts/worker_synchronization.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|