Commit Graph

119 Commits

Author SHA1 Message Date
Jorropo
f2a6c4f764 fix: correctly handle migration of configs
readPluginsConfig was copied from ReadMigrationConfig and switched
erroring fields to a bool so it can be omitemptied.
2023-06-27 16:32:06 +02:00
Michael Muré
99fdaa1b4d plugin: fix non-deterministic loading order
fix #9909
2023-05-31 18:28:38 +02:00
Jorropo
3ab1086f71 chore: migrate go-libipfs to boxo
Resolves #9677, #9676, #9675, #9736
2023-03-28 22:05:25 -04:00
Jorropo
196887cbe5 chore: bump go-libp2p v0.22.0 & go1.18&go1.19
Fixes: #9225
2022-09-09 17:09:38 +02:00
Jorropo
82fbb84384 fmt: applies go1.19 fmt 2022-09-08 18:34:06 +02:00
Gus Eggert
310dca55dd feat: add fx options plugin
This adds a plugin interface that lets the plugin modify the fx
options that are passed to fx when the app is initialized. This means
plugins can inject their own implementations of IPFS interfaces. This
enables granular customization of go-ipfs behavior by plugins, such
as:

- Bitswap with custom filters (e.g. for CID blocking) Custom interface

- implementations such as Pinner or DAGService

- Dynamic configuration of libp2p ...

One downside of this is that we're exposing the entire dependency
graph, init hooks, initialization, etc. to users, so this comes with a
caveat that we reserve the right to make breaking changes to the graph
structure and initialization logic (although this historically happens
rarely). If these things are changed, we should mention them in
release notes and changelogs though, since they could impact users of
this plugin interface.

I'm not particularly fond of DI frameworks (and neither are some of
the folks work on/near go-ipfs), but it seems unlikely that somebody
will rewrite the dependency wiring and lifecycle hooks of go-ipfs, and
add dynamic extension points, so this seems like a palatable
compromise.

There are also problems that we should clean up in how model the
go-ipfs app in fx, such as:

- We make extensive use of nested fx.Options, which fx itself
discourages because it "limits the user's ability to customize their
application". It should be easy to flatten these out into a single
[]fx.Option slice.

- We pass around a list of opaque libp2p opts, which makes it hard to
customize after-the-fact...we should consider naming each of these
opts and providing them to fx as proper dependencies, so that they can
be explicitly overridden.

- We call fx.Invoke() in some places with anonymous functions. We
should instead only pass exported functions to fx.Invoke(), so that
they have exported names, which would make it easier to remove/augment
the invocations that happen when the app is initialized.

These aren't blocking issues, they just make it harder and more
brittle to customize go-ipfs with this plugin.
2022-08-12 17:04:29 -04:00
Marcin Rataj
82467bc936 refactor: rename to kubo 2022-07-06 18:40:37 +02:00
Adin Schmahmann
1f37a1481b go fmt 2022-05-03 14:09:38 -04:00
Adin Schmahmann
d59730f51e
Update Go version to 1.17 (#8815)
* remove building the pre-bundled plugins as shared objects in makefile

* chore: update go version to minimum of 1.17
2022-04-15 14:32:00 -04:00
Gus Eggert
f855bfe6ef
feat: add basic gateway tracing (#8595)
* add deprecation warning when tracer plugins are loaded
* add response format attribute to span in gateway handler
* add note about tracing's experimental status in godoc
* add nil check for TTL when adding name span attrs
* add basic sharness test for integration with otel collector
* add nil check in UnixFSAPI.processLink
* test: sharness check all json objs for swarm span
* add env var docs to docs/environment-variables.md
* chore: pin the otel collector version
* add tracing spans per response type (#8841)
* docs: tracing with jaeger-ui

Co-authored-by: Marcin Rataj <lidel@lidel.org>
2022-04-04 19:24:05 +02:00
Laurent Senta
8d549f03f3 fix: rewrite dependencies over the go-ipfs-config package 2022-03-04 09:45:16 +01:00
Mohsin Zaidi
ecd2628a16
Integrate go-dag-jose plugin (#8569)
* feat(dag-jose): integrate `go-dag-jose` plugin
* test(dag-jose): sharness test for dag-jose plugin

Co-authored-by: Eric Myhre <hash@exultant.us>
2021-11-30 10:58:15 -08:00
Dimitris Apostolou
0c2f9d5950
Fix typos (#8548) 2021-11-17 21:16:06 +01:00
Steven Allen
852684914a fix: allow the levelds compression level to be unspecified
Otherwise, the user will get a confusing panic. And given that we
support "", we might as well support nil.
2021-10-15 11:44:54 -04:00
guseggert
ae09459e39 chore: add comments to peerlog plugin about being unsupported
and also about the ugly config semantics
2021-08-25 19:02:51 +00:00
guseggert
c3ac1b4282 test: add unit tests for peerlog config parsing 2021-08-25 19:02:51 +00:00
guseggert
a35dd2ea0d ci: preload peerlog plugin, disable by default
This preloads the peerlog plugin in the ipfs binary, but keeps it
disabled by default. To enabled it, set Enabled=true in its config.

The motivation is to simplify building and deploying gateways, and for
them to use binaries that are more similar to release bins.
2021-08-25 19:02:51 +00:00
Hannah Howard
f63a997c35
IPLD Prime In IPFS: Target Merge Branch (#7976)
* feat: switch to using go-ipld-prime for codecs, path resolution, and the `dag put/get` commands
* fix: `dag put/get` not roundtripping due to an extra new line being added (https://github.com/ipfs/go-ipfs/issues/3503)

More detailed information is in the CHANGELOG.md file. Very high level:
* IPLD codecs (and their plugins) must use go-ipld-prime
* Added support for the dag-json codec
* `dag get/put` use IPLD codec names from the multicodec table
* `dag get` defaults to dag-json output instead of json, but may output with other codecs
* Data model pathing can be achieved using the /ipld prefix. For example, you can use `/ipld/QmFoo/Links/0/Hash` to traverse through a DagPB node
* With `dag get/put` the DagPB field names have been changed to match the ones in the protobuf listed in the specification

Co-authored-by: hannahhoward <hannah@hannahhoward.net>
Co-authored-by: Daniel Martí <mvdan@mvdan.cc>
Co-authored-by: acruikshank <acruikshank@example.com>
Co-authored-by: Steven Allen <steven@stebalien.com>
Co-authored-by: Will Scott <will.scott@protocol.ai>
Co-authored-by: Will Scott <will@cypherpunk.email>
Co-authored-by: Rod Vagg <rod@vagg.org>
Co-authored-by: Adin Schmahmann <adin.schmahmann@gmail.com>
Co-authored-by: Eric Myhre <hash@exultant.us>
2021-08-17 13:32:49 -04:00
Gus Eggert
db2684f388 Merge branch 'master' into update-go-on-ci-guseggert 2021-08-02 14:42:32 -04:00
godcong
8c337160ac fix document error 2021-07-17 17:20:58 +08:00
Marten Seemann
a9dfe38c4b stop using deprecated Go flag -i 2021-05-15 17:27:52 -07:00
lanzafame
3d9821260a register quic opencensus metrics 2020-12-08 20:22:38 -05:00
Tomasz Zdybał
6b83bcd60e
Add missing plugin support on FreeBSD
Go plugins are supported on FreeBSD, but build tags in
`plugin/loader/load_*.go` enable IPFS plugins only on Linux and Darwin.
2020-10-12 00:54:23 +02:00
Steven Allen
c07b6fb1d1 feat: nice errors when failing to load plugins
partially fixes #7305
2020-08-08 22:53:18 -04:00
Steven Allen
0cc3d7a1f4 doc(plugin): document plugin config
fixes #7308
2020-05-12 21:56:02 -07:00
Steven Allen
a10a14fc06 feat(peerlog): add a bit of backoff logic 2020-04-27 20:26:39 -07:00
Steven Allen
bdbb79d30f fix: non-blocking peerlog logging
Avoid ever blocking new connections in the peer logger. Instead:

1. Send all new peers to a highly buffered channel.
2. Emit "dropped event" errors whenever we detect that we're dropping events and falling behind.
3. Don't log protocols, they're too large.
4. Don't log disconnects, we don't need them.
2020-04-27 19:15:25 -07:00
Dimitris Apostolou
1e437c7e97
Fix typos and cleanup 2020-04-20 22:00:01 +03:00
Steven Allen
255fefb2aa feat(peerlog): log protocols/versions 2020-03-10 09:33:11 -07:00
Oli Evans
aa3ca14197
feat: pass IPFS_PLUGINS to docker build
- allow IPFS_PLUGINS build-arg to be passed to docker build command
- remove annoying logging from peerlog plugin that appears multiple times in docker logs

usage:

  docker build --build-arg IPFS_PLUGINS="foo bar baz"

License: MIT
Signed-off-by: Oli Evans <oli@tableflip.io>
2020-02-13 14:39:58 +00:00
Steven Allen
15085fd1a3 fix(plugin): check log error 2020-02-10 13:09:00 -08:00
Steven Allen
58e52f351d feat: make it possible to enable plugins with a build env variable 2020-02-10 13:05:32 -08:00
Steven Allen
0ab1fa18da fix: disable preloading the logger plugin by default 2020-02-10 12:54:55 -08:00
Oli Evans
edfe9c5efd
feat: add peerlog plugin
adds a plugin to log just peerIDs for nodes we connect to, to allow us to see how many unique peers a node connects to over time.

It's set up a preloaded plugin, so it would be enabled by default. We may want to extract it to a seperate repo so we can make it an optional add on.

**Usage**

```console
$ GOLOG_FILE=~/peer.log IPFS_LOGGING_FMT=json ipfs daemon
```

**output**

```json
{"level":"info","ts":"2020-02-10T13:54:26.639Z","logger":"plugin/peerlog","caller":"peerlog/peerlog.go:51","msg":"connected","peer":"QmS2H72gdrekXJggGdE9SunXPntBqdkJdkXQJjuxcH8Cbt"}
{"level":"info","ts":"2020-02-10T13:54:59.095Z","logger":"plugin/peerlog","caller":"peerlog/peerlog.go:56","msg":"disconnected","peer":"QmS2H72gdrekXJggGdE9SunXPntBqdkJdkXQJjuxcH8Cbt"}
```

License: MIT
Signed-off-by: Oli Evans <oli@tableflip.io>
2020-02-10 14:05:16 +00:00
Oli Evans
d83e07ea90
wip: minimal plugin works
License: MIT
Signed-off-by: Oli Evans <oli@tableflip.io>
2020-02-10 11:29:51 +00:00
Steven Allen
a53d48059b fix: migrate from deprecated warning function 2020-01-28 21:20:21 -08:00
Steven Allen
4e4d5aa742 fix(badgerds): turn off sync writes by default
We already do this in the datastore _profile_, but we should do this in the
plugin as well. I'm pretty sure this makes absolutely no difference.
2020-01-09 09:55:39 +01:00
Michael Muré
2a9e5005da
plugins: introduce PluginDaemonInternal to directly interact with IpfsNode 2019-11-22 13:18:44 +01:00
Michael Muré
72026b896f plugins: support Close() for Tracer plugins as well
Most of the tracers available need to properly close to send
the remaining traces before the process exit.
2019-09-24 17:43:07 +09:00
Steven Allen
150b6dd1bd plugins: add support for plugin configs
For now, configs specified in `daemon --init-config` and `init CONFIG` are not
available. We should fix this eventually but isn't necessary for now (and
supporting this will be annoying).
2019-08-29 17:17:23 -07:00
Steven Allen
09d517746d feat: improve plugin preload logic
* Allow '*' meaning "load all plugins".
* Expose a Preload function that users can call.
2019-08-15 12:24:51 -07:00
Steven Allen
a9f7490149 feat(plugins): add a bit of documentation 2019-06-28 11:15:02 +02:00
Steven Allen
4badef2a14 feat: make it easier to load custom plugins
1. Allow loading from arbitrary and multiple directories.
2. Make it possible to directly load built-in plugins that _aren't_ in the
preload list.
2019-06-28 08:42:29 +02:00
Steven Allen
2a22eb6b90
Merge pull request #6438 from fd/fix/dameon/close-started-plugins
Close started plugins when one of them fails to start.
2019-06-12 09:39:05 -07:00
Simon Menke
42dc64d0bf Load plugins on darwin/macOS 2019-06-12 12:05:31 +02:00
Simon Menke
c444b1b945 Close started plugins when one of them fails to start. 2019-06-12 11:55:03 +02:00
Steven Allen
2b84b2ba13 chore: fix linter nits and tests that don't compile 2019-05-21 11:09:57 -07:00
Steven Allen
1f293eff1b chore: fix a bunch of issues caught by golangci-lint
Most of these are probably harmless but a few looked like they might actually be
bugs. Most of them are just faulty tests.

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2019-03-29 11:57:45 +00:00
Jakub Sztandera
42e191c017 gx: unrewrite
License: MIT
Signed-off-by: Jakub Sztandera <kubuxu@protonmail.ch>
2019-03-05 18:33:56 +01:00
Steven Allen
3fa1bfe1bc gx: update cmds and flatfs
fixes #6028, fixes crash when writing after closing on flatfs.

License: MIT
Signed-off-by: Steven Allen <steven@stebalien.com>
2019-03-01 12:17:49 -08:00