From 7e0b85b733c04073fcf2b78bb002aee58d23cdf4 Mon Sep 17 00:00:00 2001 From: fstagni Date: Mon, 5 Jul 2021 11:37:02 +0200 Subject: [PATCH 1/2] fix SE test --- src/DIRAC/Resources/Storage/test/Test_StorageElement.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/DIRAC/Resources/Storage/test/Test_StorageElement.py b/src/DIRAC/Resources/Storage/test/Test_StorageElement.py index 6de700d7418..96c2c270025 100644 --- a/src/DIRAC/Resources/Storage/test/Test_StorageElement.py +++ b/src/DIRAC/Resources/Storage/test/Test_StorageElement.py @@ -761,6 +761,7 @@ def setUp(self, Path = /base/otherPath } } + } } Operations{ Defaults From 6d32428fbc63c4656bdb808e514aa4710df813b4 Mon Sep 17 00:00:00 2001 From: fstagni Date: Mon, 5 Jul 2021 12:17:40 +0200 Subject: [PATCH 2/2] fix dirac.cfg } --- dirac.cfg | 567 +++++++++++++++++++++++++----------------------------- 1 file changed, 261 insertions(+), 306 deletions(-) diff --git a/dirac.cfg b/dirac.cfg index 8acaceeab14..9af77571bde 100644 --- a/dirac.cfg +++ b/dirac.cfg @@ -178,244 +178,243 @@ Registry } ### -Systems -{ # the systems section is automatically obtained from the ConfigTemplate.cfg files and can be found at # https://dirac.readthedocs.org/en/latest/AdministratorGuide/Configuration/ExampleConfig.html - DataManagementSystem - { - Agents +Systems +{ + + DataManagementSystem + { + Agents + { + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts3.html#fts3agent + FTS3Agent { - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts3.html#fts3agent - FTS3Agent - { - OperationBulkSize = 20 # How many Operation we will treat in one loop - JobBulkSize = 20 # How many Job we will monitor in one loop - MaxFilesPerJob = 100 # Max number of files to go in a single job - MaxAttemptsPerFile = 256 # Max number of attempt per file - DeleteGraceDays = 180 # days before removing jobs - DeleteLimitPerCycle = 100 # Max number of deletes per cycle - KickAssignedHours = 1 # hours before kicking jobs with old assignment tag - KickLimitPerCycle = 100 # Max number of kicks per cycle - - } + OperationBulkSize = 20 # How many Operation we will treat in one loop + JobBulkSize = 20 # How many Job we will monitor in one loop + MaxFilesPerJob = 100 # Max number of files to go in a single job + MaxAttemptsPerFile = 256 # Max number of attempt per file + DeleteGraceDays = 180 # days before removing jobs + DeleteLimitPerCycle = 100 # Max number of deletes per cycle + KickAssignedHours = 1 # hours before kicking jobs with old assignment tag + KickLimitPerCycle = 100 # Max number of kicks per cycle } - Services + } + Services + { + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/dfc.html#filecataloghandler + FileCatalogHandler { - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/dfc.html#filecataloghandler - FileCatalogHandler - { - Port = 9197 - DatasetManager = DatasetManager - DefaultUmask = 0775 - DirectoryManager = DirectoryLevelTree - DirectoryMetadata = DirectoryMetadata - FileManager = FileManager - FileMetadata = FileMetadata - GlobalReadAccess = True - LFNPFNConvention = Strong - ResolvePFN = True - SecurityManager = NoSecurityManager - SEManager = SEManagerDB - UniqueGUID = False - UserGroupManager = UserAndGroupManagerDB - ValidFileStatus = [AprioriGoodTrashRemovingProbing] - ValidReplicaStatus = [AprioriGoodTrashRemovingProbing] - VisibleFileStatus = [AprioriGood] - VisibleReplicaStatus = [AprioriGood] - - } - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.html#ftsmanager - FTS3ManagerHandler - { - # No specific configuration - Port = 9193 - } + Port = 9197 + DatasetManager = DatasetManager + DefaultUmask = 0775 + DirectoryManager = DirectoryLevelTree + DirectoryMetadata = DirectoryMetadata + FileManager = FileManager + FileMetadata = FileMetadata + GlobalReadAccess = True + LFNPFNConvention = Strong + ResolvePFN = True + SecurityManager = NoSecurityManager + SEManager = SEManagerDB + UniqueGUID = False + UserGroupManager = UserAndGroupManagerDB + ValidFileStatus = [AprioriGoodTrashRemovingProbing] + ValidReplicaStatus = [AprioriGoodTrashRemovingProbing] + VisibleFileStatus = [AprioriGood] + VisibleReplicaStatus = [AprioriGood] } - Databases + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.html#ftsmanager + FTS3ManagerHandler { - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/dfc.html#filecatalogdb - FileCatalogDB - { - # No specific configuration - DBName = FileCatalogDB - } - FTS3DB - { - # No specific configuration - DBName = FTS3DB - } + # No specific configuration + Port = 9193 } - } - RequestManagementSystem - { - Agents + } + Databases + { + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/dfc.html#filecatalogdb + FileCatalogDB { - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#cleanreqdbagent - CleanReqDBAgent - { - DeleteGraceDays = 60 # Delay after which Requests are removed - DeleteLimit = 100 # Maximum number of Requests to remove per cycle - DeleteFailed = False # Whether to delete also Failed request - KickGraceHours = 1 # After how long we should kick the Requests in `Assigned` - KickLimit = 10000 # Maximum number of requests kicked by cycle - } - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#requestexecutingagent - RequestExecutingAgent - { - BulkRequest = 0 - MinProcess = 1 - MaxProcess = 8 - ProcessPoolQueueSize = 25 - ProcessPoolTimeout = 900 - ProcessTaskTimeout = 900 - ProcessPoolSleep = 4 - RequestsPerCycle = 50 - - # Define the different Operation types - # see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsObjects.html#operation-types - OperationHandlers - { - DummyOperation - { - # These parameters can be defined for all handlers - - # The location of the python file, without .py, is mandatory - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/DummyHandler # Mandatory - LogLevel = DEBUG # self explanatory - MaxAttemts = 256 # Maximum attempts per file - TimeOut = 300 # Timeout in seconds of the operation - TimeOutPerFile = 40 # Additional delay per file - } - ForwardDISET{ - Location = DIRAC/RequestManagementSystem/Agent/RequestOperations/ForwardDISET - } - MoveReplica - { - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/MoveReplica - } - PutAndRegister - { - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/PutAndRegister - } - RegisterFile - { - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RegisterFile - } - RegisterReplica - { - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RegisterReplica - } - RemoveFile - { - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RemoveFile - } - RemoveReplica - { - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RemoveReplica - } - ReplicateAndRegister - { - Location = DIRAC/DataManagementSystem/Agent/RequestOperations/ReplicateAndRegister - FTSMode = True # If True, will use FTS to transfer files - FTSBannedGroups = lhcb_user # list of groups for which not to use FTS - } - SetFileStatus - { - Location = DIRAC/TransformationSystem/Agent/RequestOperations/SetFileStatus - } - } - } + # No specific configuration + DBName = FileCatalogDB } - Databases + FTS3DB { - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#requestdb - RequestDB - { - # No specific configuration - DBName = RequestDB - } + # No specific configuration + DBName = FTS3DB } - Services + } + } + RequestManagementSystem + { + Agents + { + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#cleanreqdbagent + CleanReqDBAgent { - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#reqmanager - ReqManager - { - Port = 9140 - constantRequestDelay = 0 # Constant delay when retrying a request - } - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#reqproxy - ReqProxy - { - Port = 9161 - } + DeleteGraceDays = 60 # Delay after which Requests are removed + DeleteLimit = 100 # Maximum number of Requests to remove per cycle + DeleteFailed = False # Whether to delete also Failed request + KickGraceHours = 1 # After how long we should kick the Requests in `Assigned` + KickLimit = 10000 # Maximum number of requests kicked by cycle } - URLs + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#requestexecutingagent + RequestExecutingAgent { - # Yes.... it is ReqProxyURLs, and not ReqProxy... - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#reqproxy - ReqProxyURLs = dips://server1:9161/RequestManagement/ReqProxy, dips://server2:9161/RequestManagement/ReqProxy + BulkRequest = 0 + MinProcess = 1 + MaxProcess = 8 + ProcessPoolQueueSize = 25 + ProcessPoolTimeout = 900 + ProcessTaskTimeout = 900 + ProcessPoolSleep = 4 + RequestsPerCycle = 50 + + # Define the different Operation types + # see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsObjects.html#operation-types + OperationHandlers + { + DummyOperation + { + # These parameters can be defined for all handlers + + # The location of the python file, without .py, is mandatory + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/DummyHandler # Mandatory + LogLevel = DEBUG # self explanatory + MaxAttemts = 256 # Maximum attempts per file + TimeOut = 300 # Timeout in seconds of the operation + TimeOutPerFile = 40 # Additional delay per file + } + ForwardDISET{ + Location = DIRAC/RequestManagementSystem/Agent/RequestOperations/ForwardDISET + } + MoveReplica + { + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/MoveReplica + } + PutAndRegister + { + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/PutAndRegister + } + RegisterFile + { + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RegisterFile + } + RegisterReplica + { + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RegisterReplica + } + RemoveFile + { + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RemoveFile + } + RemoveReplica + { + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/RemoveReplica + } + ReplicateAndRegister + { + Location = DIRAC/DataManagementSystem/Agent/RequestOperations/ReplicateAndRegister + FTSMode = True # If True, will use FTS to transfer files + FTSBannedGroups = lhcb_user # list of groups for which not to use FTS + } + SetFileStatus + { + Location = DIRAC/TransformationSystem/Agent/RequestOperations/SetFileStatus + } + } } - } - TransformationSystem - { - Agents + } + Databases + { + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#requestdb + RequestDB { - ##BEGIN TransformationCleaningAgent - TransformationCleaningAgent - { - # MetaData key to use to identify output data - TransfIDMeta=TransformationID + # No specific configuration + DBName = RequestDB + } + } + Services + { + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#reqmanager + ReqManager + { + Port = 9140 + constantRequestDelay = 0 # Constant delay when retrying a request + } + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#reqproxy + ReqProxy + { + Port = 9161 + } + } + URLs + { + # Yes.... it is ReqProxyURLs, and not ReqProxy... + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/RequestManagement/rmsComponents.html#reqproxy + ReqProxyURLs = dips://server1:9161/RequestManagement/ReqProxy, dips://server2:9161/RequestManagement/ReqProxy + } + } + TransformationSystem + { + Agents + { + ##BEGIN TransformationCleaningAgent + TransformationCleaningAgent + { + # MetaData key to use to identify output data + TransfIDMeta=TransformationID - # Location of the OutputData, if the OutputDirectories parameter is not set for - # transformations only 'MetadataCatalog has to be used - DirectoryLocations=TransformationDB,MetadataCatalog + # Location of the OutputData, if the OutputDirectories parameter is not set for + # transformations only 'MetadataCatalog has to be used + DirectoryLocations=TransformationDB,MetadataCatalog - # Enable or disable, default enabled - EnableFlag=True + # Enable or disable, default enabled + EnableFlag=True - # How many days to wait before archiving transformations - ArchiveAfter=7 + # How many days to wait before archiving transformations + ArchiveAfter=7 - # Shifter to use for removal operations, default is empty and - # using the transformation owner for cleanup - shifterProxy= + # Shifter to use for removal operations, default is empty and + # using the transformation owner for cleanup + shifterProxy= - # Which transformation types to clean - # If not filled, transformation types are taken from - # Operations/Transformations/DataManipulation - # and Operations/Transformations/DataProcessing - TransformationTypes= + # Which transformation types to clean + # If not filled, transformation types are taken from + # Operations/Transformations/DataManipulation + # and Operations/Transformations/DataProcessing + TransformationTypes= - #Time between cycles in seconds - PollingTime = 3600 - } - ##END + # Time between cycles in seconds + PollingTime = 3600 } - } - Framework - { - Services + ##END + } + } + Framework + { + Services + { + ComponentMonitoring { - ComponentMonitoring + Port = 9190 + # This enables ES monitoring only for this particular service. + EnableActivityMonitoring = yes + Authorization { - Port = 9190 - # This enables ES monitoring only for this particular service. - EnableActivityMonitoring = yes - Authorization - { - Default = ServiceAdministrator - componentExists = authenticated - getComponents = authenticated - hostExists = authenticated - getHosts = authenticated - installationExists = authenticated - getInstallations = authenticated - updateLog = Operator - } + Default = ServiceAdministrator + componentExists = authenticated + getComponents = authenticated + hostExists = authenticated + getHosts = authenticated + installationExists = authenticated + getInstallations = authenticated + updateLog = Operator } } - } + } + } } Resources { @@ -502,18 +501,18 @@ Resources ## } - #Where all your Catalogs are defined + # Where all your Catalogs are defined FileCatalogs { - #There is one section per catalog - #See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.html + # There is one section per catalog + # See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.html { CatalogType = # used for plugin selection CatalogURL = # used for DISET URL } } - #FTS endpoint definition http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.htmlfts-servers-definition + # FTS endpoint definition http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.htmlfts-servers-definition # Passed to the constructor of the pluginFTSEndpoints { FTS3 @@ -521,12 +520,12 @@ Resources CERN-FTS3 = https://fts3.cern.ch:8446 } } - #Abstract definition of storage elements, used to be inherited. - #see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storage/index.htmlstorageelementbases + # Abstract definition of storage elements, used to be inherited. + # see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelementbases StorageElementBases { - #The base SE definition can contain all the options of a normal SE - #http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storage/index.htmlstorageelements + # The base SE definition can contain all the options of a normal SE + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelements CERN-EOS { BackendType = eos # backend type of storage element @@ -536,7 +535,9 @@ Resources WriteAccess = True # Allowed for Write if no RSS enabled CheckAccess = True # Allowed for Check if no RSS enabled RemoveAccess = True # Allowed for Remove if no RSS enabled - #Protocol section, see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storage/index.htmlavailable-protocol-plugins + OccupancyLFN = /lhcb/storageDetails.json # Json containing occupancy details + SpaceReservation = LHCb-EOS # Space reservation name if any. Concept like SpaceToken + # Protocol section, see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#available-protocol-plugins GFAL2_SRM2 { Host = srm-eoslhcb.cern.ch @@ -550,122 +551,76 @@ Resources } } } - #http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storage/index.htmlstorageelements + # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelements StorageElements { - #Just inherit everything from CERN-EOS, without change + # Just inherit everything from CERN-EOS, without change CERN-DST-EOS { BaseSE = CERN-EOS } - CERN-USER # inherit from CERN-EOS + # inherit from CERN-EOS + CERN-USER { BaseSE = CERN-EOS - #Modify the options for Gfal2 + # Modify the options for Gfal2 GFAL2_SRM2 { Path = /eos/lhcb/grid/user SpaceToken = LHCb_USER } - } - # Abstract definition of storage elements, used to be inherited. - # see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelementbases - StorageElementBases - { - # The base SE definition can contain all the options of a normal SE - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelements - CERN-EOS - { - BackendType = eos # backend type of storage element - SEType = T0D1 # Tape or Disk SE - UseCatalogURL = True # used the stored url or generate it (default False) - ReadAccess = True # Allowed for Read if no RSS enabled - WriteAccess = True # Allowed for Write if no RSS enabled - CheckAccess = True # Allowed for Check if no RSS enabled - RemoveAccess = True # Allowed for Remove if no RSS enabled - OccupancyLFN = /lhcb/storageDetails.json # Json containing occupancy details - SpaceReservation = LHCb-EOS # Space reservation name if any. Concept like SpaceToken - # Protocol section, see # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#available-protocol-plugins - GFAL2_SRM2 - { - Host = srm-eoslhcb.cern.ch - Port = 8443 - PluginName = GFAL2_SRM2 # If different from the section name - Protocol = srm # primary protocol - Path = /eos/lhcb/grid/prod # base path - Access = remote - SpaceToken = LHCb-EOS - WSUrl = /srm/v2/server?SFN= - } - } - } - # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelements - StorageElements - { - CERN-DST-EOS # Just inherit everything from CERN-EOS, without change - { - BaseSE = CERN-EOS - } - CERN-USER # inherit from CERN-EOS - { - BaseSE = CERN-EOS - GFAL2_SRM2 # Modify the options for Gfal2 - { - Path = /eos/lhcb/grid/user - SpaceToken = LHCb_USER - } - GFAL2_XROOT # Add an extra protocol - { - Host = eoslhcb.cern.ch - Port = 8443 - Protocol = root - Path = /eos/lhcb/grid/user - Access = remote - SpaceToken = LHCb-EOS - WSUrl = /srm/v2/server?SFN= - } - } - CERN-ALIAS - { - Alias = CERN-USER # Use CERN-USER when instanciating CERN-ALIAS - } - } - # See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelementgroups - StorageElementGroups - { - CERN-Storages = CERN-DST-EOS, CERN-USER - } - + # Add an extra protocol + GFAL2_XROOT + { + Host = eoslhcb.cern.ch + Port = 8443 + Protocol = root + Path = /eos/lhcb/grid/user + Access = remote + SpaceToken = LHCb-EOS + WSUrl = /srm/v2/server?SFN= + } + } + CERN-ALIAS + { + Alias = CERN-USER # Use CERN-USER when instanciating CERN-ALIAS + } + } + # See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Storages/index.html#storageelementgroups + StorageElementGroups + { + CERN-Storages = CERN-DST-EOS, CERN-USER + } } Operations { - #This is the default section of operations. - #Any value here can be overwriten in the setup specific section + # This is the default section of operations. + # Any value here can be overwriten in the setup specific section Defaults { # This will globally enable ES based monitoring for Service and AgentModule. EnableActivityMonitoring = yes DataManagement { - #see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.html#multi-protocol - #for the next 4 options + # see http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.html#multi-protocol + # for the next 4 options AccessProtocols = srm AccessProtocols += dips RegistrationProtocols = srm RegistrationProtocols += dips - # + # StageProtocols = srm ThirdPartyProtocols = srm WriteProtocols = srm WriteProtocols += dips - #FTS related options. See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.html + # FTS related options. See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.html FTSVersion = FTS3 # should only be that... FTSPlacement { FTS3 { ServerPolicy = Random # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.html#ftsserver-policy - # Plugin to alter default TPC selection list + # Plugin to alter default TPC selection list FTS3Plugin = Default # http://dirac.readthedocs.io/en/latest/AdministratorGuide/Systems/DataManagement/fts.html#fts3-plugins } } @@ -685,21 +640,21 @@ Operations } Services { - #See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.html + # See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.html Catalogs { CatalogList = Catalog1 CatalogList += Catalog2 CatalogList += etc # List of catalogs defined in Resources to use - #Each catalog defined in Resources should also contain some runtime options here + # Each catalog defined in Resources should also contain some runtime options here { Status = Active # enable the catalog or not (default Active) AccessType = Read-Write # No default AccessType += must be set Master = True # See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.html#master-catalog - #Dynamic conditions to enable or not the catalog - #See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.htmlconditional-filecatalogs + # Dynamic conditions to enable or not the catalog + # See http://dirac.readthedocs.io/en/latest/AdministratorGuide/Resources/Catalog/index.htmlconditional-filecatalogs Conditions { WRITE = @@ -711,9 +666,9 @@ Operations } } } - #Options in this section will only be used when running with the - # setup + # Options in this section will only be used when running with the + # setup { } -} +} \ No newline at end of file