-
Notifications
You must be signed in to change notification settings - Fork 62
[META] Implement Extension Points #315
Copy link
Copy link
Open
Labels
MetaenhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed
Description
This issue is created to track Extension Point implementation.
- Unchecked boxes are not implemented at all.
- Checked boxes have at least a partial implementation complete which addresses the most important use cases; some may need additional work for completeness, which will be identified by a linked issue.
- Extension points highlighted in bold are a priority as they are required for plugin migration
Not all extension points will need to be implemented for Extensions, and will be removed from the list when that determination is made.
The general approach to implementation is:
- Create a
FooExtensioninterface corresponding to theFooPlugininterface, with the same default implementations. - During initialization, communicate which interfaces an Extension implements to OpenSearch
- Review existing functionality, usually implemented in the
Nodeclass that runs on OpenSearch bootstrap, where a module iterates over plugins implementing a particular interface and and "registers" the implemented extensions points, adding them to maps/lists, etc. - Determine whether functionality is primarily local to the extension (the easy case) or integral to OpenSearch (which requires serializing and deserializing via Writable interface) and implement appropriately. For example:
- NamedXContent is local to an extension. The static initializers from OpenSearch are created and no transport communication actually happens.
- RestHandlers are integrated with the OpenSearch RestController. The handled methods and paths must be communicated over transport to OpenSearch to be registered. This is done using Strings.
- Settings are integrated with OpenSearch. The settings must be turned into a Writeable object to be sent over transport, and re-created on the other end. This is done using the WriteableSetting class.
Extension Points applicable to all plugins are defined in the Plugin interface:
- getFeature
- createGuiceModules
- getGuiceServiceClasses
- additionalSettings
- createComponents (see comment)
- getNamedWriteables (partially implemented, needs to be merged with local extension point, see [Feature/extensions] Add getNamedWriteableRegistry() API for extensions #291)
- getNamedXContent
- [Feature] Add support for onIndexModule extension point #776
- getSettings (see [META] Update Hello World Extension to demonstrate custom settings #148)
- getSettingsFilter
- getSettingUpgraders
- getIndexTemplateMetadataUpgrader
- getExecutorBuilders
- getBootstrapChecks
- getRoles
- getAdditionalIndexSettingProviders
The following interfaces also implement custom functionality:
-
ActionPlugin
- getActions (Implemented locally on an Extension but not yet registered in ActionModule, see GetActions: Add support to dynamically register actions #107)
- getClientActions
- getActionFilters
- getRestHandlers
- getRestHeaders
- getTaskHeaders
- getRestHandlerWrapper
- mappingRequestValidators
- indicesAliasesRequestValidators
-
AnalysisPlugin
- getCharFilters
- getTokenFilters
- getTokenizers
- getAnalyzers
- getPreBuiltAnalyzerProviderFactories
- getPreConfiguredCharFilters
- getPreConfiguredTokenFilters
- getPreConfiguredTokenizers
- getHunspellDictionaries
-
CircuitBreakerPlugin
- getCircuitBreaker
- setCircuitBreaker
-
EnginePlugin
- getEngineFactory
- getCustomCodecServiceFactory
- getCustomTranslogDeletionPolicyFactory
-
ExtensiblePlugin
- loadExtensions
-
IndexStorePlugin
- getDirectoryFactories
- getRecoveryStateFactories
-
IngestPlugin
- getProcessors
-
MapperPlugin
- getMappers
- getMetadataMappers
- getFieldFilter
-
PersistentTaskPlugin
- getPersistentTasksExecutor
-
RepositoryPlugin
- getRepositories
- getInternalRepositories
-
ReloadablePlugin
- reload
-
ScriptPlugin
- getScriptEngine
- getContexts
-
SearchPlugin
- getScoreFunctions
- getSignificanceHeuristics
- getMovingAverageModels
- getFetchSubPhases
- getSearchExts
- getHighlighters
- getSuggesters
- getQueries
- getSorts
- getAggregations
- getAggregationExtentions
- getCompositeAggregations
- getPipelineAggregations
- getRescorers
- getQueryPhaseSearcher
- getIndexSearcherExecutorProvider
-
SystemIndexPlugin
- getSystemIndexDescriptors
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
MetaenhancementNew feature or requestNew feature or requesthelp wantedExtra attention is neededExtra attention is needed