1
0
mirror of https://github.com/ipfs/kubo.git synced 2025-08-06 19:44:01 +08:00

2292 Commits

Author SHA1 Message Date
889f73e90e Add 'ipfs repo migrate' command (#8428)
* Add 'ipfs repo migrate' command

This PR replaces #7658 that was originally contributed by zaibons, in order to move code into a branch and avoid some CI problem.

The command allows the user to run the repo migration without starting the daemon.

resolves #7471

* return non-ErrNeedMigration errors from fsrepo.Open()

Co-authored-by: Gus Eggert <gus@gus.dev>
2022-05-06 17:34:51 -04:00
9a84a4f06e pubsub multibase encoding (#8933)
* pubsub multibase encoding

Adds clarification for pubsub multibase encoding over HTTP RPC for issue https://github.com/ipfs/ipfs-docs/issues/1007

* Grammatical change

* Moved period
2022-05-06 08:49:15 -07:00
17bb829235 'pin rm' helptext: rewrite description as object is not removed from local storage (immediately) 2022-05-06 15:56:30 +02:00
afd11f1019 chore: fix linting errors (#8930) 2022-05-04 11:02:07 -04:00
1f37a1481b go fmt 2022-05-03 14:09:38 -04:00
4f7d4bcc05 docs: replace all git.io links with their actual URLs 2022-04-28 18:06:08 +02:00
6815293aac chore: mark 'log tail' experimental (#8912)
Ensuring people are aware the RPC API/CMD may change
Context: https://github.com/ipfs/go-ipfs/pull/8765#issuecomment-1109884874
2022-04-28 15:57:43 +02:00
74aff245d2 feat: persist limits to Swarm.ResourceMgr.Limits (#8901)
* feat: persist limit changes to config

This changes the "ipfs swarm limit" command so that when limit changes
are applied via the command line, they are persisted to the repo
config, so that they remain in effect when the daemon restarts.

Any existing limit.json can be dropped into the IPFS config easily
using something like:

cat ~/.ipfs/config | jq ".Swarm.ResourceMgr.Limits = $(cat limit.json)" | sponge ~/.ipfs/config

This also upgrades to Resource Manager v0.3.0, which exports the config
schema so that we don't have to maintain our own copy of it.

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-28 15:27:16 +02:00
6817fd4744 feat(cmds): allow to set the configuration file path 2022-04-22 13:03:28 -03:00
76ae33a9f3 chore: deprecate /api/v0/dns (#8893)
Closes #8607
2022-04-21 23:49:51 +02:00
7b5fe809f0 fix(cmds): CIDv1 and correct multicodecs in 'block put' and 'cid codecs' (#8568)
BREAKING CHANGES: 
- see https://github.com/ipfs/go-ipfs/pull/8568#issue-1063653194

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-21 18:19:40 +02:00
bb68a68525 feat: port collect-profiles.sh to 'ipfs diag profile' (#8786)
* feat: add block profiling to collect-profiles.sh

* feat: add more profiles to 'ipfs diag profile'

This adds mutex and block profiles, and brings the command up-to-par
with 'collect-profiles.sh', so that we can remove it.

Profiles are also now collected concurrently, which improves the
runtime from (profile_time * num_profiles) to just (profile_time).

Note that this has a backwards-incompatible change, removing
--cpu-profile-time in favor of the more general --profile-time, which
covers all sampling profiles.

* docs(cli): ipfs diag profile

* add CLI flag to select specific diag collectors

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-12 11:58:03 -04:00
514411bedb feat: opt-in Swarm.ResourceMgr (go-libp2p v0.18) (#8680)
* update go-libp2p to v0.18.0

* initialize the resource manager

* add resource manager stats/limit commands

* load limit file when building resource manager

* log absent limit file

* write rcmgr to file when IPFS_DEBUG_RCMGR is set

* fix: mark swarm limit|stats as experimental

* feat(cfg): opt-in Swarm.ResourceMgr

This ensures we can safely test the resource manager without impacting
default behavior.

- Resource manager is disabled by default
    - Default for Swarm.ResourceMgr.Enabled is false for now
- Swarm.ResourceMgr.Limits allows user to tweak limits per specific
  scope in a way that is persisted across restarts
- 'ipfs swarm limit system' outputs human-readable json
- 'ipfs swarm limit system new-limits.json' sets new runtime limits
  (but does not change Swarm.ResourceMgr.Limits in the config)

Conventions to make libp2p devs life easier:
- 'IPFS_RCMGR=1 ipfs daemon' overrides the config and enables resource manager
- 'limit.json' overrides implicit defaults from libp2p (if present)

* docs(config): small tweaks

* fix: skip libp2p.ResourceManager if disabled

This ensures 'ipfs swarm limit|stats' work only when enabled.

* fix: use NullResourceManager when disabled

This reverts commit b19f7c9eca4cee4187f8cba3389dc2c930258512.
after clarification feedback from
https://github.com/ipfs/go-ipfs/pull/8680#discussion_r841680182

* style: rename IPFS_RCMGR to LIBP2P_RCMGR

preexisting libp2p toggles use LIBP2P_ prefix

* test: Swarm.ResourceMgr

* fix: location of opt-in limit.json and rcmgr.json.gz

Places these files inside of IPFS_PATH

* Update docs/config.md

* feat: expose rcmgr metrics when enabled (#8785)

* add metrics for the resource manager
* export protocol and service name in Prometheus metrics
* fix: expose rcmgr metrics only when enabled

Co-authored-by: Marcin Rataj <lidel@lidel.org>

* refactor: rcmgr_metrics.go

* refactor: rcmgr_defaults.go

This file defines implicit limit defaults used when Swarm.ResourceMgr.Enabled

We keep vendored copy to ensure go-ipfs is not impacted when go-libp2p
decides to change defaults in any of the future releases.

* refactor: adjustedDefaultLimits

Cleans up the way we initialize defaults and adds a fix for case
when connection manager runs with high limits.

It also hides `Swarm.ResourceMgr.Limits` until we have a better
understanding what syntax makes sense.

* chore: cleanup after a review

* fix: restore go-ipld-prime v0.14.2

* fix: restore go-ds-flatfs v0.5.1

Co-authored-by: Lucas Molas <schomatis@gmail.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-07 21:06:35 -04:00
7871a0beb7 feat(cmds): add support for CAR v2 imports (#8854)
* feat: add support for carv2 import
* update to multicodec 0.4.0
* add sharness test for carv2

Co-authored-by: Keenan Nemetz <keenan.nemetz@gmail.com>
2022-04-07 04:33:13 +02:00
5ae47522cc chore: deprecate tar commands (#8849)
Closes #7951
2022-04-06 02:06:17 +02:00
f72110c2d8 fix: use error instead of strings as error in blockstoreutil/remove 2022-04-02 05:07:51 +02:00
d92887086f fix(core/commands): do not cache config (#8824) 2022-03-27 08:11:45 -04:00
a61c53f87f feat(cmds): document deprecated RPC API commands (#8802)
* feat(cmds): add deprecated and experimental status

Added programmatic state annotation introduced in
https://github.com/ipfs/go-ipfs-cmds/pull/225
for already deprecated / experimental commands.

* chore: go-ipfs-cmds v0.7.0

Co-authored-by: Lucas Molas <schomatis@gmail.com>
2022-03-22 20:46:32 +01:00
09aed2d63b Merge pull request #8757 from ipfs/feat/err-not-found
Bubble ErrNotFound improvements.

The is a really nice UX improvement because it know tell you which ipld block is missing instead of a generic "not found".
2022-03-18 00:42:40 +01:00
5e1b2248c5 feat: add full goroutine stack dump (#8790) 2022-03-16 09:42:22 -04:00
04e7e9502e feat(cmds): extend block size check for dag|block put (#8751)
* feat(cmds): extend block size check for dag|block put
* feat(cmds): block size check for dag import
* style: dag-pb → UnixFS, 1MB → 1MiB

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-03-11 23:23:11 +01:00
199659ab77 fix(cmds): option for progress bar in cat/get (#8686)
* fix(cmds): option for progress bar in cat/get

* defer bar.Finish()
2022-03-11 14:25:46 -05:00
8d549f03f3 fix: rewrite dependencies over the go-ipfs-config package 2022-03-04 09:45:16 +01:00
7bb3bfbc33 Bubble ErrNotFound improvements 2022-03-02 18:29:29 +01:00
3ea5631f9a fix(cmds/keystore): do not allow to import keys we don't generate (#8733) 2022-02-18 23:42:40 +01:00
bfa9d3db99 feat(cmd): add silent option for repo gc (#7147)
* feat(cmd): add silent option repo gc command

closes #7129

* test(cmd): add test case for silent option for command repo gc
* fix: no emit on server with --silent

This removes unnecessary send to the client that does not care

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-02-18 22:29:32 +01:00
898065e09c chore(cmds): encapsulate ipfs rm logic in another function (#8574) 2022-02-15 17:30:47 -05:00
e93d6fbfb1 feat: warn user when 'pin remote add' while offline (#8621)
* feat: add warning message when the local node is offline for remote pinning

* feat: check is node is online

* feat: add test in t0700-remotepin.sh

* feat: use grep and fix the test

* fix: print to stdout only when --enc=text

This ensures we don't break JSON produced by --enc=json

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-02-15 17:19:53 -05:00
a494f48a9d feat(cmds): ipfs id: support --offline option (#8626)
* feat(cmds): ipfs id: add offline option
* docs: clarify why 'ipfs id <peer>' in offline mode

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-02-10 20:42:32 +01:00
fe788cae98 feat(cmds): add cleartext PEM/PKCS8 for key import/export (#8616)
* feat(cmds): add PEM/PKCS8 for key import/export

Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Gus Eggert <gus@gus.dev>
2022-02-10 10:45:02 -05:00
440394682a docs: fix typo 2022-01-14 11:36:03 -05:00
7f27dbfd15 feat: switch to raw multihashes for blocks
Part of: https://github.com/ipfs/go-ipfs/issues/6815
2021-12-02 09:41:37 -05:00
a43e506d7f fix: multibase in pubsub http rpc (#8183)
* multibase encoding on pubsub
* emit multibase for json clients
* refactor(pubsub): base64url for all URL args

This makes it easier to reason about.
Also added better helptext to each command explaining how the binary
data is encoded on the wire, and how to process it in userland.

* refactor: remove ndpayload and lenpayload

Those output formats are undocumented and seem to be only used in tests.
This change removes their implementation and replaces it with error
message to use JSON instead.

I also refactored tests to test the --enc=json response format instead
of imaginary one, making tests more useful as they also act as
regression tests for HTTP RPC.

* test(pubsub): go-ipfs-api

Testing against compatible version from
https://github.com/ipfs/go-ipfs-api/pull/255

* refactor: safeTextListEncoder

Making it clear what it does and why

* refactor(pubsub): unify peerids

This ensures `ipfs pubsub sub` returns the same peerids in the `From`
field as `ipfs pubsub peers`.

libp2p already uses base encoding, no need to double wrap or use custom
multibase.

* test(pubsub): go-ipfs-http-client

* refactor(pubsub): make pub command read from a file

We want to send payload in the body as multipart so users can use
existing tools like curl for publishing arbitrary bytes to a topic.

StringArg was created for "one message per line" use case, and if data
has `\n` or `\r\n` byte sequences, it will cause payload to be split. It
is not possible to undo this, because mentioned sequences are lost, so
we are not able to tell if it was `\n` or `\r\n`

We already avoid this problem in `block put` and `dht put` by reading
payload via FileArg which does not mangle binary data and send it as-is.
It feel like `pubsub pub` should be using it in the first place anyway,
so this commit replaces StringArg with FileArg.

This also closes https://github.com/ipfs/go-ipfs/issues/8454
and makes rpc in go-ipfs easier to code against.

* test(pubsub): publishing with line breaks

Making sure we don't see regressions in the future.
Ref. https://github.com/ipfs/go-ipfs/issues/7939

* chore: disable pubsub interop for now

See
344f692d8c

* test: t0322-pubsub-http-rpc.sh

- Adds HTTP RPC regression test that ensures topic is encoded as URL-safe
  multibase.
- Moves pubsub tests to live in unique range ./t032x

* fix(ci):  js-ipfs with  fixed pubsub wire format

uses js-ipfs from https://github.com/ipfs/js-ipfs/pull/3922 
until js-ipfs release can ship with dependency on go-ipfs 0.11.0-rc1

Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Adin Schmahmann <adin.schmahmann@gmail.com>
2021-11-29 23:06:54 +01:00
52c177ced9 feat: go-libp2p 0.16, UnixFS autosharding and go-datastore with contexts (#8563)
* plumb through go-datastore context changes

* update go-libp2p to v0.16.0
* use LIBP2P_TCP_REUSEPORT instead of IPFS_REUSEPORT
* use relay config
* making deprecation notice match the go-ipfs-config key
* docs(config): circuit relay v2
* docs(config): fix links and headers
* feat(config): Internal.Libp2pForceReachability

This switches to config that supports setting and reading
Internal.Libp2pForceReachability OptionalString flag

* use configuration option for static relays

* chore: go-ipfs-config v0.18.0

https://github.com/ipfs/go-ipfs-config/releases/tag/v0.18.0

* feat: circuit v1 migration prompt when Swarm.EnableRelayHop is set (#8559)
* exit when Swarm.EnableRelayHop is set
* docs: Experimental.ShardingEnabled migration

This ensures existing users of global sharding experiment get notified
that the flag no longer works + that autosharding happens automatically.

For people who NEED to keep the old behavior (eg. have no time to
migrate today) there is a note about restoring it with
`UnixFSShardingSizeThreshold`.

* chore: add dag-jose code to the cid command output

* add support for setting automatic unixfs sharding threshold from the config
* test: have tests use low cutoff for sharding to mimic old behavior
* test: change error message to match the current error
* test: Add automatic sharding/unsharding tests (#8547)
* test: refactored naming in the sharding sharness tests to make more sense

* ci: set interop test executor to convenience image for Go1.16 + Node
* ci: use interop master

Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Marten Seemann <martenseemann@gmail.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
Co-authored-by: Gus Eggert <gus@gus.dev>
Co-authored-by: Lucas Molas <schomatis@gmail.com>
2021-11-29 19:58:05 +01:00
0c2f9d5950 Fix typos (#8548) 2021-11-17 21:16:06 +01:00
f6223605e7 Add support for multiple files to ipfs files rm. 2021-11-12 12:07:58 -05:00
52a747763f docs: fix ipfs files cp examples (#8533) 2021-10-29 16:45:53 +02:00
9e8b6e5b50 chore: replace go-merkledag walk with go-ipld-prime traversal for dag export (#8506)
* chore: replace go-merkledag walk with go-ipld-prime traversal for dag export

This is "safe" now because we can limit duplicate block loads like
go-merkledag does and won't get trapped taking a long time for complex
DAGs. We can do this while we're using an exhaustive selector (like
ExploreAll here) but will need an alternative strategy when we go for
arbitrary selectors.
2021-10-26 14:07:31 -04:00
8836a62438 Merge pull request #8457 from ipfs/docs/raw-leaves-in-cidv1 2021-10-14 08:42:23 -07:00
545571c328 Apply suggestions from code review
Co-authored-by: Adin Schmahmann <adin.schmahmann@gmail.com>
2021-10-11 20:36:06 +02:00
485a5c291f fix(cli): object add-link: do not allow blocks over BS limit (#8414)
* fix(cli): object add-link: do not allow blocks over BS limit
* refactor: allow-big-block

- renamed override flag to --allow-big-block
- separate tests for default and override behavior

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2021-09-28 15:27:15 +02:00
56a2ae92dc change ipfs dag get flag name from format to output-codec 2021-09-27 16:15:49 -04:00
b83651b220 remove dag put option shortcuts 2021-09-27 14:39:03 -04:00
2920679056 change names of ipfs dag put flags to make changes clearer 2021-09-27 14:39:03 -04:00
d5ecec332f docs: ipfs.add: document raw-leaves
Closes #8396
2021-09-24 18:39:39 +02:00
0057199af4 feat: dag import --stats (#8237)
* feat: report block count on `dag import`
* fix: clean-up dag import message format
* Only print stats when --stats flag is passed

This applies to both text and json output encoding.

- Stats data is now contained within a Stats datastructure
- Stats are printed after root so that first line of output is the same as previously, even when stats are output using --stats

* fix sharness test

* Add PayloadBytesCount to stats

* Attempt to stabilize flaky tests

* Rename PayloadBytesCount to BlockBytesCount

* Correctly calculate size or imported dag

* Use RawSize of original block for import bytes calc

* test: dag import without --stats

basic regression tests for the default output (text and json)

Co-authored-by: gammazero <gammazero@users.noreply.github.com>
Co-authored-by: Marcin Rataj <lidel@lidel.org>
2021-09-23 16:23:57 +02:00
3a84352f18 feat(cli): add daemon option --agent-version-suffix (#8419)
* feat(cli): add daemon option --agent-version-suffix
* fix sharness test when commit is empty (release)
2021-09-21 20:31:08 +02:00
c89110920e feat: multibase transcode command (#8403)
* Add a transcoder command to multibase

In order to more easily facilitate the conversion
between multibase formats, include a transcode command
to avoid `multibase decode | multibase encode`

* Example code needed go mod tidy

Co-authored-by: gammazero <gammazero@users.noreply.github.com>
2021-09-21 20:19:40 +02:00
a651045c50 feature: 'ipfs swarm peering' command (#8147)
* feat: added swarm peering command supporting add, ls and rm

Co-authored-by: Steven Allen <steven@stebalien.com>
2021-09-15 07:46:16 -07:00
7db27bf83a feat: add 'ipfs multibase' commands (#8180)
* add multibase helper commands (encode, decode, list)

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2021-08-18 16:48:39 -04:00