Comments (3)
For the first part, I propose to transform the PluginPack into something with the following interface:
// All plugins will have to derive from this class. The implementation has to
// ensure that calls to all methods are thread-safe
class Plugin {
public:
enum class Type {
PLUGIN_COLLECTION = 0,
CONFIG_SOURCE = 1,
STATS_PUBLISHER = 2,
TRACE_LOGGER = 3,
...
};
// Specifies the type this plugin belongs to.
virtual Type type() const = 0;
// Returns the identifier for this plugin. This can be used to:
// 1) load multiple plugins of the same type and pick which one to use
// via configuration / settings, and
// 2) have per-plugin configuration.
// Identifiers should be unique for all plugins loaded.
virtual std::string identifier() const = 0;
// A string that we can log somewhere when using this plugin.
virtual std::string displayName() const = 0;
// Versioning information
virtual std::string version() const = 0;
// If per-plugin configuration is present in the config, it would be fed to the
// plugin immediately after initialization and on every config update.
void onConfigUpdated(folly::dynamic plugin_configuration) = 0;
};
// A helper that would be returned by a `load_plugin()` function to ease loading several
// plugins at once from a single library
class PluginCollection : public Plugin {
public:
Type type() override {
return Type::PLUGIN_COLLECTION;
}
virtual std::vector<std::unique_ptr<Plugin>> getPlugins() = 0;
};
Then we'd have classes that derive from the Plugin
class to implement each of the plugin types - e.g. TraceLoggerPlugin
, ConfigSourcePlugin
, etc. Each implementation would then have to derive from these.
This is off the top of my head, so suggestions for improvement are welcome.
from logdevice.
Separated #56 and #57 out of this
from logdevice.
This is mostly done. I added documentation in 84fbb0a to explain how to write new plugins, and filed the follow-ups mentioned above for the remaining parts.
from logdevice.
Related Issues (20)
- Inconsistent column type for node_id in Sequencer and Nodes table HOT 3
- Settings abort-on-failed-check, abort-on-failed-catch and external-loglevel don't correctly subscribe to settings update HOT 1
- Tests failed in master due to some folly singletons being used without calling folly init
- Make DSCP reflection configurable in server settings HOT 1
- ModuleNotFoundError: No Module named 'libfb' HOT 1
- LogDevice build failing on Ubuntu bionic HOT 4
- logdevice/build_tools/fedora.deps file doesn't exist HOT 2
- With latest code, linking integration_test fail with SIGSEGV
- The log range specified must be positive 62-bit with start smaller or equal than end of range, supplied range is 0..200000 HOT 3
- Can not build on Ubuntu 19.10 HOT 3
- Will sequencer become a bottleneck for large size record with high throughput HOT 4
- Replication policy cross multiple cities with one special deferred? HOT 4
- Can not build on Ubuntu 18.04.4 HOT 2
- Conditional add question HOT 2
- Run quickstart through docker image failed HOT 1
- I want to integrate Kubernetes with VirtualLog. HOT 1
- Docker build fbthrift compilation thrift/lib/py3/test/gen-py3/testing/clients.cpp failed
- Is this project no longer maintained? HOT 12
- [email protected]
- LogDevice cluster start error --- NOSEQUENCER and sequencer:[invalid NodeID]
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from logdevice.