-
Notifications
You must be signed in to change notification settings - Fork 131
/
srm.properties
1479 lines (1272 loc) · 59.8 KB
/
srm.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# -----------------------------------------------------------------------
# Default values for srm
# -----------------------------------------------------------------------
@DEFAULTS_HEADER@
# ---- Cell names
#
srm.cell.name=SRM-${host.name}
# ---- Whether to export the srm as a well known cell
#
# This property controls whether the srm cell is published as
# a well known cell. Well known cells are addressable through their
# cell name, while other cells are only addressable from other domains
# using their fully qualified cell address.
(one-of?true|false)srm.cell.export=true
srm.cell.subscribe=${srm.loginbroker.update-topic},${srm.loginbroker.request-topic},${srm.credential-service.topic}
# Cell message processing limits
srm.cell.limits.message.threads.max = 10
srm.cell.limits.message.queue.max = 100
(obsolete)srm.cell.limits.message.threads.min =
(obsolete)srm.cell.limits.message.threads.max-idle-time =
(obsolete)srm.cell.limits.message.threads.max-idle-time.unit =
# ---- TCP Port
#
# The port SRM will listen on for GSI-based communication. GSI is an
# encrypted transport commonly used in grid communication. It is
# similar to SSL but incompatible.
#
(forbidden)srmPort = Use srm.net.port
srm.net.port = 8443
#
# The port SRM will listen on for SSL-based communication. SSL is an
# industry standard encryption transport.
#
(forbidden)srm.ssl.port = Use srm.net.ssl-port
srm.net.ssl-port = 8445
# The interface SRM will listen on.
srm.net.listen=${dcache.net.listen}
# ---- Host name of srm service
#
# For certain operations srm needs to know its domain name. The
# srm.net.host property can be used to override the default value. If
# this value is not set, the value is detected automatically and it is
# equivalent to the output of the unix hostname program.
#
(forbidden)srmHost = Use srm.net.host
srm.net.host = ${host.fqdn}
# ---- Host names of srm services in this deployment
#
# A host part of the source url (surl) is used to determine if the
# surl references file in this storage system. In case of the copy
# operation, srm needs to be able to dinstinguish between the local
# surl and the remote one. Also srm needs to refuse to perform
# operations on non local srm urls. The srm.net.local-hosts property
# value is a comma separated list of hosts that will be considered
# local by this srm service. This parameter might need to be defined
# as a list because in case of the multihomed or distributed server it
# may have more than one network name. If srm.net.local-host is not
# specified, srm.net.host will be used.
#
(forbidden)localSrmHosts = Usr srm.net.local-hosts
srm.net.local-hosts=${srm.net.host}
# ---- Client side transport layer encryption
#
# The security transport to use when contacting remote SRM instances. GSI
# (Grid Security Infrastructure) is the commonly deployed protocol, but SSL
# is the industrial standard. This property is only used for third-party
# copies (srmCopy).
#
(forbidden)srmClientTransport = Use srm.client-transport
(one-of?SSL|GSI)srm.client-transport = GSI
# ---- Database host name
#
(forbidden)srmDatabaseHost = Use srm.db.host
srm.db.host = ${dcache.db.host}
# ---- Database name
(forbidden)srmDbName = Use srm.db.name
srm.db.name = srm
# ---- Database user name
(forbidden)srmDbUser = Usr srm.db.user
srm.db.user = ${dcache.db.user}
# ---- Database password
(forbidden)srmDbPassword = Use srm.db.password
srm.db.password = ${dcache.db.password}
# ---- Database password file
(forbidden)srmPasswordFile = Use srm.db.password.file
srm.db.password.file = ${dcache.db.password.file}
# ---- Database JDBC URL
srm.db.url = jdbc:postgresql://${srm.db.host}/${srm.db.name}
#
# The maximum number of concurrent database connections.
#
srm.db.connections.max = 50
#
# The minimum number of idle database connections.
#
srm.db.connections.idle = 1
# ---- SRM automatically manages it's database schema
(immutable)srm.db.schema.auto=true
# ---- TCP streams to use for GridFTP transfer
#
# The number of concurrent TCP streams used by srmCopy controlled
# GridFTP transfers.
#
(forbidden)parallelStreams = Use srm.limits.parallel-streams
srm.limits.parallel-streams = 10
# ---- Timeout of the external srmCopy script
#
# Timeout in seconds, how long to wait for the completion of the
# transfer via external client, should the external client be used
# for the MSS to MSS transfers.
#
(forbidden)srmTimeout = Use srm.limits.external-copy-script.timeout
srm.limits.external-copy-script.timeout = 3600
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS)\
srm.limits.external-copy-script.timeout.unit=SECONDS
# ---- Buffer size used for srmCopy transfer
#
# Specified in bytes.
#
(forbidden)srmBufferSize = Use srm.limits.transfer-buffer.size
srm.limits.transfer-buffer.size = 1048576
# ---- TCP buffer size used for srmCopy transfer
#
# Specified in bytes.
#
(forbidden)srmTcpBufferSize = Use srm.limits.transfer-tcp-buffer.size
srm.limits.transfer-tcp-buffer.size = 1048576
# ---- Controls debug functionality of the external srmCopy script
#
(forbidden)srmDebug = Use srm.enable.external-copy-script.debug
(one-of?true|false)srm.enable.external-copy-script.debug = true
# ---- Threads that accept TCP connections
(forbidden)srmJettyConnectorAcceptors = Use srm.limits.jetty-connector.acceptors
srm.limits.jetty-connector.acceptors = 1
# ---- Milliseconds before an idle TCP connection is closed
(forbidden)srmJettyConnectorMaxIdleTime = Use srm.limits.jetty-connector.idle-time.max
srm.limits.jetty-connector.idle-time.max = 60000
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS)\
srm.limits.jetty-connector.idle-time.max.unit=MILLISECONDS
(obsolete)srm.limits.jetty-connector.handshake.timeout=This is now the same as srm.limits.jetty-connector.idle-time.max
(obsolete)srm.limits.jetty-connector.handshake.timeout.unit=No longer used
# ---- Milliseconds before an idle TCP connection is closed during high load
(forbidden)srmJettyConnectorLowResourceMaxIdleTime = Use srm.limits.jetty-connector.low-resource.max.idle-time
srm.limits.jetty-connector.low-resource.max.idle-time = 20000
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS)\
srm.limits.jetty-connector.low-resource.max.idle-time.unit=MILLISECONDS
# ---- TCP backlog for SRM connections
(forbidden)srmJettyConnectorBackLog = Use srm.limits.jetty-connector.backlog
srm.limits.jetty-connector.backlog = 2048
# ---- Maximum number of threads used for SRM request processing
#
# Whenever a client submits an SRM request a thread is allocated. This
# setting controls the maximum number of such threads.
#
# Notice that this does not control the number of SRM transfers that
# can be active at any given time: An SRM transfer involves several
# requests by the client (eg srmPrepareToGet, srmStatusOfGetRequest,
# srmReleaseFiles).
#
# There is also a choice whether to process requests synchronously or
# asynchronously. If processed synchronously, the request is not answered
# until processed. This means that a thread is bound to the request for
# the duration of the request processing. If processed asynchronous,
# the thread is released right away and the client submits new requests
# to poll for the completion of the previously submitted request. This
# adds latency and increases authentication overhead, but frees thread
# and TCP connections. See srm.request.switch-to-async-mode-delay.
#
(forbidden)srmJettyThreadsMax = Usr srm.limits.jetty.threads.max
srm.limits.jetty.threads.max = 500
# ---- Minimum number of threads used for SRM request processing
(forbidden)srmJettyThreadsMin = Use srm.limits.jetty.threads.min
srm.limits.jetty.threads.min = 10
# ---- Milliseconds before an idle request processing thread is terminated
(forbidden)srmJettyThreadsMaxIdleTime = Use srm.limits.jetty.idle-time.max
srm.limits.jetty.threads.idle-time.max = 30000
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS)\
srm.limits.jetty.threads.idle-time.max.unit=MILLISECONDS
# ---- Maximum number of queued SRM requests
#
# Once the limit is reached no new connections will be accepted;
# instead, the operating system will queue them in the TCP backlog.
# Once the TCP backlog is filled, the operating system will reject
# further TCP connections.
#
(forbidden)srmJettyThreadsMaxQueued = srm.limits.jetty.threads.queued.max
srm.limits.jetty.threads.queued.max = 500
# ---- Enable legacy socket closure
#
# GSI is layered on top of the SSL/TLS protocol. SSL/TLS specifies that
# if the server wants to close the connection, it is to send an SSL
# close notification to the client. Some clients consider this notification
# a fatal error and expect the server to instead abruptly close the socket.
#
# Setting this property to true causes the server to close the socket without
# sending a close notification first. This should be enabled if compatibility
# with these clients is required.
#
(one-of?true|false)srm.enable.legacy-close=true
# ---- Parameters for schedulable SRM requests
#
# The SRM specification allows some request types to be processed
# asynchronously. Rather than waiting for request processing to
# complete before getting a reply, the client receives a preliminary
# reply stating that the request is accepted with instructions to
# ask back for the result later. The SRM specification allows this
# mode of operation for the following requests:
#
# o srmReserveSpace
# o srmUpdateSpace
# o srmChangeSpaceForFiles
# o srmLs
# o srmPrepareToGet
# o srmPrepareToPut
# o srmCopy
# o srmBringOnline
#
# Except for srmUpdateSpace and srmChangeSpaceForFiles, dCache supports
# asynchronous processing for all these requests.
#
# These requests share a common lifecycle:
#
# o SRM_REQUEST_QUEUED
#
# The request is queued for processing. dCache is currently not processing
# the request.
#
# o SRM_REQUEST_INPROGRESS
#
# dCache is processing the request.
#
# o SRM_FILE_PINNED / SRM_SPACE_AVAILABLE
#
# For srmPrepareToGet and srmPrepareToPut these states indicate
# that a transfer URL has been prepared and the client is expected
# to transfer the file.
#
# o SRM_SUCCESS / SRM_FAILURE / SRM_RELEASED / SRM_ABORTED
#
# Request has completed and is no longer active
#
# This lifecycle is controlled by the SRM request scheduler. A separate
# scheduler exists for each request type, allowing limits to be configured
# individually.
#
# The SRM specification supports bulk operations for the following requests:
#
# o srmLs
# o srmPrepareToGet
# o srmPrepareToPut
# o srmCopy
# o srmBringOnline
# o srmRm
#
# A single client request may apply to a large number of files. Internally,
# dCache treats each file in a schedulable bulk request individually. To be
# precise, the scheduling described above does not apply to the entire SRM
# request, but to each site URL in the request. This is also true for the
# configuration properties described below.
#
# srmRm isn't a schedulable request and thus the discussion above doesn't
# apply to it.
# ---- Number of threads executing schedulable SRM requests
#
# Thread pool size for processing schedulable SRM requests. Most processing
# is done asynchronously and a low number of threads suffices to serve even
# thousands of concurrent requests. The notable exception are srmCopy and srmLs
# requests; these should be served by a thread pool equal to the number of
# inprogress requests allowed.
#
# This setting should not be confused with srm.limits.jetty.threads.min and
# srm.limits.jetty.threads.max. Those settings control the number of threads
# used by the embedded webserver; those threads are used for all client requests,
# schedulable and unschedulable requests alike, even status queries. Schedulable
# requests are however quickly handed over to the request scheduler and the
# web server thread is released (see srm.request.switch-to-async-mode-delay).
# Another difference is that for bulk requests, the webserver thread is bound
# to the entire request, while the scheduler threads process individual SURLs.
#
srm.request.threads = 12
(forbidden)srmGetReqThreadPoolSize = Use srm.request.get.threads
srm.request.get.threads = ${srm.request.threads}
(forbidden)srmBringOnlineReqThreadPoolSize = Use srm.request.bring-online.threads
srm.request.bring-online.threads = ${srm.request.threads}
(forbidden)srmPutReqThreadPoolSize = Use srm.request.put.threads
srm.request.put.threads = ${srm.request.threads}
(forbidden)srmCopyReqThreadPoolSize = Use srm.request.copy.threads
srm.request.copy.threads = ${srm.request.copy.max-inprogress}
(forbidden)srmLsRequestThreadPoolSize = Use srm.request.ls.threads
srm.request.ls.threads = ${srm.request.ls.max-inprogress}
(forbidden)srmReserveReqThreadPoolSize = Use srm.request.reserve-space.threads
srm.request.reserve-space.threads = ${srm.request.threads}
# ---- Maximum number of requests allowed
#
# This is the maximum number requests allowed of any given
# request type. Once the limit is reached, new requests will fail
# immediately rather than being queued.
#
# Any request that is not finished counts towards this limit. That is, all
# requests in one of the following states: SRM_REQUEST_QUEUED,
# SRM_REQUEST_INPROGRESS, SRM_FILE_PINNED and SRM_SPACE_AVAILABLE.
#
srm.request.max-requests = 50000
srm.request.get.max-requests = ${srm.request.max-requests}
srm.request.bring-online.max-requests = ${srm.request.max-requests}
srm.request.put.max-requests = ${srm.request.max-requests}
srm.request.copy.max-requests = ${srm.request.max-requests}
srm.request.ls.max-requests = ${srm.request.max-requests}
srm.request.reserve-space.max-requests = ${srm.request.max-requests}
# ---- Maximum number of requests in progress
#
# Maximum number of requests to process concurrently of any given request type.
# This limits the number of SRM_REQUEST_INPROGRESS requests. Once the limit is
# reached, new requests will queue. Requests for which a TURL was already
# computed do not count towards this limit even if their state may be reported
# as SRM_REQUEST_INPROGRESS.
#
# The setting is a good measure of how much load the SRM can induce directly
# on other services in dCache, such as pnfs manager and pin manager.
#
# Notably, this setting limits the number of files that can be brought online
# simultaneously for get and bring-online requests, and the number of concurrent
# srmCopy transfers.
#
# The setting does NOT limit the number of concurrent upload and downloads. In
# SRM, srmPrepareToPut and srmPrepareToGet do not actually transfer a file: They
# prepare a transfer URL so that the client can transfer a file. Once the transfer
# URL has been prepared, the requests are no longer considered in progress (see
# srm.request.max-transfers).
#
srm.request.get.max-inprogress = 1000
srm.request.bring-online.max-inprogress = 10000
srm.request.copy.max-inprogress = 1000
srm.request.put.max-inprogress = 50
srm.request.ls.max-inprogress = 50
srm.request.reserve-space.max-inprogress = 10
# ---- Number of simultaneous transfer URLs
#
# This limits the number of TURLs to hand out to clients. If this limit is reached,
# additional requests will be queued after having been prepared.
#
# Note that clients may not actually transfer the file right after receiving a
# TURL. Many advanced clients check out TURLs ahead of time and queue transfers
# to and from those TURLs. Thus the actual number of transfers observed on dCache
# doors may be lower than the number TURLs handed out to the client.
#
# Note that this setting does not apply to srmCopy requests. Such requests do
# not have a TURL as the transfer is done by dCache and not by the client. To
# control the number of concurrent copies use srm.request.copy.max-inprogress or
# the settings of the transfermanagers service.
#
(forbidden)srm.request.max-ready-requests = Use srm.request.max-transfers
srm.request.max-transfers=50000
(forbidden)srmGetReqMaxReadyRequests = Use srm.request.get.max-transfers
(forbidden)srm.request.get.max-ready-requests = Use srm.request.get.max-transfers
srm.request.get.max-transfers = ${srm.request.max-transfers}
(forbidden)srmPutReqMaxReadyRequests = Use srm.request.put.max-transfers
(forbidden)srm.request.put.max-ready-requests = Use srm.request.put.max-transfers
srm.request.put.max-transfers = ${srm.request.max-transfers}
# --- Number of retries allowed for retriable request processing errors
#
# Schedulable requests may be retried when they experience transient
# internal errors. This setting controls the number of retries before
# giving up.
#
# When a request is retried, it is reset to the SRM_REQUEST_QUEUED state
# and is subject to queueing and scheduling as if it was a new request.
#
srm.request.retries=10
(forbidden)srmGetReqMaxNumberOfRetries = Use srm.request.get.retries
srm.request.get.retries = ${srm.request.retries}
(forbidden)srmBringOnlineReqMaxNumberOfRetries = Use srm.request.bring-online.request
srm.request.bring-online.retries = ${srm.request.retries}
(forbidden)srmPutReqMaxNumberOfRetries = Use srm.request.put.retries
srm.request.put.retries = ${srm.request.retries}
(forbidden)srmCopyReqMaxNumberOfRetries = Use srm.request.copy.retries
srm.request.copy.retries = ${srm.request.retries}
(forbidden)srmLsRequestMaxNumberOfRetries = Use srm.request.ls.retries
srm.request.ls.retries = ${srm.request.retries}
(forbidden)srmReserveReqMaxNumberOfRetries = Use srm.request.reserve-space.retries
srm.request.reserve-space.retries = ${srm.request.retries}
# --- Grace period before retrying requests
#
# A request may sleep for a while before being retried. This setting
# controls how long the request should sleep.
#
srm.request.retry-timeout = 60000
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS)\
srm.request.retry-timeout.unit = MILLISECONDS
(forbidden)srmGetReqRetryTimeout = Use srm.request.get.retry-timeout
srm.request.get.retry-timeout = ${srm.request.retry-timeout}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.retry-timeout.unit})\
srm.request.get.retry-timeout.unit=${srm.request.retry-timeout.unit}
(forbidden)srmBringOnlineReqRetryTimeout = Use srm.request.bring-online.retry-timeout
srm.request.bring-online.retry-timeout = ${srm.request.retry-timeout}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.retry-timeout.unit})\
srm.request.bring-online.retry-timeout.unit=${srm.request.retry-timeout.unit}
(forbidden)srmPutReqRetryTimeout = Use srm.request.put.retry-timeout
srm.request.put.retry-timeout = ${srm.request.retry-timeout}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.retry-timeout.unit})\
srm.request.put.retry-timeout.unit=${srm.request.retry-timeout.unit}
(forbidden)srmCopyReqRetryTimeout = Use srm.request.copy.retry-timeout
srm.request.copy.retry-timeout = ${srm.request.retry-timeout}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.retry-timeout.unit})\
srm.request.copy.retry-timeout.unit=${srm.request.retry-timeout.unit}
(forbidden)srmLsRequestRetryTimeout = Use srm.request.ls.retry-timeout
srm.request.ls.retry-timeout = ${srm.request.retry-timeout}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.retry-timeout.unit})\
srm.request.ls.retry-timeout.unit=${srm.request.retry-timeout.unit}
(forbidden)srmReserveReqRetryTimeout = Use srm.request.reserve-space.retry-timeout
srm.request.reserve-space.retry-timeout = ${srm.request.retry-timeout}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.retry-timeout.unit})\
srm.request.reserve-space.retry-timeout.unit=${srm.request.retry-timeout.unit}
# ---- Request discriminator
#
# A discriminator identifies a request as coming from a particular user or group of
# users: a party. Requests with the same discriminator value come from the same party.
#
# Discriminators are typically used by fair-share schedulers when deciding which requests
# should be grouped together. Such schedulers maintain some degree of fairness between
# requests from different parties (requests with distinct discriminator values) and not
# between requests from the same party.
#
# Discriminators are provided by plugins implementing the JobDiscriminator SPI. Several
# such plugins ship with dCache:
#
# uid The request submitter's UID.
#
# gid The request submitter's primary GID.
#
# dn The request submitter's distinguished name.
#
# fqan The request submitter's primary FQAN.
#
# user The request submitter's mapped user name.
#
# vo The request submitter's VO association as extracted from the primary FQAN.
#
srm.plugins.discriminator=dn
# ---- Request scheduling strategy
#
# Strategy for how to schedule schedulable SRM requests. The strategy controls in which order
# SRM requests transition from the SRM_REQUEST_QUEUED state to SRM_REQUEST_INPROGRESS. Once
# the max-inprogress limit for a specific type of requests is reached, subsequent requests are
# queued and the scheduling strategy controls the order in which these requests are processed.
#
# The strategy is pluggable and third party plugins can add new strategies by implementing
# scheduling strategy SPI. Several plugins ship with dCache:
#
# fifo First in, first out. Requests are processed in arrival order. Individual users
# may monopolise the SRM through issuing many requests or issuing long-lasting
# requests.
#
# lifo Last in, first out. The last request to arrive is processed first. In contrast to
# fifo, this policy is not fair. Under load spikes, some requests will observe longer
# response times, while others appear fast.
#
# Lifo does however tend to be more robust in overload scenarios because it processes
# the requests for which the client is least likely to time out first. In other words,
# it can maintain maximum request rate, while fifo in some scenarios can enter a
# live-lock in which all resources are spent on processing requests for which the
# client subsequently times out.
#
# throughput-fair-share
#
# Round robin scheduler providing fair sharing of the request rate. E.g. if two
# parties have requests queued, requests are scheduled in alternating order. Does
# not prevent that one party may monopolise the system by submitting long running
# requests while the other party submits requests that finish quickly.
#
# A configurable discriminator defines the grouping between which to provide a
# fair share.
#
# inprogress-fair-share
#
# Least-inprogress-requests-first scheduler providing fair sharing of the inprogress
# slots. E.g. if two parties have requests queued, the party with the least inprogress
# requests is the one whose request will be started. If one party submits long running
# requests, that party will effectively be penalized by having a lower request rate.
#
# A configurable discriminator defines the grouping between which to provide a
# fair share.
#
srm.plugins.scheduler=inprogress-fair-share
# Configuration of the inprogress fair share strategy.
(prefix)srm.scheduler.inprogress-fair-share = Configuration for the in progress fair share scheduling strategy
# Discriminator for the inprogress fair share strategy.
srm.scheduler.inprogress-fair-share!discriminator=${srm.plugins.discriminator}
# Configuration of the throughput fair share strategy.
(prefix)srm.scheduler.throughput-fair-share = Configuration for the throughput fair share scheduling strategy
# Discriminator for the throughput fair share strategy.
srm.scheduler.throughput-fair-share!discriminator=${srm.plugins.discriminator}
# ---- Delay until requests are processed asynchronously
#
# Schedulable SRM requests may be processed synchronously or asynchronously, at
# the server's discretion. dCache can start to process such requests synchronously
# and, if this is taking too long, reply asynchronously and continue to work on the
# operation background. While in synchronous mode, a webserver thread is blocked
# waiting for the result (see srm.limits.jetty.threads.min and
# srm.limits.jetty.threads.max).
#
# This setting specifies the time after which requests are handled asynchronously.
# Set to 'infinity' to disable asynchronous processing.
#
# Asynchronous processing avoids holding TCP connections to the server while
# the request is processed, but at the expense of the client periodically polling
# the status, thus increasing the perceived request processing time.
#
srm.request.switch-to-async-mode-delay = 1000
(one-of?MILLISECONDS|SECONDS|MINUTES)\
srm.request.switch-to-async-mode-delay.unit=MILLISECONDS
(forbidden)srmGetReqSwitchToAsynchronousModeDelay = Use srm.request.get.switch-to-async-mode-delay
srm.request.get.switch-to-async-mode-delay = ${srm.request.switch-to-async-mode-delay}
(one-of?MILLISECONDS|SECONDS|MINUTES|${srm.request.switch-to-async-mode-delay.unit})\
srm.request.get.switch-to-async-mode-delay.unit = ${srm.request.switch-to-async-mode-delay.unit}
(forbidden)srmBringOnlineReqSwitchToAsynchronousModeDelay = Use srm.request.bring-online.switch-to-async-mode-delay
srm.request.bring-online.switch-to-async-mode-delay = ${srm.request.switch-to-async-mode-delay}
(one-of?MILLISECONDS|\
SECONDS|MINUTES|\
HOURS|DAYS|\
${srm.request.switch-to-async-mode-delay.unit})\
srm.request.bring-online.switch-to-async-mode-delay.unit=${srm.request.switch-to-async-mode-delay.unit}
(forbidden)srmPutReqSwitchToAsynchronousModeDelay = Use srm.request.put.switch-to-async-mode-delay
srm.request.put.switch-to-async-mode-delay = ${srm.request.switch-to-async-mode-delay}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.request.switch-to-async-mode-delay.unit})\
srm.request.put.switch-to-async-mode-delay.unit=${srm.request.switch-to-async-mode-delay.unit}
(forbidden)srmLsRequestSwitchToAsynchronousModeDelay = Use srm.request.ls.switch-to-async-mode-delay
srm.request.ls.switch-to-async-mode-delay = ${srm.request.switch-to-async-mode-delay}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.request.switch-to-async-mode-delay.unit})\
srm.request.ls.switch-to-async-mode-delay.unit=${srm.request.switch-to-async-mode-delay.unit}
# ---- Maximum advertised poll period for asynchronous requests
#
# Once a schedulable SRM request switches to asynchronous processing (see srm.request.switch-to-async-mode-delay),
# the SRM servers advertises a polling period to the client. The server gradually increases the period every
# time the client polls for the result. This setting places an upper bound on this poll period.
#
# An SRM client is free to ignore the advertised poll period.
#
srm.request.max-poll-period = 60
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS)\
srm.request.max-poll-period.unit = SECONDS
srm.request.get.max-poll-period = ${srm.request.max-poll-period}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.max-poll-period.unit})\
srm.request.get.max-poll-period.unit = ${srm.request.max-poll-period.unit}
srm.request.put.max-poll-period = ${srm.request.max-poll-period}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.max-poll-period.unit})\
srm.request.put.max-poll-period.unit = ${srm.request.max-poll-period.unit}
srm.request.bring-online.max-poll-period = ${srm.request.max-poll-period}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.max-poll-period.unit})\
srm.request.bring-online.max-poll-period.unit = ${srm.request.max-poll-period.unit}
srm.request.ls.max-poll-period = ${srm.request.max-poll-period}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.max-poll-period.unit})\
srm.request.ls.max-poll-period.unit = ${srm.request.max-poll-period.unit}
srm.request.reserve-space.max-poll-period = ${srm.request.max-poll-period}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.max-poll-period.unit})\
srm.request.reserve-space.max-poll-period.unit = ${srm.request.max-poll-period.unit}
srm.request.copy.max-poll-period = ${srm.request.max-poll-period}
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS|${srm.request.max-poll-period.unit})\
srm.request.copy.max-poll-period.unit = ${srm.request.max-poll-period.unit}
# ---- Persistence of requests
#
# Controls whether schedulable SRM requests (put, get, ls, bring online, reserve space) are
# stored in the SRM database.
#
# If disabled, recovery after restart will not work, which will lead to leaked upload
# directories. Listing and monitoring of complete requests are also unsupported if this
# option is disabled.
#
# See also srm.persistence.* for other tuning parameters for request persistence.
#
(forbidden)srmDatabaseEnabled = Use srm.persistence.enable
(one-of?true|false)srm.persistence.enable = true
(forbidden)srmGetDatabaseEnabled = Use srm.persistence.get.enable
(one-of?true|false|${srm.persistence.enable})srm.persistence.get.enable = ${srm.persistence.enable}
(forbidden)srmBringOnlineDatabaseEnabled = Use srm.persistence.bring-online.enable
(one-of?true|false|${srm.persistence.enable})srm.persistence.bring-online.enable = ${srm.persistence.enable}
(forbidden)srmPutDatabaseEnabled = Use srm.persistence.put.enable
(one-of?true|false|${srm.persistence.enable})srm.persistence.put.enable = ${srm.persistence.enable}
(forbidden)srmCopyDatabaseEnabled = Use srm.persistence.copy.enable
(one-of?true|false|${srm.persistence.enable})srm.persistence.copy.enable = ${srm.persistence.enable}
(forbidden)srmLsDatabaseEnabled = Use srm.persistence.ls.enable
(one-of?true|false|${srm.persistence.enable})srm.persistence.ls.enable = ${srm.persistence.enable}
(forbidden)srmReserveDatabaseEnabled = Use srm.persistence.reserve-space.enable
(one-of?true|false|${srm.persistence.enable})srm.persistence.reserve-space.enable = ${srm.persistence.enable}
# ---- Enable cleaning of pending requests during restart
#
# When true and the srm is restarted, all unfinished requests will be aborted right away.
# This will invalidate all ongoing SRM transfers and all ongoing stage requests. If
# false, most clients should not notice a brief restart.
#
(forbidden)srmCleanPendingRequestsOnRestart = Use srm.persistence.enable.clean-pending-on-restart
(one-of?true|false)srm.persistence.enable.clean-pending-on-restart=false
(forbidden)srmGetCleanPendingRequestsOnRestart = Use srm.persistence.get.enable.clean-pending-on-restart
(one-of?true|false|${srm.persistence.enable.clean-pending-on-restart})\
srm.persistence.get.enable.clean-pending-on-restart = ${srm.persistence.enable.clean-pending-on-restart}
(forbidden)srmBringOnlineCleanPendingRequestsOnRestart = Use srm.persistence.bring-online.enable.clean-pending-on-restart
(one-of?true|false|${srm.persistence.enable.clean-pending-on-restart})\
srm.persistence.bring-online.enable.clean-pending-on-restart = ${srm.persistence.enable.clean-pending-on-restart}
(forbidden)srmPutCleanPendingRequestsOnRestart = Use srm.persistence.put.enable.clean-pending-on-restart
(one-of?true|false|${srm.persistence.enable.clean-pending-on-restart})\
srm.persistence.put.enable.clean-pending-on-restart = ${srm.persistence.enable.clean-pending-on-restart}
(forbidden)srmCopyCleanPendingRequestsOnRestart = Use srm.persistence.copy.enable.clean-pending-on-restart
(one-of?true|false|${srm.persistence.enable.clean-pending-on-restart})\
srm.persistence.copy.enable.clean-pending-on-restart = ${srm.persistence.enable.clean-pending-on-restart}
(forbidden)srmLsCleanPendingRequestsOnRestart = Use srm.persistence.ls.enable.clean-pending-on-restart
(one-of?true|false|${srm.persistence.enable.clean-pending-on-restart})\
srm.persistence.ls.enable.clean-pending-on-restart = ${srm.persistence.enable.clean-pending-on-restart}
(forbidden)srmReserveCleanPendingRequestsOnRestart = Use srm.persistence.reserve-space.enable.clean-pending-on-restart
(one-of?true|false|${srm.persistence.enable.clean-pending-on-restart})\
srm.persistence.reserve-space.enable.clean-pending-on-restart = ${srm.persistence.enable.clean-pending-on-restart}
# ---- Period before old transfers are removed from the database
#
# The srm will hold SRM requests and their history in database for
# srm.persistence.keep-history-period days after that they will be removed.
#
(forbidden)srmKeepRequestHistoryPeriod = Use srm.persistence.keep-history-period
srm.persistence.keep-history-period = 10
(one-of?HOURS|DAYS)srm.persistence.keep-history-period.unit=DAYS
(forbidden)srmGetKeepRequestHistoryPeriod = Use srm.persistence.get.keep-history-period
srm.persistence.get.keep-history-period = ${srm.persistence.keep-history-period}
(one-of?HOURS|DAYS|${srm.persistence.keep-history-period.unit})\
srm.persistence.get.keep-history-period.unit=${srm.persistence.keep-history-period.unit}
(forbidden)srmBringOnlineKeepRequestHistoryPeriod = Use srm.persistence.bring-online.keep-history-period
srm.persistence.bring-online.keep-history-period = ${srm.persistence.keep-history-period}
(one-of?HOURS|DAYS|${srm.persistence.keep-history-period.unit})\
srm.persistence.bring-online.keep-history-period.unit=${srm.persistence.keep-history-period.unit}
(forbidden)srmPutKeepRequestHistoryPeriod = Use srm.persistence.put.keep-history-period
srm.persistence.put.keep-history-period = ${srm.persistence.keep-history-period}
(one-of?HOURS|DAYS|${srm.persistence.keep-history-period.unit})\
srm.persistence.put.keep-history-period.unit=${srm.persistence.keep-history-period.unit}
(forbidden)srmCopyKeepRequestHistoryPeriod = Use srm.persistence.copy.keep-history-period
srm.persistence.copy.keep-history-period = ${srm.persistence.keep-history-period}
(one-of?HOURS|DAYS|${srm.persistence.keep-history-period.unit})\
srm.persistence.copy.keep-history-period.unit=${srm.persistence.keep-history-period.unit}
(forbidden)srmLsKeepRequestHistoryPeriod = Use srm.persistence.ls.keep-history-period
srm.persistence.ls.keep-history-period = ${srm.persistence.keep-history-period}
(one-of?HOURS|DAYS|${srm.persistence.keep-history-period.unit})\
srm.persistence.ls.keep-history-period.unit=${srm.persistence.keep-history-period.unit}
(forbidden)srmReserveKeepRequestHistoryPeriod = Use srm.persistence.reserve-space.keep-history-period
srm.persistence.reserve-space.keep-history-period = ${srm.persistence.keep-history-period}
(one-of?HOURS|DAYS|${srm.persistence.keep-history-period.unit})\
srm.persistence.reserve-space.keep-history-period.unit=${srm.persistence.keep-history-period.unit}
#
# --- How frequently to remove old requests from the database.
#
(forbidden)srmExpiredRequestRemovalPeriod = Use srm.persistence.remove-expired-period
srm.persistence.remove-expired-period = 600
(one-of?MILLISECONDS|SECONDS|MINUTES|HOURS|DAYS)\
srm.persistence.remove-expired-period.unit=SECONDS
(forbidden)srmGetExpiredRequestRemovalPeriod = Use srm.persistence.get.remove-expired-period
srm.persistence.get.remove-expired-period = ${srm.persistence.remove-expired-period}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.persistence.remove-expired-period.unit})\
srm.persistence.get.remove-expired-period.unit=${srm.persistence.remove-expired-period.unit}
(forbidden)\
srmBringOnlineExpiredRequestRemovalPeriod = Use srm.persistence.bring-online.remove-expired-period
srm.persistence.bring-online.remove-expired-period = ${srm.persistence.remove-expired-period}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.persistence.remove-expired-period.unit})\
srm.persistence.bring-online.remove-expired-period.unit=${srm.persistence.remove-expired-period.unit}
(forbidden)srmPutExpiredRequestRemovalPeriod = Use srm.persistence.put.remove-expired-period
srm.persistence.put.remove-expired-period = ${srm.persistence.remove-expired-period}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.persistence.remove-expired-period.unit})\
srm.persistence.put.remove-expired-period.unit=${srm.persistence.remove-expired-period.unit}
(forbidden)srmCopyExpiredRequestRemovalPeriod = Use srm.persistence.copy.remove-expired-period
srm.persistence.copy.remove-expired-period = ${srm.persistence.remove-expired-period}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|DAYS|\
${srm.persistence.remove-expired-period.unit})\
srm.persistence.copy.remove-expired-period.unit=${srm.persistence.remove-expired-period.unit}
(forbidden)srmLsExpiredRequestRemovalPeriod = Use srm.persistence.ls.remove-expired-period
srm.persistence.ls.remove-expired-period = ${srm.persistence.remove-expired-period}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.persistence.remove-expired-period.unit})\
srm.persistence.ls.remove-expired-period.unit=${srm.persistence.remove-expired-period.unit}
(forbidden)\
srmReserveExpiredRequestRemovalPeriod = Use srm.persistence.reserve-space.remove-expired-period
srm.persistence.reserve-space.remove-expired-period = ${srm.persistence.remove-expired-period}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.persistence.remove-expired-period.unit})\
srm.persistence.reserve-space.remove-expired-period.unit=${srm.persistence.remove-expired-period.unit}
# ---- Persistence of SRM request transitions
#
# Controls persistence of the transition history of SRM request in the database.
# Request transitions can be examined through the command line interface or
# through the the srmWatch monitoring tool.
#
# Disabling this feature reduces the size and load of the database at the
# expense of not being able to retrieve all information about completed
# transfers. Such information is often useful when diagnosing problems.
#
# If srm.persistence.enable is set to false, this setting has no effect.
#
(forbidden)srmRequestHistoryDatabaseEnabled = Use srm.persistence.enable.history
(one-of?true|false)\
srm.persistence.enable.history = true
(forbidden)srmGetRequestHistoryDatabaseEnabled = Use srm.persistence.get.enable.history
(one-of?true|false|${srm.persistence.enable.history})\
srm.persistence.get.enable.history = ${srm.persistence.enable.history}
(forbidden)srmBringOnlineRequestHistoryDatabaseEnabled = Use srm.persistence.bring-online.enable.history
(one-of?true|false|${srm.persistence.enable.history})\
srm.persistence.bring-online.enable.history = ${srm.persistence.enable.history}
(forbidden)srmPutRequestHistoryDatabaseEnabled = Use srm.persistence.put.enable.history
(one-of?true|false|${srm.persistence.enable.history})\
srm.persistence.put.enable.history = ${srm.persistence.enable.history}
(forbidden)srmCopyRequestHistoryDatabaseEnabled = Use srm.persistence.copy.enable.history
(one-of?true|false|${srm.persistence.enable.history})\
srm.persistence.copy.enable.history = ${srm.persistence.enable.history}
(forbidden)srmLsRequestHistoryDatabaseEnabled = Use srm.persistence.ls.enable.history
(one-of?true|false|${srm.persistence.enable.history})\
srm.persistence.ls.enable.history = ${srm.persistence.enable.history}
(forbidden)srmReserveRequestHistoryDatabaseEnabled = Use srm.persistence.reserve-space.enable.history
(one-of?true|false|${srm.persistence.enable.history})\
srm.persistence.reserve-space.enable.history = ${srm.persistence.enable.history}
# --- Immediately store all transitions
#
# Controls whether intermediate state transitions trigger an update to the database.
# If set to true, every change to a request state is stored. If set to false then
# intermediate state changes are batched together and stored with other changes.
#
# The setting does not control which information is stored in the database. When a
# request is eventually stored, all available information is stored.
#
# If srm.persistence.enable is set to false, this setting has no effect.
#
(forbidden)srmStoreCompletedRequestsOnly = Use srm.persistence.enable.store-transient-state
(one-of?true|false)srm.persistence.enable.store-transient-state = false
(forbidden)srmGetStoreCompletedRequestsOnly = Use srm.persistence.get.enable.store-transient-state
(one-of?true|false|${srm.persistence.enable.store-transient-state})\
srm.persistence.get.enable.store-transient-state = ${srm.persistence.enable.store-transient-state}
(forbidden)srmBringOnlineStoreCompletedRequestsOnly = Use srm.persistence.bring-online.enable.store-transient-state
(one-of?true|false|${srm.persistence.enable.store-transient-state})\
srm.persistence.bring-online.enable.store-transient-state = ${srm.persistence.enable.store-transient-state}
(forbidden)srmPutStoreCompletedRequestsOnly = Use srm.persistence.put.enable.store-transient-state
(one-of?true|false|${srm.persistence.enable.store-transient-state})\
srm.persistence.put.enable.store-transient-state = ${srm.persistence.enable.store-transient-state}
(forbidden)srmCopyStoreCompletedRequestsOnly = Use srm.persistence.copy.enable.store-transient-state
(one-of?true|false|${srm.persistence.enable.store-transient-state})\
srm.persistence.copy.enable.store-transient-state = ${srm.persistence.enable.store-transient-state}
(forbidden)srmLsStoreCompletedRequestsOnly = Use srm.persistence.ls.enable.store-transient-state
(one-of?true|false|${srm.persistence.enable.store-transient-state})\
srm.persistence.ls.enable.store-transient-state = ${srm.persistence.enable.store-transient-state}
(forbidden)srmReserveSpaceStoreCompletedRequestsOnly = Use srm.persistence.reserve-space.enable.store-transient-state
(one-of?true|false|${srm.persistence.enable.store-transient-state})\
srm.persistence.reserve-space.enable.store-transient-state = ${srm.persistence.enable.store-transient-state}
# Ls requests settings
# ---- Directory entries to include in list reply
#
# Number of entries allowed to be returnes in a single srmls
# request. Directory listings larger than this most be broken into
# multiple requests.
#
# Use 'infinity' to specify that there is no limit. Warning: Available
# heap memory will be an upper limit as the response cannot be
# streamed. Once heap limit is reached, the SRM will auto-restart.
#
(forbidden)srmLsMaxNumberOfEntries = Use srm.limits.ls.entries
srm.limits.ls.entries = 10000
# ---- List recursion depth
#
# Maximum recursion depth.
#
(forbidden)srmLsMaxNumberOfLevels = Use srm.limits.ls.levels
srm.limits.ls.levels = infinity
# --- Request lifetimes
srm.request.lifetime=14400000
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS)\
srm.request.lifetime.unit=MILLISECONDS
(forbidden)srmGetLifeTime = Use srm.request.get.lifetime
srm.request.get.lifetime = ${srm.request.lifetime}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.request.lifetime.unit})\
srm.request.get.lifetime.unit=${srm.request.lifetime.unit}
(forbidden)srmBringOnlineLifeTime = Use srm.request.bring-online.lifetime
srm.request.bring-online.lifetime = ${srm.request.lifetime}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.request.lifetime.unit})\
srm.request.bring-online.lifetime.unit=${srm.request.lifetime.unit}
(forbidden)srmPutLifeTime = Use srm.request.put.lifetime
srm.request.put.lifetime = ${srm.request.lifetime}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.request.lifetime.unit})\
srm.request.put.lifetime.unit=${srm.request.lifetime.unit}
(forbidden)srmCopyLifeTime = Use srm.request.copy.lifetime
srm.request.copy.lifetime = ${srm.request.lifetime}
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\
HOURS|\
DAYS|\
${srm.request.lifetime.unit})\
srm.request.copy.lifetime.unit=${srm.request.lifetime.unit}
# ---- File system root exported by the srm service
(forbidden)pnfsSrmPath = Use srm.root
srm.root = /
# Cell address of pnfsmanager service
srm.service.pnfsmanager=${dcache.service.pnfsmanager}
# Timeout for pnfsmanager requests
(forbidden)srmPnfsTimeout = Use srm.service.pnfsmanager.timeout
srm.service.pnfsmanager.timeout = 120
(one-of?MILLISECONDS|\
SECONDS|\
MINUTES|\