Commit Graph

1153 Commits

Author SHA1 Message Date
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