Thomas Schoebel-Theuer
ecdd4f5ef4
logger: adapt to s64
2021-02-10 13:36:06 +01:00
Thomas Schoebel-Theuer
bf80eae6aa
compat: move detection to compat.h
2021-02-10 13:36:06 +01:00
Thomas Schoebel-Theuer
f21c58c480
brick_say: use mars_rename at MARS_HAS_PREPATCH_V2
2021-02-10 13:36:06 +01:00
Thomas Schoebel-Theuer
31bb5cb182
porting: prefer READ_ONCE in place of ACCESS_ONCE
2021-02-10 13:36:06 +01:00
Thomas Schoebel-Theuer
f24ea2752f
limiter: fix divide by zero
...
Feb 10 04:41:59 t1 kernel: divide error: 0000 [#1 ] SMP KASAN NOPTI
Feb 10 04:41:59 t1 kernel: CPU: 5 PID: 13507 Comm: mars_copy7 Not tainted 5.4.86+ #237
Feb 10 04:41:59 t1 kernel: Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.12.0-59-gc9ba527-rebuilt.opensuse.org 04/01/2014
Feb 10 04:41:59 t1 kernel: RIP: 0010:mars_limit+0x533/0x6bb [mars]
Feb 10 04:41:59 t1 kernel: Code: 15 48 63 95 e4 fe ff ff 48 ff c0 49 89 47 48 49 01 d5 4d 89 6f 50 49 69 47 50 00 ca 9a 3b 49 8d 7f 20 41 bd ff ff ff 7f 48 99 <49> f7 fc 48 3d ff ff ff 7f 4c 0f 4e e8 48 89 f8 48 c1 e8 03 8a 04
Feb 10 04:41:59 t1 kernel: RSP: 0018:ffff888033b87a58 EFLAGS: 00010212
Feb 10 04:41:59 t1 kernel: RAX: 00001a5e39dc8000 RBX: dffffc0000000000 RCX: 0000000000000017
Feb 10 04:41:59 t1 kernel: RDX: 0000000000000000 RSI: 0000000225c17d03 RDI: ffffffffa03bdce0
Feb 10 04:41:59 t1 kernel: RBP: ffff888033b87b98 R08: fffffbfff073f9ce R09: 0000000000000001
Feb 10 04:41:59 t1 kernel: R10: 0000000000000000 R11: ffffffff839fce6b R12: 0000000000000000
Feb 10 04:41:59 t1 kernel: R13: 000000007fffffff R14: 0000000025e89700 R15: ffffffffa03bdcc0
Feb 10 04:41:59 t1 kernel: FS: 0000000000000000(0000) GS:ffff88818b940000(0000) knlGS:0000000000000000
Feb 10 04:41:59 t1 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Feb 10 04:41:59 t1 kernel: CR2: 00005651d25b7b98 CR3: 0000000171668000 CR4: 0000000000340ee0
Feb 10 04:41:59 t1 kernel: Call Trace:
Feb 10 04:41:59 t1 kernel: ? ranking_compute+0x1a8/0x1a8 [mars]
Feb 10 04:41:59 t1 kernel: ? _brick_block_alloc+0x2ff/0x590 [mars]
Feb 10 04:41:59 t1 kernel: ? __brick_block_alloc+0x8a/0x8a [mars]
Feb 10 04:41:59 t1 kernel: ? kasan_unpoison_shadow+0xf/0x2e
Feb 10 04:41:59 t1 kernel: ? _new_aspect+0x464/0x4ab [mars]
Feb 10 04:41:59 t1 kernel: mars_limit_sleep+0xa/0x57 [mars]
Feb 10 04:41:59 t1 kernel: bio_ref_get+0x762/0xc4c [mars]
Feb 10 04:41:59 t1 kernel: _make_mref+0x48c/0x73e [mars]
Feb 10 04:41:59 t1 kernel: _next_state+0x3f6/0xc4b [mars]
Feb 10 04:41:59 t1 kernel: _run_copy+0x2cc/0x6f7 [mars]
Feb 10 04:41:59 t1 kernel: _copy_thread+0x3dd/0x84c [mars]
Feb 10 04:41:59 t1 kernel: ? _run_copy+0x6f7/0x6f7 [mars]
Feb 10 04:41:59 t1 kernel: ? lock_downgrade+0x55b/0x55b
Feb 10 04:41:59 t1 kernel: ? do_raw_spin_lock+0x144/0x1ef
Feb 10 04:41:59 t1 kernel: ? atomic_add_return.constprop.2+0x1e/0x1e
Feb 10 04:41:59 t1 kernel: ? add_wait_queue+0x85/0x85
Feb 10 04:41:59 t1 kernel: ? lockdep_hardirqs_on+0x433/0x482
Feb 10 04:41:59 t1 kernel: ? test_bit+0x1d/0x27
Feb 10 04:41:59 t1 kernel: kthread+0x2be/0x2cd
Feb 10 04:41:59 t1 kernel: ? _run_copy+0x6f7/0x6f7 [mars]
Feb 10 04:41:59 t1 kernel: ? kthread_worker_fn+0x3ef/0x3ef
Feb 10 04:41:59 t1 kernel: ret_from_fork+0x27/0x50
Feb 10 04:41:59 t1 kernel: Modules linked in: mars cls_u32 sch_netem sch_tbf sch_prio xt_mark lz4_compress lz4_decompress virtio_console crct10dif_pclmul virtio_balloon crc32_pclmul usbhid virtio_net net_failover failover virtio_blk xhci_pci xhci_hcd crc32c_intel usbcore virtio_pci virtio_ring usb_common virtio [last unloaded: mars]
Feb 10 04:41:59 t1 kernel: ---[ end trace e009385d7938b1c4 ]---
2021-02-10 13:31:55 +01:00
Thomas Schoebel-Theuer
c1820e0783
main: dont replay beyond primary during sync
2021-02-07 19:33:06 +01:00
Thomas Schoebel-Theuer
fac0bd5a47
logger: fix scarce scheduling deadlock
2021-02-07 19:33:04 +01:00
Thomas Schoebel-Theuer
aa7ef9451b
logger: report ranking data
2021-02-07 19:30:30 +01:00
Thomas Schoebel-Theuer
69093f37f5
logger: report bailout
2021-02-07 19:30:30 +01:00
Thomas Schoebel-Theuer
4ad2204398
logger: report any banning
2021-02-07 19:30:30 +01:00
Thomas Schoebel-Theuer
189ba67e7a
logger: simplify pressure calculation
2021-02-07 19:30:30 +01:00
Thomas Schoebel-Theuer
8a04c4cbae
main: fix sync starvation
...
Commit e20800c47c
did too much:
replay may take total preference when there is a permanent
write load.
Only prefer replay when there are multiple logfiles.
2021-02-06 15:22:24 +01:00
Thomas Schoebel-Theuer
a77b8d1190
main: assure minimum sync progress
2021-02-06 15:22:23 +01:00
Thomas Schoebel-Theuer
ef2997206b
main: update syncstatus more frequently
2021-02-06 15:08:07 +01:00
Thomas Schoebel-Theuer
35466f0396
logger: show pressure_mode for debugging
2021-02-06 15:08:07 +01:00
Thomas Schoebel-Theuer
133ff979b5
bio: allow throttling for testing
2021-02-06 15:08:07 +01:00
Thomas Schoebel-Theuer
c3e98aec5d
if: deactivate mars_congested earlier
2021-01-24 13:04:07 +01:00
Thomas Schoebel-Theuer
57eaf3c66b
main: fix typo
2021-01-19 15:07:04 +01:00
Thomas Schoebel-Theuer
9442916de2
main: local systemd_trigger
2020-12-22 08:58:02 +01:00
Gabriel Francisco
7b49ae9dde
compat: fix parent dir locking
2020-11-30 05:26:57 +00:00
Thomas Schoebel-Theuer
545c5c6001
main: fix hostname prefix matching
2020-11-26 10:07:04 +01:00
Thomas Schoebel-Theuer
e20800c47c
main: fix hanging replay progress during long-lasting sync
2020-11-25 16:48:37 +01:00
Thomas Schoebel-Theuer
448a4906d0
infra: fix ordered_readlink return status
2020-11-21 09:44:29 +01:00
Thomas Schoebel-Theuer
d786006974
main: improved rmmod debugging
2020-11-20 09:42:37 +01:00
Thomas Schoebel-Theuer
78376caa1a
all: fix race on activate_peer
2020-11-20 09:42:35 +01:00
Thomas Schoebel-Theuer
2b190d6cb9
infra: fix race on mf completion order
2020-11-10 16:04:01 +01:00
Thomas Schoebel-Theuer
d1edec9074
infra: factor out mapfree_real_size
2020-11-10 16:04:01 +01:00
Thomas Schoebel-Theuer
4797219f7e
main: smarter activation of new oneshot peers
2020-11-10 16:04:01 +01:00
Thomas Schoebel-Theuer
bf4343e1bb
main: testing of new ssh-free methods
2020-11-10 16:04:01 +01:00
Thomas Schoebel-Theuer
a12717518b
main: determine marsadm versions globally in the cluster
2020-11-10 16:04:01 +01:00
Thomas Schoebel-Theuer
54cb4605d0
all: bump versions
2020-11-10 16:04:01 +01:00
Thomas Schoebel-Theuer
8b507da75e
main: simplify new resolv method
2020-11-07 08:34:57 +01:00
Thomas Schoebel-Theuer
21afb79c32
infra: new push_link with foreign IP
2020-11-07 08:34:57 +01:00
Thomas Schoebel-Theuer
c26fb3bef2
infra: invalidate user caches
2020-11-07 08:34:57 +01:00
Thomas Schoebel-Theuer
166fefb676
all: allow rebased fetch
2020-11-07 08:34:57 +01:00
Thomas Schoebel-Theuer
0d79408487
main: try to retrieve unknown peers
2020-11-07 08:34:57 +01:00
Thomas Schoebel-Theuer
ad0051ba51
main: better report unknown peers
2020-11-07 08:34:57 +01:00
Thomas Schoebel-Theuer
77748d31ff
main: allow fetch of initial uuid
2020-11-07 08:34:57 +01:00
Thomas Schoebel-Theuer
bd22838db3
main: no_fetch when pushing to foreign peers
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
06a9237723
main: push_info to foreign peers
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
d8e641a40e
infra: new push_check operation
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
a4a2034be5
main: fetch exhausting metadata on full trigger
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
cc6fd0755b
main: prepare smarter activation of new oneshot peers
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
8c0fc33630
main: replace old do_additional with oneshot
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
eb938b488d
main: remove old do_communicate
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
6d7c752f2c
main: remove old doing_additional
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
ac7dd94c80
main: remove old additional_peers()
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
1a96616efe
main: new oneshot parameter at activate_peer()
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
7a0c66393f
main: split activate_peer()
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
ca07239410
main: automatic deallocate of new floating peers
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
2cb1d425c6
main: new oneshot peer threads
2020-11-07 08:34:56 +01:00
Thomas Schoebel-Theuer
e03e89ab17
main: make my_uuid global
2020-11-07 08:25:47 +01:00
Thomas Schoebel-Theuer
68596789f5
main: better error message
2020-11-07 08:25:47 +01:00
Thomas Schoebel-Theuer
a11f8666a3
main: allow silent reporting
2020-11-07 08:25:47 +01:00
Thomas Schoebel-Theuer
fb186be1f1
main: silence annoying error msg
2020-11-07 08:25:47 +01:00
Thomas Schoebel-Theuer
f1a388827c
main: push my IP to any preliminary peers
2020-11-07 08:25:47 +01:00
Thomas Schoebel-Theuer
ddd025e5ca
main: rename ambiguous lock
2020-11-07 08:25:46 +01:00
Thomas Schoebel-Theuer
8ac109ad22
server: activate peer on ip push
2020-11-07 08:25:46 +01:00
Thomas Schoebel-Theuer
9231052ce1
main: simplify activate_peer
2020-11-07 08:25:46 +01:00
Thomas Schoebel-Theuer
8fc98684bc
main: allow push to non-activated peer
2020-11-07 08:25:44 +01:00
Thomas Schoebel-Theuer
38ce235e86
main: speedup peer search
2020-11-07 08:01:07 +01:00
Thomas Schoebel-Theuer
577fbac8ed
main: factor out peer allocation
2020-11-07 08:01:07 +01:00
Thomas Schoebel-Theuer
5fd960b91c
main: move make_peer_dir_list
2020-11-07 08:01:07 +01:00
Thomas Schoebel-Theuer
2cb3520e01
infra: rework net address parsing
2020-11-07 08:01:06 +01:00
Thomas Schoebel-Theuer
530a938a62
net: safeguard recv of bad string size
2020-11-07 07:58:53 +01:00
Thomas Schoebel-Theuer
e2ef6f4b04
main: do not write alivelinks before {create,join}-cluster
2020-10-28 06:09:11 +01:00
Thomas Schoebel-Theuer
8f510f5936
main: better error msg
2020-10-28 06:09:11 +01:00
Thomas Schoebel-Theuer
c77d656c01
infra: remove old method
2020-10-28 06:09:11 +01:00
Thomas Schoebel-Theuer
dd428841d0
infra: ignore more name prefixes
2020-10-28 06:09:11 +01:00
Thomas Schoebel-Theuer
f7f357669a
main: skip annoying message
2020-10-28 06:09:11 +01:00
Thomas Schoebel-Theuer
e689f17d55
infra: automatically create any missing intermediate dirs
2020-10-28 06:09:11 +01:00
Thomas Schoebel-Theuer
e1547a1387
net: better sending failure status code
2020-10-28 06:09:11 +01:00
Thomas Schoebel-Theuer
4b08aacf2a
main: prefer fetch from originating peer
2020-10-28 06:09:08 +01:00
Thomas Schoebel-Theuer
dde0281e60
client: refresh info asynchronously
2020-10-27 20:08:05 +01:00
Thomas Schoebel-Theuer
d7adec9f1a
main: fix cork on trigger
2020-10-27 09:13:45 +01:00
Thomas Schoebel-Theuer
b3111a9c6a
infra: fix mars_readlink
2020-10-27 09:12:26 +01:00
Thomas Schoebel-Theuer
fd41b00373
main: fix and simplify parse_args
2020-10-01 14:15:12 +02:00
Thomas Schoebel-Theuer
cbcbed71d4
main: more precise err msg
2020-10-01 14:15:12 +02:00
Thomas Schoebel-Theuer
be05ce3cef
main: fix wording of info message
2020-10-01 14:02:01 +02:00
Thomas Schoebel-Theuer
0a1967278b
main: skip scanning deleted logfiles
2020-10-01 14:01:57 +02:00
Thomas Schoebel-Theuer
8032150f3e
main: report disk-error
2020-09-30 14:24:25 +02:00
Thomas Schoebel-Theuer
e58a5e4cee
infra: propagate any open error code
2020-09-30 10:34:14 +02:00
Thomas Schoebel-Theuer
03e69bdd5c
infra: fix unnecessary unlink
2020-09-21 14:20:25 +02:00
Thomas Schoebel-Theuer
216267bb4b
main: silence annoying error
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
5a4f1961be
all: less msleep
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
a19f64119e
infra: move check for backup string
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
7ef119320b
infra: reduce string testing
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
114d9748ad
main: restrict table searching to subdir entries
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
f65d18ddf5
main: introduce cl_childs and make contiguous
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
ed34d53136
main: remove unnecessary table entries for main worker
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
c48cb7580d
infra: accept any symlinks for later network transfer
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
e77f856d86
infra: use dent hash list for searching
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
a93cfb06f4
net: also hash remote dentries
2020-09-18 17:45:57 +02:00
Thomas Schoebel-Theuer
ec962406c6
main: remove superfluous global from main_worker_fn and structures
2020-09-17 18:02:27 +02:00
Thomas Schoebel-Theuer
302e7edfe7
infra: simplify mars_free_dent_all
2020-09-17 18:02:27 +02:00
Thomas Schoebel-Theuer
aa3f65a1aa
main: replace remote_dent_list with mars_global instances
2020-09-17 18:02:27 +02:00
Thomas Schoebel-Theuer
1e5be3d1b9
infra: move dent transfer prototypes to strategy
2020-09-17 18:02:27 +02:00
Thomas Schoebel-Theuer
7d55e6f02a
infra: simplifiy dent search logic
2020-09-17 18:02:27 +02:00
Thomas Schoebel-Theuer
47f5de0a09
main: safeguard dent
2020-09-17 18:02:27 +02:00
Thomas Schoebel-Theuer
85b8b1312f
infra: safeguard dent parent pointer
2020-09-17 18:02:27 +02:00
Thomas Schoebel-Theuer
423ff91956
infra: better dent hash function
2020-09-17 18:02:15 +02:00
Thomas Schoebel-Theuer
5d1484fc26
infra: safeguard dent list checking
2020-09-15 18:16:07 +02:00
Thomas Schoebel-Theuer
eb6e3dc20d
infra: dent order statistics
2020-09-15 18:16:07 +02:00
Thomas Schoebel-Theuer
9e3faf159c
infra: better dent statistics
2020-09-15 18:16:07 +02:00
Thomas Schoebel-Theuer
23b8ef7aa7
main: fix race on mars_global
2020-09-15 18:14:50 +02:00
Thomas Schoebel-Theuer
adaecce4c8
infra: safeguard free_mars_global
2020-09-15 18:05:54 +02:00
Thomas Schoebel-Theuer
efbb44cf4b
all: earlier rot destruction
2020-09-15 18:05:47 +02:00
Thomas Schoebel-Theuer
f9f2a421b8
infra: safeguard dents at _op_remove
2020-09-15 11:11:49 +02:00
Thomas Schoebel-Theuer
b0f8b3800f
main: add d_count for long-lasting references
2020-09-15 11:11:49 +02:00
Thomas Schoebel-Theuer
2231b50d04
infra: fix mapfree use-after-free
2020-09-15 03:18:17 +02:00
Thomas Schoebel-Theuer
49b69cd723
main: reduce mars_find_dent searching at make_sync
2020-09-08 11:34:40 +02:00
Thomas Schoebel-Theuer
ab60fbdf4e
main: reduce mars_find_dent searching further
2020-09-08 11:34:40 +02:00
Thomas Schoebel-Theuer
963d656f26
main: reduce mars_find_dent searching at switches
2020-09-08 11:34:40 +02:00
Thomas Schoebel-Theuer
f1efb0604e
infra: improved scalability of mapfree infrastructure
2020-09-08 11:00:36 +02:00
Thomas Schoebel-Theuer
f770728c72
infra: fix replacement of .deleted links with files
2020-09-08 10:32:38 +02:00
Thomas Schoebel-Theuer
1bc326ec4f
main: only active peers shall count for usable features
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
1c3468985a
infra: increase hash table
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
7f65652f74
infra: better hash distribution
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
3b3801d23a
infra: speed up fuzzy hashing algorithm
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
d60326ca42
infra: earlier stop searching in unordered list part
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
b63c7f13cf
infra: improved dent debugging
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
7935ac1037
main: remove obsolete variable
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
b9964cd6c6
infra: skip non-member dents and subtrees
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
9828207c62
infra: factor out _reconnect_dent()
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
c500183177
server: precise thread naming
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
c575f28fbe
infra: fix IOPS and other computations
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
1238dcaf64
if: improve accuracy of IOPS computation
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
e59056860f
bio: show and compute total_* statistics only when debugging
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
aed4daef78
main: initial symlink update after push
2020-09-01 19:35:10 +02:00
Thomas Schoebel-Theuer
575c4d49b3
main: fix alivelink retrieval for inconsistent updates
2020-09-01 19:34:16 +02:00
Thomas Schoebel-Theuer
2720850215
infra: fix digest availability
2020-08-30 17:25:07 +02:00
Thomas Schoebel-Theuer
166f166f3f
main: safeguard parent pointers
2020-08-12 08:56:47 +02:00
Thomas Schoebel-Theuer
bf682f1273
all: minimum link update frequency, default 10s
...
Otherwise sysadmins might draw the wrong conclusion that something
might be hanging, instead of taking just a long time.
2020-08-12 08:56:29 +02:00
Thomas Schoebel-Theuer
27d3e9ff9b
net: use IP_FREEBIND for server sockets
2020-08-11 09:17:52 +02:00
Thomas Schoebel-Theuer
41507c7392
aio: show and compute total_* statistics only when debugging
2020-08-11 09:17:52 +02:00
Thomas Schoebel-Theuer
2e5b093657
main: safeguard potential race
2020-08-11 09:17:51 +02:00
Thomas Schoebel-Theuer
aff7bab0cc
main: fix race on exceptional secondary repair
2020-08-11 09:17:51 +02:00
Thomas Schoebel-Theuer
1d90b97db2
logger: fix race on replay_code
2020-08-11 09:17:51 +02:00
Thomas Schoebel-Theuer
71d8a9ecce
main: do not report additional connections
2020-08-02 13:21:28 +02:00
Thomas Schoebel-Theuer
769f325f25
main: fix activation of additional connections
2020-08-02 13:21:28 +02:00
Thomas Schoebel-Theuer
bc8ff9048c
main: new scalable alivelinks
2020-08-02 12:10:20 +02:00
Thomas Schoebel-Theuer
eb1cb08791
main: fix fetch of dirs
2020-08-02 10:58:03 +02:00
Thomas Schoebel-Theuer
d24c57e50a
all: bump features version
2020-08-02 10:56:17 +02:00
Thomas Schoebel-Theuer
2132853194
if: show and compute total_* statistics only when debugging
2020-07-31 09:26:20 +02:00
Thomas Schoebel-Theuer
6f21da8cec
if: better statistics
2020-07-31 09:26:20 +02:00
Thomas Schoebel-Theuer
3367e483a0
if: reduce fly_count atomic_t statistics
2020-07-31 09:26:20 +02:00
Thomas Schoebel-Theuer
dbc19ad904
main: report last completion stamp
2020-07-31 09:26:20 +02:00
Thomas Schoebel-Theuer
2b7e4587b7
if: remember last completion timestamp
2020-07-31 09:26:20 +02:00
Thomas Schoebel-Theuer
c1df8e7c84
infra: skip any backup subdirectories
2020-07-31 09:26:20 +02:00
Thomas Schoebel-Theuer
fb6ed4aebe
main: safeguard delete-resource
2020-07-31 09:26:20 +02:00