5.X/8. Breaking Changes

v5.0-14. Plugin changes

drscg 2017. 10. 22. 13:15

The command bin/plugin has been renamed to bin/elasticsearch-plugin. The structure of the plugin ZIP archive has changed. All the plugin files must be contained in a top-level directory called elasticsearch. If you use the gradle build, this structure is automatically generated.

bin/plugin command는 bin/elasticsearch-plugin 으로 이름이 변경되었다. plugin ZIP archive의 구조가 변경되었다. 모든 plugin 파일은 elasticsearch 라는 최상위 directory에 있어야 한다. gradle build를 사용하면, 이 구조가 자동으로 생성된다.

Plugins isolationedit

isolated option has been removed. Each plugin will have its own classloader.

isolated option은 제거되었다. 각 plugin은 자신의 classloader를 가진다.

Site plugins removededit

Site plugins have been removed. Site plugins should be reimplemented as Kibana plugins.

site plugin이 제거되었다. site plugin은 kibana plugin으로 다시 구현되어야 한다.

Multicast plugin removededit

Multicast has been removed. Use unicast discovery, or one of the cloud discovery plugins.

multicast가 제거되었다. unicast discovery를 사용하거나 cloud discovery plugin을 사용하자.

Plugins with custom query implementationsedit

Plugins implementing custom queries need to implement the fromXContent(QueryParseContext)method in their QueryParser subclass rather than parse. This method will take care of parsing the query from XContent format into an intermediate query representation that can be streamed between the nodes in binary format, effectively the query object used in the java api. Also, the query builder needs to be registered as a NamedWriteable. This is all done by implementing the SearchPlugin interface and overriding the getQueries method. The query object can then transform itself into a lucene query through the new toQuery(QueryShardContext) method, which returns a lucene query to be executed on the data node.

사용자 정의 query를 구현하는 plugin은 parse 가 아닌 QueryParser subclass에서fromXContent(QueryParseContext) method를 구현해야 한다. 이 method는 XContent format에서, Java API에서 효과적으로 사용되는 query object인 binary forma에서 node간 streamming이 될 수 있는 중간 query 표현으로, query를 parsing한다. 또한 query builder는 NamedWriteable 로 등록되어야 한다. 이것은 모두 SearchPlugin interface를 구현하고 getQueries method를 override함으로써 이루어진다. 그런 다음 query object는, data node에서 실행될 lucene query를 반환하는, 새로운 toQuery(QueryShardContext) method를 통해 자체적으로 lucene query로 변환할 수 있다.

Similarly, plugins implementing custom score functions need to implement the fromXContent(QueryParseContext) method in their ScoreFunctionParser subclass rather than parse. This method will take care of parsing the function from XContent format into an intermediate function representation that can be streamed between the nodes in binary format, effectively the function object used in the java api. The function object can then transform itself into a lucene function through the new toFunction(QueryShardContext) method, which returns a lucene function to be executed on the data node.

유사하게, 사용자 정의 score function를 구현하는 plugin은 parse 가 아닌 ScoreFunctionParsersubclass에서 fromXContent(QueryParseContext) method를 구현해야 한다. 이 method는 XContentformat에서, Java API에서 효과적으로 사용되는 function object인 binary format에서 node간 streamming이 될 수 있는 중간 function 표현으로 function을 parsing한다. 그런 다음 function object는 새로운 toFunction(QueryShardContext) method를 통해 자체적으로 lucene function으로 변환할 수 있다. 이 method는 data node에서 실행될 lucene function을 반환한다.

Cloud AWS plugin changesedit

Cloud AWS plugin has been split in two plugins:

Cloud AWS plugin은 2개의 plugin으로 분리되었다.

Proxy settings for both plugins have been renamed:

두 plugin을 위한 proxy setting은 이름이 변경되었다.

  • from cloud.aws.proxy_host to cloud.aws.proxy.host
  • from cloud.aws.ec2.proxy_host to cloud.aws.ec2.proxy.host
  • from cloud.aws.s3.proxy_host to cloud.aws.s3.proxy.host
  • from cloud.aws.proxy_port to cloud.aws.proxy.port
  • from cloud.aws.ec2.proxy_port to cloud.aws.ec2.proxy.port
  • from cloud.aws.s3.proxy_port to cloud.aws.s3.proxy.port

Cloud Azure plugin changesedit

Cloud Azure plugin has been split in three plugins:

Cloud Azure plugin은 3개의 plugin으로 분리되었다.

If you were using the cloud-azure plugin for snapshot and restore, you had in elasticsearch.yml:

snapshot과 restore에 cloud-azure plugin을 사용하고 있다면, elasticsearch.yml 에 다음과 같은 설정이 있을 것이다.

cloud:
    azure:
        storage:
            account: your_azure_storage_account
            key: your_azure_storage_key

You need to give a unique id to the storage details now as you can define multiple storage accounts:

이제 여러 개의 storage account를 정의할 수 있으므로, storage 세부 정보에 unique id를 지정해야 한다.

cloud:
    azure:
        storage:
            my_account:
                account: your_azure_storage_account
                key: your_azure_storage_key

Cloud GCE plugin changesedit

Cloud GCE plugin has been renamed to Discovery GCE plugin.

Cloud GCE plugin은 Discovery GCE plugin으로 이름이 변경되었다.

Delete-By-Query plugin removededit

The Delete-By-Query plugin has been removed in favor of a new Delete By Query APIimplementation in core. It now supports throttling, retries and cancellation but no longer supports timeouts. Instead use the cancel API to cancel deletes that run too long.

Delete-By-Query plugin은 core에서 새로운 Delete By Query API 구현을 위해 제거되었다. 이제는 제한(throttling), 재시도(retry) 및 취소(cancel)를 지원하지만, 더 이상 timeout를 지원하지 않는다. 대신 cancel API를 사용하면, 너무 오래 실행되는 delete를 취소할 수 있다.

Mapper Attachments plugin deprecatededit

Mapper attachments has been deprecated. Users should use now the ingest-attachment plugin.

mapper attachment는 deprecate되었다. 이제 ingest-attachment plugin을 사용해야 한다.

Passing of Java System Propertiesedit

Previously, Java system properties could be passed to the plugin command by passing -D style arguments directly to the plugin script. This is no longer permitted and such system properties must be passed via ES_JAVA_OPTS.

이전에는, -D 스타일의 argument를 plugin script에 직접 전달하여, Java system property를 plugin command에 전달할 수 있었다. 이것은 더 이상 허용되지 않으며, 그러한 system property는 ES_JAVA_OPTS를 통해 전달되어야 한다.

Custom plugins pathedit

The ability to specify a custom plugins path via path.plugins has been removed.

path.plugins 를 통해 사용자 정의 plugin을 지정하는 기능이 제거되었다.

ScriptPluginedit

Plugins that register custom scripts should implement ScriptPlugin and remove their onModule(ScriptModule) implementation.

사용자 정의 script를 등록한 plugin은 ScriptPlugin 을 구현하고 onModule(ScriptModule) 구현을 제거해야 한다.

AnalysisPluginedit

Plugins that register custom analysis components should implement AnalysisPlugin and remove their onModule(AnalysisModule) implementation.

사용자 정의 analysis component을 등록한 plugin은 AnalysisPlugin 을 구현하고 onModule(AnalysisModule) 구현을 제거해야 한다.

MapperPluginedit

Plugins that register custom mappers should implement MapperPlugin and remove their onModule(IndicesModule) implementation.

사용자 정의 mapper를 등록한 plugin은 MapperPlugin 을 구현하고 onModule(IndicesModule) 구현을 제거해야 한다.

ActionPluginedit

Plugins that register custom actions should implement ActionPlugin and remove their onModule(ActionModule) implementation.

사용자 정의 action을 등록한 plugin은 ActionPlugin 을 구현하고 onModule(ActionModule) 구현을 제거해야 한다.

Plugins that register custom RestHandler`s should implement `ActionPlugin and remove their onModule(NetworkModule) implemnetation.

사용자 정의 RestHandler 을 등록한 plugin은 ActionPlugin 을 구현하고 onModule(NetworkModule) 구현을 제거해야 한다.

SearchPluginedit

Plugins that register custom search time behavior (QuerySuggesterScoreFunctionFetchSubPhaseHighlighter, etc) should implement SearchPlugin and remove their onModule(SearchModule)implementation.

사용자 정의 검색 시 동작((QuerySuggesterScoreFunctionFetchSubPhaseHighlighter 등)을 등록한 plugin은 SearchPlugin 을 구현하고 onModule(SearchModule) 구현을 제거해야 한다.

SearchParseElementedit

The SearchParseElement interface has been removed. Custom search request sections can only be provided under the ext element. Plugins can plug in custom parsers for those additional sections by providing a SearchPlugin.SearchExtSpec, which consists of a SearchExtParser implementation that can parse`XContent` into a SearchExtBuilder implementation. The parsing happens now in the coordinating node. The result of parsing is serialized to the data nodes through transport layer together with the rest of the search request and stored in the search context for later retrieval.

SearchParseElement interface가 제거되었다. 사용자 정의 search request section은 ext element 아래에만 제공될 수 있다. plugin은 XContent 를 SearchExtBuilder 구현으로 parsing할 수 있는 SearchExtParser 구현으로 구성된 SearchPlugin.SearchExtSpec 를 제공함으로써 추가 section을 위한 사용자 정의 parser에 plug in할 수 있다. parsing은 이제 coordinating node에서 발생한다. parsing의 결과는 나머지 search request과 함께 transport layer를 통해 data node에 직렬화되며, 이후 검색을 위해 search context에 저장된다.

Testing Custom Pluginsedit

ESIntegTestCase#pluginList has been removed. Use Arrays.asList instead. It isn’t needed now that all plugins require Java 1.8.

ESIntegTestCase#pluginList 는 제거되었다. 대신 Arrays.asList 를 사용하자. 이제 모든 plugin에 Java 1.8이 필요하지는 않다.

Mapper-Size pluginedit

The metadata field _size is not accessible in aggregations, scripts and when sorting for indices created in 2.x. If these features are needed in your application it is required to reindex the data with Elasticsearch 5.x.

metadata field _size 는 aggregation, script 및 2.x 에서 생성된 indices를 정렬할 때 access할 수 없다. 이러한 기능이 application에 필요하면, Elasticsearch 5.x 로 데이터를 다시 index해야 한다.


'5.X > 8. Breaking Changes' 카테고리의 다른 글

v5.0-12. Java API changes  (0) 2017.10.22
v5.0-13. Packaging  (0) 2017.10.22
v5.0-15. Filesystem related changes  (0) 2017.10.22
v5.0-16. Path to data on disk  (0) 2017.10.22
v5.0-17. Aggregation changes  (0) 2017.10.22