Commit Graph

2226 Commits

Author SHA1 Message Date
Amir Mohammad Fakhimi
ced348366c
feat: add zsh completions (#10040)
Co-authored-by: Henrique Dias <hacdias@gmail.com>
2023-08-17 16:43:27 +02:00
Henrique Dias
cc79eeb91c style: remove commented imports [skip changelog] 2023-08-17 14:43:08 +02:00
Kay
f12b372af9
style: gofumpt and godot [skip changelog] (#10081) 2023-08-17 14:02:08 +02:00
Jorropo
b4f415088f chore: bump boxo for verifcid breaking changes
This is a Q&D fix to get kubo building again, this is completely equivalent to what we used to have.
I'll submit a patch that DI the verifcid.Allowlist interface with fx later but this is needed to unblock something else.
2023-08-17 13:41:30 +02:00
Jorropo
6be6630e4e libp2p: stop reporting ProtocolVersion 2023-07-26 14:48:19 +02:00
Marten Seemann
c08313f032 chore: update go-libp2p to v0.28.1
Co-authored-by: Jorropo <jorropo.pgm@gmail.com>
2023-07-26 14:48:19 +02:00
Adin Schmahmann
1fe17a4165
docs(commands): explain that swarm connect can reuse existing connections or known addresses (#10015) 2023-07-20 08:25:56 -07:00
Henrique Dias
394d72db4c refactor: replace boxo/ipld/car by ipld/go-car 2023-06-29 16:10:49 +02:00
Henrique Dias
5156f21162
feat(ipns): records with V2-only signatures (#9932) 2023-06-20 14:24:31 +02:00
Jorropo
82fd9ec329
cmds/dag/import: pin roots by default (#9966)
This is a partial revert of b685355ca8.
Closes #9765 with compromise agreed in https://github.com/ipfs/kubo/issues/9765#issuecomment-1593117410
2023-06-15 16:41:59 +02:00
Rod Vagg
b685355ca8
feat!: dag import - don't pin roots by default (#9926)
* feat!: dag import - don't pin roots by default

Fixes: https://github.com/ipfs/kubo/issues/9765

* test(ipip-402): dag import

this adds basic regression test that guards behavior
around partial cars with or without pinning

* docs(ipip-402): ipip and dag import changelog

---------

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2023-06-14 20:45:34 +00:00
Marcin Rataj
f5f6b664db
fix(cmd): useful errors in dag import (#9945)
* fix: useful errors during dag import

Most of the time the error is either a bitflip in one of blocks,
or a truncation of car stream.

This allows user to understand what happened
and at which place in the car stream, making debug more humane.

* fix: correct message when root pin failed

this also correctly exits CLI commands with code 1 (was silent
false-positive 0 before)
2023-06-14 20:55:31 +02:00
Henrique Dias
e2128107f6 Revert "feat: adds secp256k1 keypair type to key gen command, adds test cases"
This reverts commit 67e1a173fc.
2023-06-12 15:44:12 +02:00
Jorropo
e7294cbdff feat: warn users who are falling behind reprovides
Fixes: #9704
Fixes: #9702
Fixes: #9703
Fixes: #9419
2023-06-08 10:05:30 +02:00
Adin Schmahmann
4ebde42ec8 feat: switch dag import command to use default go-ipld-legacy block decoder 2023-06-08 09:38:31 +02:00
Jorropo
d86e227a5d cmds/dag.stat: remove printf debug
Oops lol.
2023-06-06 16:22:08 +02:00
Arthur Gavazza
726eabead4
feat: add deduplication ratio to 'ipfs dag stat' (#9787) 2023-06-06 15:17:45 +02:00
Jorropo
8114573933 core/commands/pin: fix incorrect pointer type in encoder 2023-06-05 11:49:13 +02:00
Jorropo
a2c66abc52 pinning: fix pin listings 2023-06-02 18:55:36 +02:00
Jorropo
9b63ab6da6 client/rpc: bring up to speed with streaming pins 2023-06-02 16:55:51 +02:00
Nikhilesh Susarla
6eef0b4eef
fix: 'ipfs routing findpeer' explicitly fails when searching for self (#9903) 2023-06-01 12:19:29 +02:00
imthe1
67e1a173fc feat: adds secp256k1 keypair type to key gen command, adds test cases 2023-05-31 19:05:05 +02:00
Laurent Senta
61f8c7301a
refactor: use reusable IPNS ValidateWithPeerID (#9867)
Co-authored-by: Henrique Dias <hacdias@gmail.com>
2023-05-10 11:49:31 +00:00
Michael Muré
a197125b8f
pin: follow async pinner changes
See https://github.com/ipfs/boxo/pull/290

This PR follow the changes in the Pinner to make listing recursive and direct pins asynchronous, which in turns allow pin/ls to build and emit results without having to wait anything, or accumulate too much in memory.

Note: there is a tradeoff for pin/ls?type=all:
- keep the recursive pins in memory (which I chose)
- ask the pinner twice for the recursive pins, and limit memory usage

Also, follow the changes in the GC with similar benefit of not having to wait the full pin list. Add a test.
Also, follow the changes in pin.Verify.
2023-05-05 17:51:35 +02:00
Laurent Senta
a6f446a4ba
test: deterministic ipns fixtures during sharness gateway tests (#9667) 2023-05-03 15:01:13 +02:00
Arthur Gavazza
e89cce63fd
feat: add identify option to swarm peers command
Fixes #9578
2023-03-30 04:34:57 +00:00
Jorropo
3ab1086f71 chore: migrate go-libipfs to boxo
Resolves #9677, #9676, #9675, #9736
2023-03-28 22:05:25 -04:00
Jorropo
bb020ea1ef fix: deadlock while racing ipfs dag import and ipfs repo gc
This fixes a deadlock introduced in 1457b4fd4a.

We can't use the coreapi here because it will try to take the PinLock (RLock) again, so revert this small part of 1457b4fd4a.

This used cause a deadlock when concurrently running `ipfs dag import` concurrently with the GC.

The bug is that `ipfs dag import` takes an RLock with the PinLock.
*the cars are imported, leaving a wide window of time*
Then GC Takes a Lock on that same RWMutex while taking the GC Lock (it  blocks because it waits for the RLock to be released).
Then the car imports are finished and `ipfs dag import` tries to aqcuire the PinLock (doing an RLock) again in `Api().Pin`.

However at this point the RWMutex is starved, the runtime put a fence in front of RLocks if a Lock has been waiting for too lock (else you could have an endless stream of RLock / RUnlock forever delaying a Lock to ever go through).

The issue is that `ipfs dag import`'s original RLock which is blocking everyone will be released once it returns, which only happens when `Api().Pin` completes.

So we have a deadlock (ABA kind ?), because `ipfs dag import` waits on the GC Lock, which waits on `ipfs dag import`.

Calling the Pinner directly does not acquire the PinLock again, and thus does not have this issue.
2023-03-26 05:40:18 +02:00
Michael Muré
1457b4fd4a
feat: improve dag/import (#9721)
- don't bypass the CoreApi
- don't use a goroutine and return channel for `importWorker`, when what's happening is really just a synchronous call
- only `PinLock()` when we are going to pin
- use `cid.Set` instead of an explicit map
- fail the request early if any pinning fail, no need to try to pin more if the request failed already
2023-03-22 03:06:40 +01:00
Gus Eggert
23b5abfb7a feat: add heap allocs to 'ipfs diag profile' 2023-03-17 10:09:33 -04:00
Jorropo
1f5763f787 chore: deprecate the pubsub api
Fixes #9717
2023-03-15 04:42:02 +01:00
Laurent Senta
877d091d75 fix: --verify forgets the verified key 2023-03-13 09:54:10 -04:00
Jorropo
7986196414 feat: Reduce RM code footprint
Co-Authored-By: Antonio Navarro Perez <antnavper@gmail.com>
2023-03-06 12:46:58 +01:00
Henrique Dias
1794649bf2
feat(gateway): error handling improvements (500, 502, 504) (#9660)
* fix(gateway): return 500 for all /ip[nf]s/id failures
* fix: replace deprecated structs
* chore: bump go-libipfs to version from main
2023-02-28 02:21:50 +01:00
Jorropo
0ff406170d fix: update rcmgr for go-libp2p v0.25 2023-02-14 22:19:46 +01:00
Marten Seemann
a00f5cae23 chore: update go-libp2p to v0.25.1 2023-02-14 22:19:46 +01:00
Henrique Dias
fb7f7b15b3
fix: restore wire format for /api/v0/routing/get|put (#9639)
Closes #9638
2023-02-10 02:41:45 +01:00
Jorropo
b3c98bb085 chore: bump go-libipfs remove go-bitswap 2023-01-27 23:07:01 +01:00
Henrique Dias
a3c70a11e6
feat(gateway): IPNS record response format (IPIP-351) (#9399)
* feat(gateway): IPNS record response format
* docs(rpc): mark as experimental: routing provide, get, put

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2023-01-27 04:46:50 +01:00
Henrique Dias
94e7f79805
fix(ipns): honour --ttl flag in 'ipfs name publish' (#9471)
* fix: honour --ttl flag in 'ipfs name publish'
* docs(cli): ipfs name inspect --help

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2023-01-27 02:33:13 +01:00
Jorropo
f20c980f2d chore: bump go-libipfs to replace go-block-format
Includes changes from:
- https://github.com/ipfs/go-block-format/pull/37
- https://github.com/ipfs/go-libipfs/pull/58
2023-01-26 16:55:48 +01:00
Henrique Dias
255e64e49e
chore: migrate from go-ipfs-files to go-libipfs/files (#9535) 2023-01-13 14:27:03 +01:00
Steve Loeppky
01e0bfa359
docs: libp2p resource management (#9468)
Co-authored-by: Antonio Navarro Perez <antnavper@gmail.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-12-08 16:18:04 +01:00
Antonio Navarro Perez
d16e63a23e Fix: Resource Manager: Filter stats correctly by %
Signed-off-by: Antonio Navarro Perez <antnavper@gmail.com>
2022-12-07 18:05:15 +01:00
Gus Eggert
b9a4d4592d chore: migrate ipfs/tar-utils to libipfs 2022-12-05 21:28:30 -05:00
Jorropo
807b98537d Revert "fix: ensure hasher is registered when using a hashing function"
This has been superseeded by 7d0ea08289.

This reverts commit 773c246232.
2022-12-05 15:03:16 +01:00
Rod Vagg
cb1ba70a9b
fix: handle new ProtoNode errors 2022-12-02 10:16:10 +11:00
Antonio Navarro Perez
254d81a9d5
feat: Improve ResourceManager UX (#9338)
This PR adds several new functionalities to make easier the usage of ResourceManager:

- Now resource manager logs when resources are exceeded are on ERROR instead of warning.
- The resources exceeded error now shows what kind of limit was reached and the scope.
- When there was no limit exceeded, we print a message for the user saying that limits are not exceeded anymore.
- Added `swarm limit all` command to show all set limits with the same format as `swarm stats all`
- Added `min-used-limit-perc` option to `swarm stats all` to only show stats that are above a specific percentage
- Simplify a lot default values.
- **Enable ResourceManager by default.**

Output example:
```
2022-11-09T10:51:40.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:51:50.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 483095 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:51:50.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:52:00.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 455294 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:00.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:52:10.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 471384 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:10.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:52:20.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 8 times with error "peer:12D3KooWKqcaBtcmZKLKCCoDPBuA6AXGJMNrLQUPPMsA5Q6D1eG6: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:20.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 192 times with error "peer:12D3KooWPjetWPGQUih9LZTGHdyAM9fKaXtUxDyBhA93E3JAWCXj: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:20.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 469746 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:20.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:52:30.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 484137 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:30.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 29 times with error "peer:12D3KooWPjetWPGQUih9LZTGHdyAM9fKaXtUxDyBhA93E3JAWCXj: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:30.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:52:40.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 468843 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:40.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:52:50.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 366638 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:52:50.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:53:00.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 405526 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:53:00.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 107 times with error "peer:12D3KooWQZQCwevTDGhkE9iGYk5sBzWRDUSX68oyrcfM9tXyrs2Q: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:53:00.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:53:10.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 336923 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:53:10.566+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:53:20.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:55      Resource limits were exceeded 71 times with error "transient: cannot reserve inbound stream: resource limit exceeded".
2022-11-09T10:53:20.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:59      Consider inspecting logs and raising the resource manager limits. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#swarmresourcemgr
2022-11-09T10:53:30.565+0100    ERROR   resourcemanager libp2p/rcmgr_logging.go:64      Resrouce limits are no longer being exceeded.

```
## Validation tests

- Accelerated DHT client runs with no errors when ResourceManager is active. No problems were observed.
- Running an attack with 200 connections and 1M streams using yamux protocol. Node was usable during the attack. With ResourceManager deactivated, the node was killed by the OS because of the amount of memory consumed.
	- Actions done when the attack was active:
		- Add files 
		- Force a reprovide
		- Use the gateway to resolve an IPNS address.

It closes #9001 
It closes #9351
It closes #9322
2022-11-10 12:25:57 +01:00
Russell Dempsey
4bebe2b667
docs: note log tail is broken (#9383) 2022-11-10 00:20:53 +01:00
Jorropo
3574caede5 fix: error when using huge json limit file
This error nicely instead of ooming when trying to use a json file so big it would oom.
2022-11-08 22:28:14 +01:00