panda-server 0.3.1__tar.gz → 0.3.3__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.1 → panda_server-0.3.3}/Dockerfile +6 -1
- {panda_server-0.3.1 → panda_server-0.3.3}/PKG-INFO +1 -1
- panda_server-0.3.3/PandaPkgInfo.py +1 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/brokerage/broker.py +2 -2
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/datasetManager.py +14 -14
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/evpPD2P.py +1 -1
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/AdderAtlasPlugin.py +7 -7
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/AdderSimplePlugin.py +2 -2
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/RecoverLostFilesCore.py +1 -1
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/SetupperAtlasPlugin.py +22 -23
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/closer.py +16 -24
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/closer_atlas_plugin.py +2 -2
- panda_server-0.3.3/pandaserver/dataservice/ddm.py +921 -0
- panda_server-0.3.3/pandaserver/dataservice/ddm_handler.py +95 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/dyn_data_distributer.py +22 -27
- panda_server-0.3.3/pandaserver/dataservice/event_lookup_client_ei.py +77 -0
- panda_server-0.3.3/pandaserver/dataservice/event_picker.py +263 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/jobdispatcher/JobDispatcher.py +6 -5
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/jobdispatcher/Protocol.py +1 -1
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/jobdispatcher/Watcher.py +1 -2
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/OraDBProxy.py +7 -5
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/TaskBuffer.py +2 -2
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/task_split_rules.py +33 -6
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/reloadInputDS.py +1 -1
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/userinterface/UserIF.py +1 -1
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/panda_server-httpd-FastCGI.conf.rpmnew.template +7 -3
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/sysconfig/panda_server.sysconfig.rpmnew.template +22 -2
- panda_server-0.3.1/PandaPkgInfo.py +0 -1
- panda_server-0.3.1/pandaserver/dataservice/DDM.py +0 -709
- panda_server-0.3.1/pandaserver/dataservice/DDMHandler.py +0 -51
- panda_server-0.3.1/pandaserver/dataservice/EventPicker.py +0 -373
- panda_server-0.3.1/pandaserver/dataservice/eventLookupClientEI.py +0 -57
- {panda_server-0.3.1 → panda_server-0.3.3}/.pre-commit-config.yaml +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/ChangeLog.txt +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/INSTALL.md +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/INSTALL_ATLAS.md +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/LICENSE.txt +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/MANIFEST.in +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/README.md +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/package/hatch_build.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/panda-server.spec +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/brokerage/ErrorCode.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/brokerage/SiteMapper.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/brokerage/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/config/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/config/config_utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/config/daemon_config.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/config/panda_config.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/configurator/Carbon.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/configurator/Configurator.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/configurator/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/configurator/aux.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/master.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/master_systemd.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/add_main.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/add_sub.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/cache_pilots.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/cache_schedconfig.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/carbon.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/configurator.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/copyArchive.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/dummy_test.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/metric_collector.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/panda_activeusers_query.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/pilotStreaming.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/process_workflow_files_daemon.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/recover_lost_files_daemon.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/task_evaluator.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/tmpwatch.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/scripts/worker_synchronization.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/daemons/utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/AdderDummyPlugin.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/AdderGen.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/AdderPluginBase.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/AdderResult.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/DataServiceUtils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/ErrorCode.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/ProcessLimiter.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/Setupper.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/SetupperDummyPlugin.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/SetupperPluginBase.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/activator.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/finisher.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/dataservice/forkSetupper.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/jobdispatcher/DispatcherUtils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/jobdispatcher/ErrorCode.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/jobdispatcher/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/proxycache/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/proxycache/panda_proxy_cache.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/server/.gacl +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/server/panda.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/srvcore/CoreUtils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/srvcore/MailUtils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/srvcore/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/srvcore/allowed_methods.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/srvcore/oidc_utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/srvcore/panda_request.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/srvcore/srv_msg_utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/CloudSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/CloudTaskSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/ConBridge.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/DBProxyPool.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/DatasetSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/DdmSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/ErrorCode.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/EventServiceUtils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/FileSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/GlobalShares.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/HarvesterMetricsSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/Initializer.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/JobSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/JobUtils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/NucleusSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/PanDAMsgProcessor.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/PandaDBSchemaInfo.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/PickleFileSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/PickleJobSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/PrioUtil.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/ProcessGroups.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/ResourceSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/SQLDumper.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/SQLManager.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/SiteSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/SupErrors.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/TaskBufferInterface.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/Utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/WorkerSpec.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/WrappedCursor.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/WrappedPickle.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/WrappedPostgresConn.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/retryModule.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/taskbuffer/workflow_processor.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/SchemaChecker.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/alice/README.txt +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/alice/mysetup +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/alice/titan_testScript_ec2_alice_1.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/alice/titan_testScript_ec2_alice_2.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/banUser.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/boostPrio.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/boostUser.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/callbackDDM.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/daod_on_demand.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/finishJob.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/finishTaskJEDI.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/getJobs.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/killJob.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/killJobLowPrio.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/killJobsInTask.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/killProdJobs.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/killTask.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/killTaskJEDI.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/killUser.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/lsst/README.txt +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/lsst/lsstSubmit.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/lsst/lsstSubmitMERGEtest.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/lsst/lsstSubmitPhosim332.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/lsst/prepare-client-tarball-from-bigpanda-server.sh +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/reassignJobs.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/reassignSite.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/reassignTask.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/reassignWaiting.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/recoverLostFiles.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/sendCommandToJob.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/setDebugMode.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/setPriority.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testEvgen.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testEvgen17.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testG4sim.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testG4sim17.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testGetCriteriaForGlobalShares.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testGlobalShares.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testJobFlowATLAS.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testReco.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testSimulReco14.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testSiteMap.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testUpdateWorkerPilotStatus.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/test/testutils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/userinterface/Client.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/userinterface/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/pcwl_test.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/pcwl_utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/psnakemake_container.json +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/psnakemake_task.json +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/psnakemake_test.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/snakeparser/__init__.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/snakeparser/extensions.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/snakeparser/log.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/snakeparser/names.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/snakeparser/parser.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/snakeparser/utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pandaserver/workflow/workflow_utils.py +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/pyproject.toml +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/bin/panda_server-makeSlsXml.exe.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/bin/panda_server-vomsrenew.exe.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/conda_meta.yaml.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/init.d/panda_daemon.exe.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/init.d/panda_httpd.exe.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/init.d/panda_server.exe.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/logrotate.d/panda_server.logrotate.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/panda_server-httpd.conf.rpmnew.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/panda_server.cfg.rpmnew.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/sysconfig/panda_server_env.systemd.rpmnew.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/systemd/panda.service.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/systemd/panda_daemon.service.template +0 -0
- {panda_server-0.3.1 → panda_server-0.3.3}/templates/systemd/panda_httpd.service.template +0 -0
|
@@ -8,7 +8,7 @@ RUN yum update -y
|
|
|
8
8
|
RUN yum install -y epel-release
|
|
9
9
|
|
|
10
10
|
RUN yum install -y httpd httpd-devel gcc gridsite git psmisc less wget logrotate procps which \
|
|
11
|
-
openssl-devel readline-devel bzip2-devel libffi-devel zlib-devel
|
|
11
|
+
openssl-devel readline-devel bzip2-devel libffi-devel zlib-devel systemd-udev
|
|
12
12
|
|
|
13
13
|
# install python
|
|
14
14
|
RUN mkdir /tmp/python && cd /tmp/python && \
|
|
@@ -25,6 +25,11 @@ RUN yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x
|
|
|
25
25
|
RUN yum install --nogpgcheck -y postgresql16
|
|
26
26
|
RUN yum clean all && rm -rf /var/cache/yum
|
|
27
27
|
|
|
28
|
+
# update network limitations
|
|
29
|
+
# RUN echo 4096 > /proc/sys/net/core/somaxconn
|
|
30
|
+
# RUN sysctl -w net.core.somaxconn=4096
|
|
31
|
+
RUN echo 'net.core.somaxconn=4096' >> /etc/sysctl.d/999-net.somax.conf
|
|
32
|
+
|
|
28
33
|
# setup venv with pythonX.Y
|
|
29
34
|
RUN python$(echo ${PYTHON_VERSION} | sed -E 's/\.[0-9]+$//') -m venv /opt/panda
|
|
30
35
|
RUN /opt/panda/bin/pip install --no-cache-dir -U pip
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
release_version = "0.3.3"
|
|
@@ -12,7 +12,7 @@ from pandaserver.brokerage import ErrorCode
|
|
|
12
12
|
from pandaserver.config import panda_config
|
|
13
13
|
from pandaserver.dataservice import DataServiceUtils
|
|
14
14
|
from pandaserver.dataservice.DataServiceUtils import select_scope
|
|
15
|
-
from pandaserver.dataservice.
|
|
15
|
+
from pandaserver.dataservice.ddm import rucioAPI
|
|
16
16
|
from pandaserver.taskbuffer import ProcessGroups
|
|
17
17
|
|
|
18
18
|
_log = PandaLogger().getLogger("broker")
|
|
@@ -99,7 +99,7 @@ def _getOkFiles(
|
|
|
99
99
|
# get all replicas
|
|
100
100
|
if rucio_url not in allOkFilesMap:
|
|
101
101
|
allOkFilesMap[rucio_url] = {}
|
|
102
|
-
tmpStat, tmpAvaFiles = rucioAPI.
|
|
102
|
+
tmpStat, tmpAvaFiles = rucioAPI.list_file_replicas(allScopeList, allLFNs, tmpSE)
|
|
103
103
|
if not tmpStat and tmpLog is not None:
|
|
104
104
|
tmpLog.debug("getOkFile failed to get file replicas")
|
|
105
105
|
tmpAvaFiles = {}
|
|
@@ -14,7 +14,7 @@ from pandaserver.config import panda_config
|
|
|
14
14
|
from pandaserver.dataservice import DataServiceUtils
|
|
15
15
|
from pandaserver.dataservice.closer import Closer
|
|
16
16
|
from pandaserver.dataservice.DataServiceUtils import select_scope
|
|
17
|
-
from pandaserver.dataservice.
|
|
17
|
+
from pandaserver.dataservice.ddm import rucioAPI
|
|
18
18
|
from pandaserver.dataservice.finisher import Finisher
|
|
19
19
|
from pandaserver.taskbuffer import EventServiceUtils
|
|
20
20
|
|
|
@@ -198,11 +198,11 @@ def main(tbuf=None, **kwargs):
|
|
|
198
198
|
dsExists = False
|
|
199
199
|
if dsExists:
|
|
200
200
|
# check if dataset exists
|
|
201
|
-
status, out = rucioAPI.
|
|
201
|
+
status, out = rucioAPI.get_metadata(name)
|
|
202
202
|
if status is True:
|
|
203
203
|
if out is not None:
|
|
204
204
|
try:
|
|
205
|
-
rucioAPI.
|
|
205
|
+
rucioAPI.close_dataset(name)
|
|
206
206
|
status = True
|
|
207
207
|
except Exception:
|
|
208
208
|
errtype, errvalue = sys.exc_info()[:2]
|
|
@@ -233,7 +233,7 @@ def main(tbuf=None, **kwargs):
|
|
|
233
233
|
if not dsExists:
|
|
234
234
|
continue
|
|
235
235
|
# count # of files
|
|
236
|
-
status, out = rucioAPI.
|
|
236
|
+
status, out = rucioAPI.get_number_of_files(name)
|
|
237
237
|
if status is not True:
|
|
238
238
|
if status is False:
|
|
239
239
|
_logger.error(out)
|
|
@@ -244,7 +244,7 @@ def main(tbuf=None, **kwargs):
|
|
|
244
244
|
if nFile == 0:
|
|
245
245
|
# erase dataset
|
|
246
246
|
_logger.debug(f"erase {name}")
|
|
247
|
-
status, out = rucioAPI.
|
|
247
|
+
status, out = rucioAPI.erase_dataset(name)
|
|
248
248
|
_logger.debug(f"OK with {name}")
|
|
249
249
|
except Exception:
|
|
250
250
|
pass
|
|
@@ -401,11 +401,11 @@ def main(tbuf=None, **kwargs):
|
|
|
401
401
|
status, out = True, ""
|
|
402
402
|
elif dsExists:
|
|
403
403
|
# check if dataset exists
|
|
404
|
-
status, out = rucioAPI.
|
|
404
|
+
status, out = rucioAPI.get_metadata(name)
|
|
405
405
|
if status is True:
|
|
406
406
|
if out is not None:
|
|
407
407
|
try:
|
|
408
|
-
rucioAPI.
|
|
408
|
+
rucioAPI.close_dataset(name)
|
|
409
409
|
status = True
|
|
410
410
|
except Exception:
|
|
411
411
|
errtype, errvalue = sys.exc_info()[:2]
|
|
@@ -434,7 +434,7 @@ def main(tbuf=None, **kwargs):
|
|
|
434
434
|
# set tobedeleted to dis
|
|
435
435
|
setTobeDeletedToDis(name)
|
|
436
436
|
# count # of files
|
|
437
|
-
status, out = rucioAPI.
|
|
437
|
+
status, out = rucioAPI.get_number_of_files(name)
|
|
438
438
|
if status is not True:
|
|
439
439
|
if status is False:
|
|
440
440
|
_logger.error(out)
|
|
@@ -446,7 +446,7 @@ def main(tbuf=None, **kwargs):
|
|
|
446
446
|
if nFile == 0:
|
|
447
447
|
# erase dataset
|
|
448
448
|
_logger.debug(f"erase {name}")
|
|
449
|
-
status, out = rucioAPI.
|
|
449
|
+
status, out = rucioAPI.erase_dataset(name)
|
|
450
450
|
_logger.debug(f"OK with {name}")
|
|
451
451
|
except Exception:
|
|
452
452
|
pass
|
|
@@ -567,7 +567,7 @@ def main(tbuf=None, **kwargs):
|
|
|
567
567
|
_logger.debug(f"Eraser {self.operationType} dis {modDate} {name}")
|
|
568
568
|
# delete or shorten
|
|
569
569
|
endStatus = "deleted"
|
|
570
|
-
status, out = rucioAPI.
|
|
570
|
+
status, out = rucioAPI.erase_dataset(name)
|
|
571
571
|
if not status:
|
|
572
572
|
_logger.error(out)
|
|
573
573
|
continue
|
|
@@ -699,7 +699,7 @@ def main(tbuf=None, **kwargs):
|
|
|
699
699
|
nTokens += len(file.destinationDBlockToken.split(","))
|
|
700
700
|
# get files in LRC
|
|
701
701
|
_logger.debug(f"{job.PandaID} Cloud:{job.cloud}")
|
|
702
|
-
tmpStat, okFiles = rucioAPI.
|
|
702
|
+
tmpStat, okFiles = rucioAPI.list_file_replicas(scopes, lfns, seList)
|
|
703
703
|
if not tmpStat:
|
|
704
704
|
_logger.error(f"{job.PandaID} failed to get file replicas")
|
|
705
705
|
okFiles = {}
|
|
@@ -852,7 +852,7 @@ def main(tbuf=None, **kwargs):
|
|
|
852
852
|
scopes.append(tmpFile.scope)
|
|
853
853
|
# get file replicas
|
|
854
854
|
_logger.debug(f"{tmpJob.PandaID} check input files at {tmpJob.computingSite}")
|
|
855
|
-
tmpStat, okFiles = rucioAPI.
|
|
855
|
+
tmpStat, okFiles = rucioAPI.list_file_replicas(scopes, lfns)
|
|
856
856
|
if not tmpStat:
|
|
857
857
|
pass
|
|
858
858
|
else:
|
|
@@ -955,7 +955,7 @@ def main(tbuf=None, **kwargs):
|
|
|
955
955
|
if tmpFile.type == "input" and tmpFile.status != "ready":
|
|
956
956
|
# get replicas
|
|
957
957
|
if tmpFile.dispatchDBlock not in replicaMap:
|
|
958
|
-
tmpStat, repMap = rucioAPI.
|
|
958
|
+
tmpStat, repMap = rucioAPI.list_dataset_replicas(tmpFile.dispatchDBlock)
|
|
959
959
|
if tmpStat != 0:
|
|
960
960
|
repMap = {}
|
|
961
961
|
replicaMap[tmpFile.dispatchDBlock] = repMap
|
|
@@ -1088,7 +1088,7 @@ def main(tbuf=None, **kwargs):
|
|
|
1088
1088
|
if allDone:
|
|
1089
1089
|
_logger.debug(f"deleting sub {name}")
|
|
1090
1090
|
try:
|
|
1091
|
-
rucioAPI.
|
|
1091
|
+
rucioAPI.erase_dataset(name, grace_period=4)
|
|
1092
1092
|
status = True
|
|
1093
1093
|
except Exception:
|
|
1094
1094
|
errtype, errvalue = sys.exc_info()[:2]
|
|
@@ -9,7 +9,7 @@ from pandacommon.pandalogger.PandaLogger import PandaLogger
|
|
|
9
9
|
from pandacommon.pandautils.thread_utils import GenericThread
|
|
10
10
|
from pandaserver.brokerage import SiteMapper
|
|
11
11
|
from pandaserver.config import panda_config
|
|
12
|
-
from pandaserver.dataservice.
|
|
12
|
+
from pandaserver.dataservice.event_picker import EventPicker
|
|
13
13
|
|
|
14
14
|
# logger
|
|
15
15
|
_logger = PandaLogger().getLogger("evpPD2P")
|
|
@@ -15,7 +15,7 @@ from pandaserver.config import panda_config
|
|
|
15
15
|
from pandaserver.dataservice import DataServiceUtils, ErrorCode
|
|
16
16
|
from pandaserver.dataservice.AdderPluginBase import AdderPluginBase
|
|
17
17
|
from pandaserver.dataservice.DataServiceUtils import select_scope
|
|
18
|
-
from pandaserver.dataservice.
|
|
18
|
+
from pandaserver.dataservice.ddm import rucioAPI
|
|
19
19
|
from pandaserver.srvcore.MailUtils import MailUtils
|
|
20
20
|
from pandaserver.taskbuffer import EventServiceUtils, JobUtils
|
|
21
21
|
from rucio.common.exception import (
|
|
@@ -616,9 +616,9 @@ class AdderAtlasPlugin(AdderPluginBase):
|
|
|
616
616
|
regMsgStr = f"File registration with backend={self.ddmBackEnd} for {regNumFiles} files "
|
|
617
617
|
if len(zipFiles) > 0:
|
|
618
618
|
self.logger.debug(f"registerZipFiles {str(zipFiles)}")
|
|
619
|
-
rucioAPI.
|
|
619
|
+
rucioAPI.register_zip_files(zipFiles)
|
|
620
620
|
self.logger.debug(f"registerFilesInDatasets {str(destIdMap)} zip={str(contZipMap)}")
|
|
621
|
-
out = rucioAPI.
|
|
621
|
+
out = rucioAPI.register_files_in_dataset(destIdMap, contZipMap)
|
|
622
622
|
except (
|
|
623
623
|
DataIdentifierNotFound,
|
|
624
624
|
FileConsistencyMismatch,
|
|
@@ -709,7 +709,7 @@ class AdderAtlasPlugin(AdderPluginBase):
|
|
|
709
709
|
for iDDMTry in range(3):
|
|
710
710
|
isFailed = False
|
|
711
711
|
try:
|
|
712
|
-
status = rucioAPI.
|
|
712
|
+
status = rucioAPI.register_dataset_subscription(
|
|
713
713
|
tmpName,
|
|
714
714
|
[dq2ID],
|
|
715
715
|
owner="panda",
|
|
@@ -763,7 +763,7 @@ class AdderAtlasPlugin(AdderPluginBase):
|
|
|
763
763
|
out = "OK"
|
|
764
764
|
isFailed = False
|
|
765
765
|
try:
|
|
766
|
-
rucioAPI.
|
|
766
|
+
rucioAPI.register_dataset_location(
|
|
767
767
|
tmpDsNameLoc,
|
|
768
768
|
[tmpLocName],
|
|
769
769
|
owner="panda",
|
|
@@ -854,7 +854,7 @@ class AdderAtlasPlugin(AdderPluginBase):
|
|
|
854
854
|
tmpDN = userInfo["nickname"]
|
|
855
855
|
tmpMsg = f"registerDatasetLocation for Rucio ds={tmpDsName} site={tmpDQ2ID} id={tmpDN}"
|
|
856
856
|
self.logger.debug(tmpMsg)
|
|
857
|
-
rucioAPI.
|
|
857
|
+
rucioAPI.register_dataset_location(
|
|
858
858
|
tmpDsName,
|
|
859
859
|
[tmpDQ2ID],
|
|
860
860
|
owner=tmpDN,
|
|
@@ -997,7 +997,7 @@ class AdderAtlasPlugin(AdderPluginBase):
|
|
|
997
997
|
if idMap != {}:
|
|
998
998
|
self.logger.debug(f"adding ES files {str(idMap)}")
|
|
999
999
|
try:
|
|
1000
|
-
rucioAPI.
|
|
1000
|
+
rucioAPI.register_files_in_dataset(idMap)
|
|
1001
1001
|
except DataIdentifierNotFound:
|
|
1002
1002
|
self.logger.debug("ignored DataIdentifierNotFound")
|
|
1003
1003
|
except Exception:
|
|
@@ -6,7 +6,7 @@ import traceback
|
|
|
6
6
|
import uuid
|
|
7
7
|
|
|
8
8
|
from pandaserver.dataservice import DataServiceUtils, ErrorCode
|
|
9
|
-
from pandaserver.dataservice.
|
|
9
|
+
from pandaserver.dataservice.ddm import rucioAPI
|
|
10
10
|
from rucio.common.exception import (
|
|
11
11
|
DataIdentifierNotFound,
|
|
12
12
|
FileConsistencyMismatch,
|
|
@@ -73,7 +73,7 @@ class AdderSimplePlugin(AdderPluginBase):
|
|
|
73
73
|
regStart = datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None)
|
|
74
74
|
try:
|
|
75
75
|
self.logger.debug(f"registerFilesInDatasets {str(destIdMap)}")
|
|
76
|
-
out = rucioAPI.
|
|
76
|
+
out = rucioAPI.register_files_in_dataset(destIdMap, {})
|
|
77
77
|
except (
|
|
78
78
|
DataIdentifierNotFound,
|
|
79
79
|
FileConsistencyMismatch,
|
|
@@ -3,7 +3,7 @@ import sys
|
|
|
3
3
|
|
|
4
4
|
from pandacommon.pandautils.thread_utils import GenericThread
|
|
5
5
|
from pandaserver.config import panda_config
|
|
6
|
-
from pandaserver.dataservice.
|
|
6
|
+
from pandaserver.dataservice.ddm import rucioAPI
|
|
7
7
|
from pandaserver.userinterface import Client
|
|
8
8
|
from rucio.client import Client as RucioClient
|
|
9
9
|
from rucio.common.exception import DataIdentifierNotFound
|
|
@@ -15,7 +15,7 @@ from pandaserver.brokerage.SiteMapper import SiteMapper
|
|
|
15
15
|
from pandaserver.config import panda_config
|
|
16
16
|
from pandaserver.dataservice import DataServiceUtils, ErrorCode
|
|
17
17
|
from pandaserver.dataservice.DataServiceUtils import select_scope
|
|
18
|
-
from pandaserver.dataservice.
|
|
18
|
+
from pandaserver.dataservice.ddm import rucioAPI
|
|
19
19
|
from pandaserver.dataservice.SetupperPluginBase import SetupperPluginBase
|
|
20
20
|
from pandaserver.taskbuffer import EventServiceUtils, JobUtils
|
|
21
21
|
from pandaserver.taskbuffer.DatasetSpec import DatasetSpec
|
|
@@ -226,7 +226,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
226
226
|
self.logger.debug("listDatasets " + job.prodDBlock)
|
|
227
227
|
prodError[job.prodDBlock] = ""
|
|
228
228
|
for iDDMTry in range(3):
|
|
229
|
-
newOut, errMsg = rucioAPI.
|
|
229
|
+
newOut, errMsg = rucioAPI.list_datasets(job.prodDBlock)
|
|
230
230
|
if newOut is None:
|
|
231
231
|
time.sleep(10)
|
|
232
232
|
else:
|
|
@@ -352,7 +352,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
352
352
|
disFiles = fileList[dispatchDBlock]
|
|
353
353
|
else:
|
|
354
354
|
dids = fileList[dispatchDBlock]["lfns"]
|
|
355
|
-
tmpZipStat, tmpZipOut = rucioAPI.
|
|
355
|
+
tmpZipStat, tmpZipOut = rucioAPI.get_zip_files(dids, None)
|
|
356
356
|
if not tmpZipStat:
|
|
357
357
|
self.logger.debug(f"failed to get zip files : {tmpZipOut}")
|
|
358
358
|
tmpZipOut = {}
|
|
@@ -391,7 +391,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
391
391
|
errStr = ""
|
|
392
392
|
for iDDMTry in range(nDDMTry):
|
|
393
393
|
try:
|
|
394
|
-
out = rucioAPI.
|
|
394
|
+
out = rucioAPI.register_dataset(
|
|
395
395
|
dispatchDBlock,
|
|
396
396
|
disFiles["lfns"],
|
|
397
397
|
disFiles["guids"],
|
|
@@ -421,7 +421,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
421
421
|
for iDDMTry in range(3):
|
|
422
422
|
status = False
|
|
423
423
|
try:
|
|
424
|
-
rucioAPI.
|
|
424
|
+
rucioAPI.close_dataset(dispatchDBlock)
|
|
425
425
|
status = True
|
|
426
426
|
break
|
|
427
427
|
except Exception:
|
|
@@ -632,7 +632,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
632
632
|
isOK = False
|
|
633
633
|
for iDDMTry in range(3):
|
|
634
634
|
try:
|
|
635
|
-
out = rucioAPI.
|
|
635
|
+
out = rucioAPI.register_dataset(
|
|
636
636
|
name,
|
|
637
637
|
metadata=tmpMetadata,
|
|
638
638
|
lifetime=tmpLifeTime,
|
|
@@ -702,7 +702,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
702
702
|
break
|
|
703
703
|
for iDDMTry in range(3):
|
|
704
704
|
try:
|
|
705
|
-
out = rucioAPI.
|
|
705
|
+
out = rucioAPI.register_dataset_location(
|
|
706
706
|
name,
|
|
707
707
|
[dq2ID],
|
|
708
708
|
lifetime=repLifeTime,
|
|
@@ -735,7 +735,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
735
735
|
if newVUID is None:
|
|
736
736
|
self.logger.debug("listDatasets " + name)
|
|
737
737
|
for iDDMTry in range(3):
|
|
738
|
-
newOut, errMsg = rucioAPI.
|
|
738
|
+
newOut, errMsg = rucioAPI.list_datasets(name)
|
|
739
739
|
if newOut is None:
|
|
740
740
|
time.sleep(10)
|
|
741
741
|
else:
|
|
@@ -1021,12 +1021,12 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1021
1021
|
)
|
|
1022
1022
|
for iDDMTry in range(3):
|
|
1023
1023
|
try:
|
|
1024
|
-
status = rucioAPI.
|
|
1024
|
+
status = rucioAPI.register_dataset_subscription(
|
|
1025
1025
|
job.dispatchDBlock,
|
|
1026
1026
|
[dq2ID],
|
|
1027
1027
|
activity=optActivity,
|
|
1028
1028
|
lifetime=7,
|
|
1029
|
-
|
|
1029
|
+
distinguished_name=optOwner,
|
|
1030
1030
|
comment=optComment,
|
|
1031
1031
|
)
|
|
1032
1032
|
out = "OK"
|
|
@@ -1439,7 +1439,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1439
1439
|
for iDDMTry in range(3):
|
|
1440
1440
|
try:
|
|
1441
1441
|
self.logger.debug("listFilesInDataset " + dataset)
|
|
1442
|
-
items, tmpDummy = rucioAPI.
|
|
1442
|
+
items, tmpDummy = rucioAPI.list_files_in_dataset(dataset, file_list=fileList)
|
|
1443
1443
|
status = 0
|
|
1444
1444
|
break
|
|
1445
1445
|
except DataIdentifierNotFound:
|
|
@@ -1460,7 +1460,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1460
1460
|
# get datasets in container
|
|
1461
1461
|
self.logger.debug("listDatasetsInContainer " + container)
|
|
1462
1462
|
for iDDMTry in range(3):
|
|
1463
|
-
datasets, out = rucioAPI.
|
|
1463
|
+
datasets, out = rucioAPI.list_datasets_in_container(container)
|
|
1464
1464
|
if datasets is None:
|
|
1465
1465
|
time.sleep(10)
|
|
1466
1466
|
else:
|
|
@@ -1474,7 +1474,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1474
1474
|
# get datasets in container
|
|
1475
1475
|
self.logger.debug("listDatasetsInContainer " + container)
|
|
1476
1476
|
for iDDMTry in range(3):
|
|
1477
|
-
datasets, out = rucioAPI.
|
|
1477
|
+
datasets, out = rucioAPI.list_datasets_in_container(container)
|
|
1478
1478
|
if datasets is None:
|
|
1479
1479
|
time.sleep(10)
|
|
1480
1480
|
else:
|
|
@@ -1534,7 +1534,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1534
1534
|
nTry = 3
|
|
1535
1535
|
for iDDMTry in range(nTry):
|
|
1536
1536
|
self.logger.debug(f"{iDDMTry}/{nTry} listDatasetReplicas {dataset}")
|
|
1537
|
-
status, out = rucioAPI.
|
|
1537
|
+
status, out = rucioAPI.list_dataset_replicas(dataset)
|
|
1538
1538
|
if status != 0:
|
|
1539
1539
|
time.sleep(10)
|
|
1540
1540
|
else:
|
|
@@ -1699,7 +1699,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1699
1699
|
tmpZipOut = {}
|
|
1700
1700
|
if tmpJob.useZipToPin():
|
|
1701
1701
|
dids = [tmpFileList[tmpSubFileName]["lfn"] for tmpSubFileName in subFileNames]
|
|
1702
|
-
tmpZipStat, tmpZipOut = rucioAPI.
|
|
1702
|
+
tmpZipStat, tmpZipOut = rucioAPI.get_zip_files(dids, [tmpLocation])
|
|
1703
1703
|
if not tmpZipStat:
|
|
1704
1704
|
self.logger.debug(f"failed to get zip files : {tmpZipOut}")
|
|
1705
1705
|
tmpZipOut = {}
|
|
@@ -1741,7 +1741,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1741
1741
|
)
|
|
1742
1742
|
for iDDMTry in range(nDDMTry):
|
|
1743
1743
|
try:
|
|
1744
|
-
out = rucioAPI.
|
|
1744
|
+
out = rucioAPI.register_dataset(
|
|
1745
1745
|
disDBlock,
|
|
1746
1746
|
lfns,
|
|
1747
1747
|
guids,
|
|
@@ -1785,7 +1785,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1785
1785
|
for iDDMTry in range(3):
|
|
1786
1786
|
status = False
|
|
1787
1787
|
try:
|
|
1788
|
-
rucioAPI.
|
|
1788
|
+
rucioAPI.close_dataset(disDBlock)
|
|
1789
1789
|
status = True
|
|
1790
1790
|
break
|
|
1791
1791
|
except Exception:
|
|
@@ -1801,13 +1801,12 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1801
1801
|
nDDMTry = 3
|
|
1802
1802
|
for iDDMTry in range(nDDMTry):
|
|
1803
1803
|
try:
|
|
1804
|
-
out = rucioAPI.
|
|
1804
|
+
out = rucioAPI.register_dataset_location(
|
|
1805
1805
|
disDBlock,
|
|
1806
1806
|
[tmpLocation],
|
|
1807
1807
|
7,
|
|
1808
1808
|
activity="Production Input",
|
|
1809
1809
|
scope="panda",
|
|
1810
|
-
asynchronous=True,
|
|
1811
1810
|
grouping="NONE",
|
|
1812
1811
|
)
|
|
1813
1812
|
self.logger.debug(out)
|
|
@@ -1995,7 +1994,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
1995
1994
|
for iDDMTry in range(nTry):
|
|
1996
1995
|
try:
|
|
1997
1996
|
# register subscription
|
|
1998
|
-
status = rucioAPI.
|
|
1997
|
+
status = rucioAPI.register_dataset_subscription(dataset, [dq2ID], activity="Production Input")
|
|
1999
1998
|
out = "OK"
|
|
2000
1999
|
break
|
|
2001
2000
|
except Exception:
|
|
@@ -2089,9 +2088,9 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
2089
2088
|
# register dis dataset
|
|
2090
2089
|
try:
|
|
2091
2090
|
self.logger.debug(f"registering jumbo dis dataset {dispatchDBlock} with {len(lfns)} files")
|
|
2092
|
-
out = rucioAPI.
|
|
2091
|
+
out = rucioAPI.register_dataset(dispatchDBlock, lfns, guids, sizes, checksums, lifetime=14)
|
|
2093
2092
|
vuid = out["vuid"]
|
|
2094
|
-
rucioAPI.
|
|
2093
|
+
rucioAPI.close_dataset(dispatchDBlock)
|
|
2095
2094
|
except Exception:
|
|
2096
2095
|
errType, errValue = sys.exc_info()[:2]
|
|
2097
2096
|
self.logger.debug(f"failed to register jumbo dis dataset {dispatchDBlock} with {errType}:{errValue}")
|
|
@@ -2110,7 +2109,7 @@ class SetupperAtlasPlugin(SetupperPluginBase):
|
|
|
2110
2109
|
)
|
|
2111
2110
|
endPoint = tmpSiteSpec.ddm_input[scope_input]
|
|
2112
2111
|
self.logger.debug(f"subscribing jumbo dis dataset {dispatchDBlock} to {endPoint}")
|
|
2113
|
-
rucioAPI.
|
|
2112
|
+
rucioAPI.register_dataset_subscription(
|
|
2114
2113
|
dispatchDBlock,
|
|
2115
2114
|
[endPoint],
|
|
2116
2115
|
lifetime=14,
|
|
@@ -3,18 +3,17 @@ update dataset DB, and then close dataset and start Activator if needed
|
|
|
3
3
|
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
-
import sys
|
|
7
6
|
import datetime
|
|
8
|
-
|
|
7
|
+
import sys
|
|
9
8
|
from typing import Dict, List
|
|
10
9
|
|
|
11
|
-
from pandacommon.pandalogger.PandaLogger import PandaLogger
|
|
12
10
|
from pandacommon.pandalogger.LogWrapper import LogWrapper
|
|
11
|
+
from pandacommon.pandalogger.PandaLogger import PandaLogger
|
|
13
12
|
|
|
14
13
|
from pandaserver.config import panda_config
|
|
14
|
+
from pandaserver.dataservice import DataServiceUtils
|
|
15
15
|
from pandaserver.dataservice.activator import Activator
|
|
16
16
|
from pandaserver.taskbuffer import EventServiceUtils
|
|
17
|
-
from pandaserver.dataservice import DataServiceUtils
|
|
18
17
|
|
|
19
18
|
# logger
|
|
20
19
|
_logger = PandaLogger().getLogger("closer")
|
|
@@ -30,8 +29,7 @@ class Closer:
|
|
|
30
29
|
"""
|
|
31
30
|
|
|
32
31
|
# constructor
|
|
33
|
-
def __init__(self, taskBuffer, destination_data_blocks: List[str], job,
|
|
34
|
-
dataset_map: Dict = None) -> None:
|
|
32
|
+
def __init__(self, taskBuffer, destination_data_blocks: List[str], job, dataset_map: Dict = None) -> None:
|
|
35
33
|
"""
|
|
36
34
|
Constructor
|
|
37
35
|
|
|
@@ -56,8 +54,7 @@ class Closer:
|
|
|
56
54
|
Returns:
|
|
57
55
|
bool: True if all sub datasets are done, False otherwise.
|
|
58
56
|
"""
|
|
59
|
-
tmp_log = LogWrapper(_logger,
|
|
60
|
-
f"check_sub_datasets_in_jobset-{datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None).isoformat('/')}")
|
|
57
|
+
tmp_log = LogWrapper(_logger, f"check_sub_datasets_in_jobset-{datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None).isoformat('/')}")
|
|
61
58
|
# skip already checked
|
|
62
59
|
if self.all_subscription_finished is not None:
|
|
63
60
|
return self.all_subscription_finished
|
|
@@ -81,8 +78,7 @@ class Closer:
|
|
|
81
78
|
# count the number of unfinished
|
|
82
79
|
not_finish = self.task_buffer.countFilesWithMap({"destinationDBlock": sub_dataset, "status": "unknown"})
|
|
83
80
|
if not_finish != 0:
|
|
84
|
-
tmp_log.debug(
|
|
85
|
-
f"related sub dataset {sub_dataset} from {job_spec.PandaID} has {not_finish} unfinished files")
|
|
81
|
+
tmp_log.debug(f"related sub dataset {sub_dataset} from {job_spec.PandaID} has {not_finish} unfinished files")
|
|
86
82
|
self.all_subscription_finished = False
|
|
87
83
|
break
|
|
88
84
|
if self.all_subscription_finished is None:
|
|
@@ -123,9 +119,7 @@ class Closer:
|
|
|
123
119
|
closer_plugin_class = panda_config.getPlugin("closer_plugins", self.job.VO)
|
|
124
120
|
if closer_plugin_class is None and self.job.VO == "atlas":
|
|
125
121
|
# use ATLAS plugin for ATLAS
|
|
126
|
-
from pandaserver.dataservice.closer_atlas_plugin import
|
|
127
|
-
CloserAtlasPlugin,
|
|
128
|
-
)
|
|
122
|
+
from pandaserver.dataservice.closer_atlas_plugin import CloserAtlasPlugin
|
|
129
123
|
|
|
130
124
|
closer_plugin_class = CloserAtlasPlugin
|
|
131
125
|
if closer_plugin_class is not None:
|
|
@@ -141,9 +135,11 @@ class Closer:
|
|
|
141
135
|
final_status (str): Final status.
|
|
142
136
|
"""
|
|
143
137
|
# start Activator
|
|
144
|
-
if
|
|
145
|
-
|
|
146
|
-
|
|
138
|
+
if (
|
|
139
|
+
not DataServiceUtils.is_sub_dataset(dataset.name)
|
|
140
|
+
and self.job.jobStatus == "finished"
|
|
141
|
+
and (self.job.prodSourceLabel != "panda" or self.job.processingType not in ["merge", "unmerge"])
|
|
142
|
+
):
|
|
147
143
|
activator_thread = Activator(self.task_buffer, dataset)
|
|
148
144
|
activator_thread.run()
|
|
149
145
|
|
|
@@ -154,8 +150,7 @@ class Closer:
|
|
|
154
150
|
updates the dataset status and finalizes pending jobs if necessary.
|
|
155
151
|
"""
|
|
156
152
|
try:
|
|
157
|
-
tmp_log = LogWrapper(_logger,
|
|
158
|
-
f"run-{datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None).isoformat('/')}-{self.panda_id}")
|
|
153
|
+
tmp_log = LogWrapper(_logger, f"run-{datetime.datetime.now(datetime.timezone.utc).replace(tzinfo=None).isoformat('/')}-{self.panda_id}")
|
|
159
154
|
tmp_log.debug(f"Start with job status: {self.job.jobStatus}")
|
|
160
155
|
flag_complete = True
|
|
161
156
|
final_status_dataset = []
|
|
@@ -170,10 +165,8 @@ class Closer:
|
|
|
170
165
|
continue
|
|
171
166
|
|
|
172
167
|
# ignore HC datasets
|
|
173
|
-
if
|
|
174
|
-
|
|
175
|
-
if (not DataServiceUtils.is_sub_dataset(destination_data_block) and
|
|
176
|
-
not DataServiceUtils.is_lib_dataset(destination_data_block)):
|
|
168
|
+
if DataServiceUtils.is_hammercloud_dataset(destination_data_block) or DataServiceUtils.is_user_gangarbt_dataset(destination_data_block):
|
|
169
|
+
if not DataServiceUtils.is_sub_dataset(destination_data_block) and not DataServiceUtils.is_lib_dataset(destination_data_block):
|
|
177
170
|
tmp_log.debug(f"skip HC {destination_data_block}")
|
|
178
171
|
continue
|
|
179
172
|
|
|
@@ -197,8 +190,7 @@ class Closer:
|
|
|
197
190
|
dataset_list.sort()
|
|
198
191
|
|
|
199
192
|
# count number of completed files
|
|
200
|
-
not_finish = self.task_buffer.countFilesWithMap(
|
|
201
|
-
{"destinationDBlock": destination_data_block, "status": "unknown"})
|
|
193
|
+
not_finish = self.task_buffer.countFilesWithMap({"destinationDBlock": destination_data_block, "status": "unknown"})
|
|
202
194
|
if not_finish < 0:
|
|
203
195
|
tmp_log.error(f"Invalid dispatch block file count: {not_finish}")
|
|
204
196
|
flag_complete = False
|
|
@@ -4,7 +4,7 @@ ATLAS plugin for closer
|
|
|
4
4
|
import sys
|
|
5
5
|
|
|
6
6
|
from pandacommon.pandalogger.LogWrapper import LogWrapper
|
|
7
|
-
from pandaserver.dataservice.
|
|
7
|
+
from pandaserver.dataservice.ddm import rucioAPI
|
|
8
8
|
from pandaserver.dataservice import DataServiceUtils
|
|
9
9
|
|
|
10
10
|
|
|
@@ -80,7 +80,7 @@ class CloserAtlasPlugin:
|
|
|
80
80
|
continue
|
|
81
81
|
try:
|
|
82
82
|
self.tmp_log.debug(f"immediate close {datasetSpec.name}")
|
|
83
|
-
rucioAPI.
|
|
83
|
+
rucioAPI.close_dataset(datasetSpec.name)
|
|
84
84
|
except Exception:
|
|
85
85
|
errtype, errvalue = sys.exc_info()[:2]
|
|
86
86
|
self.tmp_log.warning(f"failed to close : {errtype} {errvalue}")
|