-
Notifications
You must be signed in to change notification settings - Fork 973
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RFC][Build] extra plugins and sourcing functionality in OSD that is not available in non-min artifact OpenSearch Core #7081
Comments
Hi @kavilla, I have a few questions:
Does this mean run |
build, develop, test, and release plugin outside of osd required significant effort and full knowledge, that will not only increase learning curve for new contributor and increasing the workload to the plugin owner for each release. we should adopt more core plugin into osd, so developer could leverage what we have built the infra/automation for them, and they could focus on innovation less on process. Only two cases i feel it is worth to make a separate module/package case 1: plugin/module is reusable component. could contribute to other open source project. in all other case(or by default), we should adopt more, rather than push pluign/code to separate repository. |
I agree with this statement, but innovation also does not mean carelessly dumping code into a repo.
I agree with this only if the added functionality makes sense. The specific case being talked about here is functionality that does not work work in isolation and need a corresponding backend that isnt the OS engine to function. The plugin in question here cannot work with the OS engine core codebase. That being said, since OSD consumes the OS min distribution and if we take its API as the contract for a minimum product backend for a feature to work, I can be convinced that this should be a core plugin. And I want us to consider how we will treat similar contributions to query languages or other features specific to other non AWS platforms. Right now the core is unbiased and is an extensible abstraction. This plugin introduces bias |
I would also want to draw parallels from a similar conversation in OS Core where something similar was proposed: |
It would be plugins housed in this repo that can be configured to not be built and not be ran in a single flag. The "extra" being used as the name as we haven't cleaned out "extra" from when we forked:
Yes and no, third party plugins are plugins not build in OSD core
Sorry about that more like all plugins with src/plugins and extra plugins sourced in here. Any third party plugin will not be built still. |
@kavilla, you noted:
All of these essentially boil down to:
@kavilla, you also mentioned:
Centralizing foundational code introduces inflexibility and runs against the extensibility the plugin ecosystem of OSD is trying to provide. A centralized codebase for non-core functionality will make it more challenging to evolve in response to new use-cases and requirements. This can easily veer into a monolithic architecture where version decoupling would be impossible. Building on top of the existing plugin ecosystem and raising awareness about the @seraphjiang, you wrote:
That initially sounded reasonable but the actual process of setting up a development environment for plugins is relatively straightforward and well-documented. Developing a plugin can be as simple as placing the code in a specific folder and following the prescribed structure and conventions. This approach, although primitive, is functional and effective for most use cases, especially for experienced developers familiar with the ecosystem. IMO, the best way to streamline and enhance the plugin development experience, particularly for new contributors, is to have an SDK that provides standardized tooling, utilities, and a more structured development workflow; this reduces the learning curve and promotes consistency across different plugins. OSD has its legitimate reasons to not prioritize the creation of the SDK for plugins and while that is a better solution in the long run, the current approach should not be dismissed as overly burdensome or lacking in documentation, as it serves its purpose adequately. Furthermore, the shared development environment already provides plugins with building, testing, and releasing tools out of the box. @seraphjiang, you also mentioned:
I touched on this in my response to Rocky. Adopting a centralized approach to OSD plugins could potentially lead to an overly monolithic architecture, hindering the flexibility and innovation that a decentralized plugin ecosystem fosters. An OSD core that imposes architectural decisions and constraints will limit the freedom and creativity of plugin developers. @kavilla, while responding to Yulong, you said:
You and Yolong almost touched upon a crucial challenge with the OSD ecosystem: the discoverability of plugins, both developed inside and outside the OpenSearch repositories. Currently, OSD lacks a centralized mechanism to identify and showcase plugins, leading to a significant gap in awareness and accessibility. This prevents users from discovering potentially transformative functionalities offered by plugins, limiting their ability to leverage innovative solutions. Simultaneously, it hinders plugin developers from effectively promoting and sharing their groundbreaking innovations with the broader community, diminishing incentives for continuous collaboration and progress. A marketplace for plugins with one-click install capability and dependency management will be an answer to many prayers. |
@AMoo-Miki build and generate plugin doesn't straitforward doesn't mean effort is less. also see my recommendation for criteria to determine case 1: plugin/module is reusable component. could contribute to other open source project. to simplify the discussion with real example. if we want to push to create https://github.com/kavilla/queryEnhancements, i'm not seeing strong justification. |
Based on the thread here I think we agree that we dont want a 3rd place for plugins to exist. I think i agree with @seraphjiang 's statement here about criteria but we need to make that criteria more explicit. Can we agree on something like this? Core Plugin CriteriaA plugin should be considered core if it meets ALL of these criteria:
External Plugin CriteriaA plugin should be considered external if it meets ANY of these criteria:
Decision Process
My main concern here is to keep the minimal experience small while moving most of the larger features out of core. Similar to how many linux distributions that have a min and a full experience. |
@ashwin-pc, even though I would have liked a more rigid and aggressive criteria for core plugins, I think this is a good start / compromise. |
Glossary
Problem
Historically, the inclusion of features within the OSD repository has been guided by whether the minimal distribution of OpenSearch offers those features without necessitating a third-party plugin. If not, such features should be available through an OSD third-party plugin that isn't an internal one.
This guideline aimed to preserve the integrity of default experiences for projects and developers forking from OSD, ensuring seamless operations in their instances.
This approach has generally been effective, facilitating:
However, this guideline has introduced several challenges:
Proposed Solution
The reintroduction of extras plugins (and possibly packages) to OSD is proposed. This concept has never been entirely phased out from the repository [example]
The proposal includes:
Building all plugins by default, including those requiring non-minimal OpenSearch functionalities
Serving all plugins by default in distribution processes, leveraging existing OSD core logic
Excluding extra plugins by default in development mode
Introducing a flag to exclude extra plugins from the build process, catering to partners preferring a minimal distribution
Offering a flag to prevent serving extra plugins in distributions, allowing partners to limit access
Providing a flag to enable all extra plugins in development mode
While the specifics of these flags and default settings are open for discussion, the overarching goal is to facilitate access to foundational logic not present in the minimal distribution but utilized by multiple plugins, benefiting partners and developers alike.
This approach also aims to centralize foundational logic, ensuring application stability through comprehensive linting and automation, thereby preventing potential issues and bad practices from downstream plugins.
Related PR adding some of this solution: #7080
Other info
This is targeting https://github.com/kavilla/queryEnhancements which registers PPL and SQL languages to the data plugin
The text was updated successfully, but these errors were encountered: