Newer
Older
# Copyright 2019 PrivateStorage.io, LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
Helpers for reading values from the Tahoe-LAFS configuration.
"""
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
from datetime import timedelta
from isodate import parse_duration
from .lease_maintenance import (
LeaseMaintenanceConfig,
)
class _EmptyConfig(object):
"""
Weakly pretend to be a Tahoe-LAFS configuration object with no
configuration.
"""
def get_config(self, section, option, default=object(), boolean=False):
return default
empty_config = _EmptyConfig()
def lease_maintenance_from_tahoe_config(node_config):
# type: (_Config) -> LeaseMaintenanceConfig
"""
Return a ``LeaseMaintenanceConfig`` representing the values from the given
configuration object.
"""
return LeaseMaintenanceConfig(
crawl_interval_mean=_read_duration(
node_config,
u"lease.crawl-interval.mean",
timedelta(days=26),
),
crawl_interval_range=_read_duration(
node_config,
u"lease.crawl-interval.range",
timedelta(days=4),
),
# The greater the min lease remaining time, the more of each lease
# period is "wasted" by renewing the lease before it has expired. The
# premise of ZKAPAuthorizer's use of leases is that if they expire,
# the storage server is free to reclaim the storage by forgetting
# about the share. However, since we do not know of any
# ZKAPAuthorizer-enabled storage grids which will garbage collect
# shares when leases expire, we have no reason not to use a zero
# duration here - for now.
#
# In the long run, storage servers must run with garbage collection
# enabled. Ideally, before that happens, we will have a system that
# doesn't involve trading of wasted lease time against reliability of
# leases being renewed before the shares are garbage collected.
#
# Also, since this is configuration, you can set it to something else
# if you want.
min_lease_remaining=_read_duration(
node_config,
u"lease.min-time-remaining",
timedelta(days=0),
),
)
def _read_duration(cfg, option, default):
"""
Read an ISO8601 "duration" from the ZKAPAuthorizer section of a Tahoe-LAFS
config.
:param cfg: The Tahoe-LAFS config object to consult.
:param option: The name of the option to read.
:return: ``None`` if the option is missing, otherwise the parsed duration
as a ``timedelta``.
"""
# type: (_Config, str) -> Optional[timedelta]
section_name = u"storageclient.plugins.privatestorageio-zkapauthz-v1"
value_str = cfg.get_config(
section=section_name,
option=option,
default=None,
)
if value_str is None:
return default
return parse_duration(value_str)