panda-server 0.3.4__tar.gz → 0.3.6__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.4 → panda_server-0.3.6}/PKG-INFO +2 -2
- panda_server-0.3.6/PandaPkgInfo.py +1 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/add_sub.py +0 -58
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/copyArchive.py +11 -6
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/datasetManager.py +3 -2
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ddm.py +3 -3
- panda_server-0.3.6/pandaserver/dataservice/setupper.py +205 -0
- panda_server-0.3.6/pandaserver/dataservice/setupper_atlas_plugin.py +2229 -0
- panda_server-0.3.6/pandaserver/dataservice/setupper_dummy_plugin.py +47 -0
- panda_server-0.3.6/pandaserver/dataservice/setupper_plugin_base.py +67 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/JobUtils.py +14 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/OraDBProxy.py +3 -8
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/TaskBuffer.py +7 -16
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/Utils.py +20 -2
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/userinterface/Client.py +5 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/userinterface/UserIF.py +0 -2
- {panda_server-0.3.4 → panda_server-0.3.6}/pyproject.toml +1 -1
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/sysconfig/panda_server.sysconfig.rpmnew.template +4 -1
- panda_server-0.3.6/templates/sysconfig/panda_server.sysconfig_for_systemd.template +4 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/sysconfig/panda_server_env.systemd.rpmnew.template +3 -3
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/systemd/panda.service.template +2 -1
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/systemd/panda_httpd.service.template +1 -0
- panda_server-0.3.4/PandaPkgInfo.py +0 -1
- panda_server-0.3.4/pandaserver/dataservice/Setupper.py +0 -224
- panda_server-0.3.4/pandaserver/dataservice/SetupperAtlasPlugin.py +0 -2157
- panda_server-0.3.4/pandaserver/dataservice/SetupperDummyPlugin.py +0 -23
- panda_server-0.3.4/pandaserver/dataservice/SetupperPluginBase.py +0 -41
- panda_server-0.3.4/pandaserver/dataservice/forkSetupper.py +0 -96
- {panda_server-0.3.4 → panda_server-0.3.6}/.pre-commit-config.yaml +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/ChangeLog.txt +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/Dockerfile +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/INSTALL.md +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/INSTALL_ATLAS.md +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/LICENSE.txt +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/MANIFEST.in +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/README.md +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/package/hatch_build.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/panda-server.spec +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/ErrorCode.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/SiteMapper.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/brokerage/broker.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/config_utils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/daemon_config.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/config/panda_config.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/Carbon.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/Configurator.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/configurator/aux.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/master.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/master_systemd.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/add_main.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/cache_pilots.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/cache_schedconfig.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/carbon.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/configurator.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/dummy_test.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/evpPD2P.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/metric_collector.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/panda_activeusers_query.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/pilotStreaming.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/process_workflow_files_daemon.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/recover_lost_files_daemon.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/task_evaluator.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/tmpwatch.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/scripts/worker_synchronization.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/daemons/utils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderAtlasPlugin.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderDummyPlugin.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderGen.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderPluginBase.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderResult.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/AdderSimplePlugin.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/DataServiceUtils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ErrorCode.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ProcessLimiter.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/RecoverLostFilesCore.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/activator.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/closer.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/closer_atlas_plugin.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/ddm_handler.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/dyn_data_distributer.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/event_lookup_client_ei.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/event_picker.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/dataservice/finisher.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/DispatcherUtils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/ErrorCode.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/JobDispatcher.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/Protocol.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/Watcher.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/jobdispatcher/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/proxycache/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/proxycache/panda_proxy_cache.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/server/.gacl +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/server/panda.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/CoreUtils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/MailUtils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/allowed_methods.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/oidc_utils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/panda_request.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/srvcore/srv_msg_utils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/CloudSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/CloudTaskSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ConBridge.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/DBProxyPool.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/DatasetSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/DdmSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ErrorCode.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/EventServiceUtils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/FileSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/GlobalShares.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/HarvesterMetricsSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/Initializer.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/JobSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/NucleusSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PanDAMsgProcessor.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PandaDBSchemaInfo.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PickleFileSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PickleJobSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/PrioUtil.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ProcessGroups.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/ResourceSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SQLDumper.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SQLManager.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SiteSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/SupErrors.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/TaskBufferInterface.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WorkerSpec.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WrappedCursor.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WrappedPickle.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/WrappedPostgresConn.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/retryModule.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/task_split_rules.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/taskbuffer/workflow_processor.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/SchemaChecker.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/README.txt +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/mysetup +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/titan_testScript_ec2_alice_1.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/alice/titan_testScript_ec2_alice_2.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/banUser.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/boostPrio.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/boostUser.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/callbackDDM.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/daod_on_demand.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/finishJob.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/finishTaskJEDI.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/getJobs.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killJob.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killJobLowPrio.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killJobsInTask.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killProdJobs.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killTask.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killTaskJEDI.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/killUser.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/README.txt +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/lsstSubmit.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/lsstSubmitMERGEtest.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/lsstSubmitPhosim332.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignJobs.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignSite.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignTask.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reassignWaiting.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/recoverLostFiles.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/reloadInputDS.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/sendCommandToJob.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/setDebugMode.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/setPriority.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testEvgen.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testEvgen17.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testG4sim.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testG4sim17.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testGetCriteriaForGlobalShares.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testGlobalShares.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testJobFlowATLAS.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testReco.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testSimulReco14.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testSiteMap.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testUpdateWorkerPilotStatus.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/test/testutils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/userinterface/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/pcwl_test.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/pcwl_utils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/psnakemake_container.json +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/psnakemake_task.json +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/psnakemake_test.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/__init__.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/extensions.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/log.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/names.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/parser.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/snakeparser/utils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/pandaserver/workflow/workflow_utils.py +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/bin/panda_server-makeSlsXml.exe.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/bin/panda_server-vomsrenew.exe.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/conda_meta.yaml.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/init.d/panda_daemon.exe.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/init.d/panda_httpd.exe.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/init.d/panda_server.exe.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/logrotate.d/panda_server.logrotate.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/panda_server-httpd-FastCGI.conf.rpmnew.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/panda_server-httpd.conf.rpmnew.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/panda_server.cfg.rpmnew.template +0 -0
- {panda_server-0.3.4 → panda_server-0.3.6}/templates/systemd/panda_daemon.service.template +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: panda-server
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.6
|
|
4
4
|
Summary: PanDA Server Package
|
|
5
5
|
Project-URL: Homepage, https://panda-wms.readthedocs.io/en/latest/
|
|
6
6
|
Author-email: PanDA Team <panda-support@cern.ch>
|
|
@@ -17,7 +17,7 @@ Requires-Dist: mod-wsgi
|
|
|
17
17
|
Requires-Dist: numpy
|
|
18
18
|
Requires-Dist: packaging
|
|
19
19
|
Requires-Dist: panda-client-light>=1.5.55
|
|
20
|
-
Requires-Dist: panda-common>=0.
|
|
20
|
+
Requires-Dist: panda-common>=0.1.1
|
|
21
21
|
Requires-Dist: psutil>=5.4.8
|
|
22
22
|
Requires-Dist: pyjwt
|
|
23
23
|
Requires-Dist: pyopenssl
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
release_version = "0.3.6"
|
|
@@ -246,64 +246,6 @@ def main(argv=tuple(), tbuf=None, **kwargs):
|
|
|
246
246
|
errStr = traceback.format_exc()
|
|
247
247
|
tmp_log.error(errStr)
|
|
248
248
|
|
|
249
|
-
tmp_log.debug("Fork session")
|
|
250
|
-
|
|
251
|
-
# thread for fork
|
|
252
|
-
class ForkThr(threading.Thread):
|
|
253
|
-
def __init__(self, fileName):
|
|
254
|
-
threading.Thread.__init__(self)
|
|
255
|
-
self.fileName = fileName
|
|
256
|
-
|
|
257
|
-
def run(self):
|
|
258
|
-
if "VIRTUAL_ENV" in os.environ:
|
|
259
|
-
prefix = os.environ["VIRTUAL_ENV"]
|
|
260
|
-
else:
|
|
261
|
-
prefix = ""
|
|
262
|
-
setupStr = f"source {prefix}/etc/sysconfig/panda_server; "
|
|
263
|
-
runStr = f"{panda_config.native_python}/python -Wignore "
|
|
264
|
-
runStr += panda_config.pandaPython_dir + "/dataservice/forkSetupper.py -i "
|
|
265
|
-
runStr += self.fileName
|
|
266
|
-
if self.fileName.split("/")[-1].startswith("set.NULL."):
|
|
267
|
-
runStr += " -t"
|
|
268
|
-
comStr = setupStr + runStr
|
|
269
|
-
tmp_log.debug(comStr)
|
|
270
|
-
commands_get_status_output(comStr)
|
|
271
|
-
|
|
272
|
-
# get set.* files
|
|
273
|
-
filePatt = panda_config.logdir + "/" + "set.*"
|
|
274
|
-
fileList = glob.glob(filePatt)
|
|
275
|
-
|
|
276
|
-
# the max number of threads
|
|
277
|
-
maxThr = 10
|
|
278
|
-
nThr = 0
|
|
279
|
-
|
|
280
|
-
# loop over all files
|
|
281
|
-
forkThrList = []
|
|
282
|
-
timeNow = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
|
|
283
|
-
for tmpName in fileList:
|
|
284
|
-
if not os.path.exists(tmpName):
|
|
285
|
-
continue
|
|
286
|
-
try:
|
|
287
|
-
# takes care of only recent files
|
|
288
|
-
mod_time = datetime.datetime(*(time.gmtime(os.path.getmtime(tmpName))[:7]))
|
|
289
|
-
if datetime.timedelta(minutes=1) < (timeNow - mod_time) < datetime.timedelta(hours=1):
|
|
290
|
-
cSt, cOut = commands_get_status_output("ps aux | grep fork | grep -v PYTH")
|
|
291
|
-
# if no process is running for the file
|
|
292
|
-
if cSt == 0 and tmpName not in cOut:
|
|
293
|
-
nThr += 1
|
|
294
|
-
thr = ForkThr(tmpName)
|
|
295
|
-
thr.start()
|
|
296
|
-
forkThrList.append(thr)
|
|
297
|
-
if nThr > maxThr:
|
|
298
|
-
break
|
|
299
|
-
except Exception:
|
|
300
|
-
errType, errValue = sys.exc_info()[:2]
|
|
301
|
-
tmp_log.error(f"{errType} {errValue}")
|
|
302
|
-
|
|
303
|
-
# join fork threads
|
|
304
|
-
for thr in forkThrList:
|
|
305
|
-
thr.join()
|
|
306
|
-
|
|
307
249
|
# stop taskBuffer if created inside this script
|
|
308
250
|
if tbuf is None:
|
|
309
251
|
taskBuffer.cleanup(requester=requester_id)
|
|
@@ -6,15 +6,16 @@ import sys
|
|
|
6
6
|
import time
|
|
7
7
|
import traceback
|
|
8
8
|
|
|
9
|
-
import pandaserver.userinterface.Client as Client
|
|
10
9
|
import requests
|
|
11
10
|
from pandacommon.pandalogger.PandaLogger import PandaLogger
|
|
12
11
|
from pandacommon.pandautils.thread_utils import GenericThread
|
|
12
|
+
from urllib3.exceptions import InsecureRequestWarning
|
|
13
|
+
|
|
14
|
+
import pandaserver.userinterface.Client as Client
|
|
13
15
|
from pandaserver.brokerage.SiteMapper import SiteMapper
|
|
14
16
|
from pandaserver.config import panda_config
|
|
15
17
|
from pandaserver.jobdispatcher.Watcher import Watcher
|
|
16
18
|
from pandaserver.taskbuffer import EventServiceUtils
|
|
17
|
-
from urllib3.exceptions import InsecureRequestWarning
|
|
18
19
|
|
|
19
20
|
# logger
|
|
20
21
|
_logger = PandaLogger().getLogger("copyArchive")
|
|
@@ -629,7 +630,7 @@ def main(argv=tuple(), tbuf=None, **kwargs):
|
|
|
629
630
|
varMap[":rFlag1"] = 2
|
|
630
631
|
stDS, resDS = taskBuffer.querySQLS(sql, varMap)
|
|
631
632
|
sqlSS = "SELECT laststart FROM ATLAS_PANDAMETA.siteData "
|
|
632
|
-
sqlSS += "WHERE site=:site AND flag=:flag AND hours=:hours
|
|
633
|
+
sqlSS += "WHERE site=:site AND flag=:flag AND hours=:hours "
|
|
633
634
|
sqlPI = "SELECT PandaID,eventService,attemptNr FROM ATLAS_PANDA.jobsActive4 "
|
|
634
635
|
sqlPI += "WHERE prodSourceLabel=:prodSourceLabel AND jobStatus IN (:jobStatus1,:jobStatus2) "
|
|
635
636
|
sqlPI += "AND (modificationTime<:timeLimit OR stateChangeTime<:timeLimit) "
|
|
@@ -644,9 +645,13 @@ def main(argv=tuple(), tbuf=None, **kwargs):
|
|
|
644
645
|
varMap[":site"] = tmpSite
|
|
645
646
|
varMap[":flag"] = "production"
|
|
646
647
|
varMap[":hours"] = 3
|
|
647
|
-
varMap[":laststart"] = timeLimitSite
|
|
648
648
|
stSS, resSS = taskBuffer.querySQLS(sqlSS, varMap)
|
|
649
|
-
if
|
|
649
|
+
if resSS is not None and len(resSS) > 0:
|
|
650
|
+
last_start = resSS[0][0]
|
|
651
|
+
else:
|
|
652
|
+
last_start = None
|
|
653
|
+
site_status = siteMapper.getSite(tmpSite).status
|
|
654
|
+
if stSS is True and ((last_start is not None and last_start < timeLimitSite) or site_status in ["offline", "test"]):
|
|
650
655
|
# get jobs
|
|
651
656
|
varMap = {}
|
|
652
657
|
varMap[":prodSourceLabel"] = "managed"
|
|
@@ -661,7 +666,7 @@ def main(argv=tuple(), tbuf=None, **kwargs):
|
|
|
661
666
|
stPI, resPI = taskBuffer.querySQLS(sqlPI, varMap)
|
|
662
667
|
jediJobs = []
|
|
663
668
|
# reassign
|
|
664
|
-
_logger.debug(f"reassignJobs for JEDI at inactive site {tmpSite} laststart={
|
|
669
|
+
_logger.debug(f"reassignJobs for JEDI at inactive site {tmpSite} laststart={last_start} status={site_status}")
|
|
665
670
|
if resPI is not None:
|
|
666
671
|
for pandaID, eventService, attemptNr in resPI:
|
|
667
672
|
if eventService in [EventServiceUtils.esMergeJobFlagNumber]:
|
|
@@ -6,9 +6,10 @@ import threading
|
|
|
6
6
|
import time
|
|
7
7
|
import traceback
|
|
8
8
|
|
|
9
|
-
import pandaserver.taskbuffer.ErrorCode
|
|
10
9
|
from pandacommon.pandalogger.PandaLogger import PandaLogger
|
|
11
10
|
from pandacommon.pandautils.thread_utils import GenericThread
|
|
11
|
+
|
|
12
|
+
import pandaserver.taskbuffer.ErrorCode
|
|
12
13
|
from pandaserver.brokerage.SiteMapper import SiteMapper
|
|
13
14
|
from pandaserver.config import panda_config
|
|
14
15
|
from pandaserver.dataservice import DataServiceUtils
|
|
@@ -255,7 +256,7 @@ def main(tbuf=None, **kwargs):
|
|
|
255
256
|
|
|
256
257
|
# close datasets
|
|
257
258
|
_logger.debug("==== close datasets ====")
|
|
258
|
-
timeLimitU = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) - datetime.timedelta(minutes=
|
|
259
|
+
timeLimitU = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) - datetime.timedelta(minutes=1)
|
|
259
260
|
timeLimitL = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None) - datetime.timedelta(days=3)
|
|
260
261
|
closeLock = threading.Semaphore(5)
|
|
261
262
|
closeProxyLock = threading.Lock()
|
|
@@ -10,7 +10,6 @@ import traceback
|
|
|
10
10
|
|
|
11
11
|
from typing import Dict, List
|
|
12
12
|
|
|
13
|
-
from pandaserver.srvcore import CoreUtils
|
|
14
13
|
from rucio.client import Client as RucioClient
|
|
15
14
|
from rucio.common.exception import (
|
|
16
15
|
DataIdentifierAlreadyExists,
|
|
@@ -21,6 +20,7 @@ from rucio.common.exception import (
|
|
|
21
20
|
FileAlreadyExists,
|
|
22
21
|
UnsupportedOperation,
|
|
23
22
|
)
|
|
23
|
+
from pandaserver.srvcore import CoreUtils
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
# rucio
|
|
@@ -910,8 +910,8 @@ class RucioAPI:
|
|
|
910
910
|
if user_info is not None:
|
|
911
911
|
return_value = True
|
|
912
912
|
break
|
|
913
|
-
except Exception as
|
|
914
|
-
error_message = f"{str(
|
|
913
|
+
except Exception as error:
|
|
914
|
+
error_message = f"{str(error)}"
|
|
915
915
|
user_info = error_message
|
|
916
916
|
return return_value, user_info
|
|
917
917
|
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"""
|
|
2
|
+
setup dataset
|
|
3
|
+
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
import threading
|
|
8
|
+
import traceback
|
|
9
|
+
from typing import List
|
|
10
|
+
|
|
11
|
+
from pandacommon.pandalogger.LogWrapper import LogWrapper
|
|
12
|
+
from pandacommon.pandalogger.PandaLogger import PandaLogger
|
|
13
|
+
from pandaserver.config import panda_config
|
|
14
|
+
from pandaserver.taskbuffer import EventServiceUtils
|
|
15
|
+
from pandaserver.taskbuffer.PickleJobSpec import PickleJobSpec
|
|
16
|
+
|
|
17
|
+
# logger
|
|
18
|
+
_logger = PandaLogger().getLogger("setupper")
|
|
19
|
+
|
|
20
|
+
panda_config.setupPlugin()
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
# main class
|
|
24
|
+
class Setupper(threading.Thread):
|
|
25
|
+
"""
|
|
26
|
+
Main class for setting up the dataset.
|
|
27
|
+
"""
|
|
28
|
+
# constructor
|
|
29
|
+
def __init__(
|
|
30
|
+
self,
|
|
31
|
+
taskBuffer,
|
|
32
|
+
jobs: List[object],
|
|
33
|
+
resubmit: bool = False,
|
|
34
|
+
panda_ddm: bool = False,
|
|
35
|
+
ddm_attempt: int = 0,
|
|
36
|
+
only_ta: bool = False,
|
|
37
|
+
first_submission: bool = True,
|
|
38
|
+
):
|
|
39
|
+
"""
|
|
40
|
+
Constructor for the Setupper class.
|
|
41
|
+
|
|
42
|
+
:param taskBuffer: The buffer for tasks.
|
|
43
|
+
:param jobs: The jobs to be processed.
|
|
44
|
+
:param resubmit: A flag to indicate if the job is a resubmission. Defaults to False.
|
|
45
|
+
:param panda_ddm: A flag to indicate if PandaDDM is used. Defaults to False.
|
|
46
|
+
:param ddm_attempt: The number of attempts for DDM job. Defaults to 0.
|
|
47
|
+
:param only_ta: A flag to indicate if only task assignment should be run. Defaults to False.
|
|
48
|
+
:param first_submission: A flag to indicate if it's the first submission. Defaults to True.
|
|
49
|
+
"""
|
|
50
|
+
threading.Thread.__init__(self)
|
|
51
|
+
self.jobs = jobs
|
|
52
|
+
self.task_buffer = taskBuffer
|
|
53
|
+
# resubmission or not
|
|
54
|
+
self.resubmit = resubmit
|
|
55
|
+
# use PandaDDM
|
|
56
|
+
self.panda_ddm = panda_ddm
|
|
57
|
+
# priority for ddm job
|
|
58
|
+
self.ddm_attempt = ddm_attempt
|
|
59
|
+
# run task assignment only
|
|
60
|
+
self.only_ta = only_ta
|
|
61
|
+
# first submission
|
|
62
|
+
self.first_submission = first_submission
|
|
63
|
+
|
|
64
|
+
# main
|
|
65
|
+
def run(self) -> None:
|
|
66
|
+
"""
|
|
67
|
+
Main method for running the setup process.
|
|
68
|
+
"""
|
|
69
|
+
try:
|
|
70
|
+
# make a message instance
|
|
71
|
+
tmp_log = LogWrapper(_logger, None)
|
|
72
|
+
# run main procedure in the same process
|
|
73
|
+
tmp_log.debug("main start")
|
|
74
|
+
tmp_log.debug(f"first_submission={self.first_submission}")
|
|
75
|
+
# make Specs pickleable
|
|
76
|
+
p_job_list = []
|
|
77
|
+
for job_spec in self.jobs:
|
|
78
|
+
p_job = PickleJobSpec()
|
|
79
|
+
p_job.update(job_spec)
|
|
80
|
+
p_job_list.append(p_job)
|
|
81
|
+
self.jobs = p_job_list
|
|
82
|
+
# group jobs per VO
|
|
83
|
+
vo_jobs_map = {}
|
|
84
|
+
tmp_log.debug(f"{len(self.jobs)} jobs in total")
|
|
85
|
+
for tmp_job in self.jobs:
|
|
86
|
+
# set VO=local for DDM free
|
|
87
|
+
if tmp_job.destinationSE == "local":
|
|
88
|
+
tmp_vo = "local"
|
|
89
|
+
else:
|
|
90
|
+
tmp_vo = tmp_job.VO
|
|
91
|
+
# make map
|
|
92
|
+
vo_jobs_map.setdefault(tmp_vo, [])
|
|
93
|
+
vo_jobs_map[tmp_vo].append(tmp_job)
|
|
94
|
+
# loop over all VOs
|
|
95
|
+
for tmp_vo in vo_jobs_map:
|
|
96
|
+
tmp_job_list = vo_jobs_map[tmp_vo]
|
|
97
|
+
tmp_log.debug(f"vo={tmp_vo} has {len(tmp_job_list)} jobs")
|
|
98
|
+
# get plugin
|
|
99
|
+
setupper_plugin_class = panda_config.getPlugin("setupper_plugins", tmp_vo)
|
|
100
|
+
if setupper_plugin_class is None:
|
|
101
|
+
# use ATLAS plug-in by default
|
|
102
|
+
from pandaserver.dataservice.setupper_atlas_plugin import SetupperAtlasPlugin
|
|
103
|
+
setupper_plugin_class = SetupperAtlasPlugin
|
|
104
|
+
tmp_log.debug(f"plugin name -> {setupper_plugin_class.__name__}")
|
|
105
|
+
try:
|
|
106
|
+
# make plugin
|
|
107
|
+
setupper_plugin = setupper_plugin_class(
|
|
108
|
+
self.task_buffer,
|
|
109
|
+
self.jobs,
|
|
110
|
+
tmp_log,
|
|
111
|
+
resubmit=self.resubmit,
|
|
112
|
+
panda_ddm=self.panda_ddm,
|
|
113
|
+
ddm_attempt=self.ddm_attempt,
|
|
114
|
+
only_ta=self.only_ta,
|
|
115
|
+
first_submission=self.first_submission,
|
|
116
|
+
)
|
|
117
|
+
# run plugin
|
|
118
|
+
tmp_log.debug("run plugin")
|
|
119
|
+
setupper_plugin.run()
|
|
120
|
+
# go forward if not Task Assignment
|
|
121
|
+
if not self.only_ta:
|
|
122
|
+
# update jobs
|
|
123
|
+
tmp_log.debug("update jobs")
|
|
124
|
+
self.update_jobs(setupper_plugin.jobs + setupper_plugin.jumbo_jobs, tmp_log)
|
|
125
|
+
# execute post process
|
|
126
|
+
tmp_log.debug("post execute plugin")
|
|
127
|
+
setupper_plugin.post_run()
|
|
128
|
+
tmp_log.debug("done plugin")
|
|
129
|
+
except Exception:
|
|
130
|
+
error_type, error_value = sys.exc_info()[:2]
|
|
131
|
+
tmp_log.error(f"plugin failed with {error_type}:{error_value}")
|
|
132
|
+
tmp_log.debug("main end")
|
|
133
|
+
except Exception as error:
|
|
134
|
+
tmp_log.error(f"master failed with {str(error)} {traceback.format_exc()}")
|
|
135
|
+
|
|
136
|
+
# update jobs
|
|
137
|
+
def update_jobs(self, job_list: List[object], tmp_log: LogWrapper) -> None:
|
|
138
|
+
"""
|
|
139
|
+
Updates the status of jobs.
|
|
140
|
+
|
|
141
|
+
:param job_list: The list of jobs to be updated.
|
|
142
|
+
:param log: The logger to be used for logging.
|
|
143
|
+
"""
|
|
144
|
+
update_jobs = []
|
|
145
|
+
failed_jobs = []
|
|
146
|
+
activate_jobs = []
|
|
147
|
+
waiting_jobs = []
|
|
148
|
+
# sort jobs by status
|
|
149
|
+
for job in job_list:
|
|
150
|
+
# failed jobs
|
|
151
|
+
if job.jobStatus in ["failed", "cancelled"]:
|
|
152
|
+
failed_jobs.append(job)
|
|
153
|
+
# waiting
|
|
154
|
+
elif job.jobStatus == "waiting":
|
|
155
|
+
waiting_jobs.append(job)
|
|
156
|
+
# no input jobs
|
|
157
|
+
elif job.dispatchDBlock == "NULL":
|
|
158
|
+
activate_jobs.append(job)
|
|
159
|
+
# normal jobs
|
|
160
|
+
else:
|
|
161
|
+
# change status
|
|
162
|
+
job.jobStatus = "assigned"
|
|
163
|
+
update_jobs.append(job)
|
|
164
|
+
|
|
165
|
+
# trigger merge generation if all events are done
|
|
166
|
+
new_activate_jobs = []
|
|
167
|
+
n_finished = 0
|
|
168
|
+
for job in activate_jobs:
|
|
169
|
+
if job.notDiscardEvents() and job.allOkEvents() and not EventServiceUtils.isEventServiceMerge(job):
|
|
170
|
+
self.task_buffer.updateJobs([job])
|
|
171
|
+
# change status
|
|
172
|
+
job.jobStatus = "finished"
|
|
173
|
+
self.task_buffer.updateJobs([job], False)
|
|
174
|
+
n_finished += 1
|
|
175
|
+
else:
|
|
176
|
+
new_activate_jobs.append(job)
|
|
177
|
+
activate_jobs = new_activate_jobs
|
|
178
|
+
tmp_log.debug(f"# of finished jobs in activated : {n_finished}")
|
|
179
|
+
new_update_jobs = []
|
|
180
|
+
n_finished = 0
|
|
181
|
+
for job in update_jobs:
|
|
182
|
+
if job.notDiscardEvents() and job.allOkEvents() and not EventServiceUtils.isEventServiceMerge(job):
|
|
183
|
+
self.task_buffer.updateJobs([job], True)
|
|
184
|
+
# change status
|
|
185
|
+
job.jobStatus = "finished"
|
|
186
|
+
self.task_buffer.updateJobs([job], True)
|
|
187
|
+
n_finished += 1
|
|
188
|
+
else:
|
|
189
|
+
new_update_jobs.append(job)
|
|
190
|
+
update_jobs = new_update_jobs
|
|
191
|
+
tmp_log.debug(f"# of finished jobs in defined : {n_finished}")
|
|
192
|
+
# update DB
|
|
193
|
+
tmp_log.debug(f"# of activated jobs : {len(activate_jobs)}")
|
|
194
|
+
self.task_buffer.activateJobs(activate_jobs)
|
|
195
|
+
tmp_log.debug(f"# of updated jobs : {len(update_jobs)}")
|
|
196
|
+
self.task_buffer.updateJobs(update_jobs, True)
|
|
197
|
+
tmp_log.debug(f"# of failed jobs : {len(failed_jobs)}")
|
|
198
|
+
self.task_buffer.updateJobs(failed_jobs, True)
|
|
199
|
+
tmp_log.debug(f"# of waiting jobs : {len(waiting_jobs)}")
|
|
200
|
+
self.task_buffer.keepJobs(waiting_jobs)
|
|
201
|
+
# delete local values
|
|
202
|
+
del update_jobs
|
|
203
|
+
del failed_jobs
|
|
204
|
+
del activate_jobs
|
|
205
|
+
del waiting_jobs
|