Skip to content
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

Deprecate the 2 non-official elasticsearch libraries #31920

Merged

Conversation

Owen-CH-Leung
Copy link
Contributor

As part of the solution for #31256, it's necessary to first deprecate the 2 non-official elasticsearch libraries since both of them didn't support elasticsearch>=8. See their github repository for details:

https://github.com/preset-io/elasticsearch-dbapi/blob/master/requirements.txt#L9
https://github.com/elastic/elasticsearch-dsl-py/blob/main/setup.py#L32

Hence, this PR refactors the existing elasticsearch provider codebase to replace these 2 libraries with the official elasticsearch library. With this PR merged, we can then attempt to upgrade elasticsearch >= 8

Remove deprecated libraries in package import
@potiuk
Copy link
Member

potiuk commented Jun 15, 2023

Looks fantastic. Will open up for Elasticsearch 8 migration.

What we will also need is a note in the elasticsearch Changelog.rst and bumping the version there (and in provider.yaml) to 5.* - this is not a breaking change per-se, but it removes the dsl dependencies, that some users might rely on, so IMHO at the very least we need to raise MAJOR version of the elasticsearch provider and make people aware that if they want to to continue using the libraries they have to install them on their own.

I think this also means (see the change in the dockerfile test) that we need to make a similar note in the docs/docker-stack/changelog.rst. We are unlikely to cherry-pick that one to 2.6 (that would be too disruptive of a change to get rid of the dependencies in 2.6.3 in the image I think, so we can make it as an upcoming 2.7 change in the image.

@potiuk
Copy link
Member

potiuk commented Jun 15, 2023

cc: @eladkal

@eladkal
Copy link
Contributor

eladkal commented Jun 15, 2023

If we can split this PR int 2: core part and provider part that would be better as providers and core don't have same release cycle

for the provider part please add 5.0.0 entry in provider yaml

and add the following block to change log

5.0.0
.....

.. note::
  add message to users here

https://github.com/apache/airflow/blob/main/airflow/providers/elasticsearch/CHANGELOG.rst

@potiuk
Copy link
Member

potiuk commented Jun 15, 2023

If we can split this PR int 2: core part and provider part that would be better as providers and core don't have same release cycle

Oh yeah. I am curious how it will work out to split it. Might be a nice experiment to see if there are any problems caused.

@Owen-CH-Leung
Copy link
Contributor Author

If we can split this PR int 2: core part and provider part that would be better as providers and core don't have same release cycle

for the provider part please add 5.0.0 entry in provider yaml

and add the following block to change log

5.0.0
.....

.. note::
  add message to users here

https://github.com/apache/airflow/blob/main/airflow/providers/elasticsearch/CHANGELOG.rst

Added 5.0.0entry and a note in the changelog

"elasticsearch": ["elasticsearch", "es.elastic", "elasticsearch_dsl"],
"elasticsearch": ["elasticsearch"],
Copy link
Contributor

@eladkal eladkal Jun 15, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we split the PR I guess this is the only change that needs to be extracted to a followup PR? (not sure if doable though? in terms of getting green CI)

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we won't be able to merge this one without this change. (tests will fail).

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those are the kinds of problems I mentioned when "experimenting". It would have have to be extracted and merged before, effectively making dependencies between PRs. Easier for release manager, more difficult for contributor.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah so we need also to set milestone on this one for Airflow 2.7.0?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess.. No need because we aren't going to cherry-pick that one I guess. It would have been more complex if we actually decided to cherry-pick because we woud have to remember to cherry-pick both together (that's what you loose when you split such related PRs that they become non-cherry-pickable as single PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eladkal -> do you still want to split it ? And @Owen-CH-Leung - do you understand what we are asking for here?

I have personally a feeling, the need for splitting such PR will be difficult to explain to the contributors, because they have no context and might be a bit difficult to understand what we are asking for and why and how to do it.

I am - honestly - not sure if this is a better solution, taking into account that the only side-effect of having this ina a single PR is that the same change will appear in both provider and the core.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@potiuk pretty hard for me to understand as I don't have experience with releasing airflow & airflow provider package. My guess is : it would be better to have one PR for code change (including tests), and another PR for deprecating the dependencies ? So that means with the code-change PR being merged, we still have non-official elasticsearch library as dependency, just that we are not using them ?

More specifically , the changes to CHANGELOG.rst, test_prod_image.py, provider_dependencies.json, index,rst and etc...All go to another PR ?

I hope I'm getting it correctly but if not please explain to me. I can accommodate it.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@eladkal -> do you still want to split it

I'm OK with keeping it as is.

@Owen-CH-Leung Owen-CH-Leung force-pushed the deprecate_non_official_elasticsearch_library branch 2 times, most recently from 668daab to 5a4106d Compare June 22, 2023 03:23
@Owen-CH-Leung Owen-CH-Leung reopened this Jun 22, 2023
@potiuk
Copy link
Member

potiuk commented Jun 22, 2023

Can you rebase @Owen-CH-Leung ? We had some issues with building images that need rebase

@Owen-CH-Leung
Copy link
Contributor Author

@potiuk done

@Owen-CH-Leung
Copy link
Contributor Author

@potiuk looks like multiple CI jobs fail at the docker pull...maybe a rerun would fix them

@Owen-CH-Leung
Copy link
Contributor Author

Owen-CH-Leung commented Jun 23, 2023

@potiuk The CI job provider package wheel (verify) is still failing :

  fatal: bad revision 'apache-https-for-providers/main...providers-elasticsearch/4.5.1'
  Traceback (most recent call last):

Is it's due to the fact that 4.5.1 is not yet released ?

@potiuk
Copy link
Member

potiuk commented Jun 23, 2023

@potiuk The CI job provider package wheel (verify) is still failing :

  fatal: bad revision 'apache-https-for-providers/main...providers-elasticsearch/4.5.1'
  Traceback (most recent call last):

Is it's due to the fact that 4.5.1 is not yet released ?

Yeah. @eladkal works on it as we speak. We will re-run it after.

@potiuk potiuk merged commit b28c903 into apache:main Jun 23, 2023
62 checks passed
@potiuk
Copy link
Member

potiuk commented Jun 23, 2023

Woooho!

ferruzzi pushed a commit to aws-mwaa/upstream-to-airflow that referenced this pull request Jun 27, 2023

---------

Co-authored-by: eladkal <45845474+eladkal@users.noreply.github.com>
@pankajkoti
Copy link
Member

hi,

I am trying to use Elasticsearch remote logging with Airflow Breeze locally.

The following configuration used to work for me previously (apache-airflow-providers-elasticsearch==4.5.1) to fetch and render remote logs in the webserver UI task logs using the below setting in airflow.cfg

[logging]
remote_logging = True

[elasticsearch]
json_format = True
host = host.docker.internal:9200
host_field = host.name
offset_field = log.offset

However, on main (I think about to be released provider with this change), I am getting the below error when the webserver tries to fetch the logs from ES,

[2023-07-06T12:48:45.441+0000] {base.py:293} WARNING - POST http://host.docker.internal:9200/_all/_count [status:400 request:0.005s]
[2023-07-06T12:48:45.441+0000] {es_task_handler.py:329} ERROR - Could not get current log size with log_id: example_xcom-push-scheduled__2023-07-04T00:00:00+00:00--1-1
Traceback (most recent call last):
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 324, in es_read
    max_log_line = self.client.count(index=self.index_patterns, body=query)["count"]
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/utils.py", line 168, in _wrapped
    return func(*args, params=params, headers=headers, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/__init__.py", line 549, in count
    return self.transport.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 458, in perform_request
    raise e
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 419, in perform_request
    status, headers_response, data = connection.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/http_urllib3.py", line 277, in perform_request
    self._raise_error(response.status, raw_data)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/base.py", line 330, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(
elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'request does not support [sort]')
[2023-07-06T12:48:45.446+0000] {app.py:1744} ERROR - Exception on /api/v1/dags/example_xcom/dagRuns/scheduled__2023-07-04T00:00:00+00:00/taskInstances/push/logs/1 [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/decorator.py", line 68, in wrapper
    response = function(request)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/uri_parsing.py", line 149, in wrapper
    response = function(request)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/validation.py", line 399, in wrapper
    return function(request)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/response.py", line 113, in wrapper
    return _wrapper(request, response)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/response.py", line 90, in _wrapper
    self.operation.api.get_connexion_response(response, self.mimetype)
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/abstract.py", line 366, in get_connexion_response
    return cls._framework_to_connexion_response(response=response, mimetype=mimetype)
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/flask_api.py", line 165, in _framework_to_connexion_response
    body=response.get_data() if not response.direct_passthrough else None,
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 314, in get_data
    self._ensure_sequence()
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 376, in _ensure_sequence
    self.make_sequence()
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 391, in make_sequence
    self.response = list(self.iter_encoded())
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 50, in _iter_encoded
    for item in iterable:
  File "/opt/airflow/airflow/utils/log/log_reader.py", line 85, in read_log_stream
    logs, metadata = self.read_log_chunks(ti, current_try_number, metadata)
  File "/opt/airflow/airflow/utils/log/log_reader.py", line 62, in read_log_chunks
    logs, metadatas = self.log_handler.read(ti, try_number, metadata=metadata)
  File "/opt/airflow/airflow/utils/log/file_task_handler.py", line 412, in read
    log, out_metadata = self._read(task_instance, try_number_element, metadata)
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 238, in _read
    logs = self.es_read(log_id, offset, metadata)
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 330, in es_read
    raise e
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 324, in es_read
    max_log_line = self.client.count(index=self.index_patterns, body=query)["count"]
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/utils.py", line 168, in _wrapped
    return func(*args, params=params, headers=headers, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/__init__.py", line 549, in count
    return self.transport.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 458, in perform_request
    raise e
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 419, in perform_request
    status, headers_response, data = connection.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/http_urllib3.py", line 277, in perform_request
    self._raise_error(response.status, raw_data)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/base.py", line 330, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(
elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'request does not support [sort]')
172.20.0.1 - - [06/Jul/2023:12:48:45 +0000] "GET /api/v1/dags/example_xcom/dagRuns/scheduled__2023-07-04T00:00:00+00:00/taskInstances/push/logs/1?full_content=false HTTP/1.1" 500 1543 "http://localhost:28080/dags/example_xcom/grid?root=&tab=logs&dag_run_id=scheduled__2023-07-04T00%3A00%3A00%2B00%3A00&task_id=push" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
[2023-07-06T12:48:46.456+0000] {base.py:270} INFO - GET http://host.docker.internal:9200/ [status:200 request:0.013s]
[2023-07-06T12:48:46.458+0000] {base.py:293} WARNING - POST http://host.docker.internal:9200/_all/_count [status:400 request:0.002s]
[2023-07-06T12:48:46.459+0000] {es_task_handler.py:329} ERROR - Could not get current log size with log_id: example_xcom-push-scheduled__2023-07-04T00:00:00+00:00--1-1
Traceback (most recent call last):
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 324, in es_read
    max_log_line = self.client.count(index=self.index_patterns, body=query)["count"]
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/utils.py", line 168, in _wrapped
    return func(*args, params=params, headers=headers, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/__init__.py", line 549, in count
    return self.transport.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 458, in perform_request
    raise e
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 419, in perform_request
    status, headers_response, data = connection.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/http_urllib3.py", line 277, in perform_request
    self._raise_error(response.status, raw_data)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/base.py", line 330, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(
elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'request does not support [sort]')
[2023-07-06T12:48:46.464+0000] {app.py:1744} ERROR - Exception on /api/v1/dags/example_xcom/dagRuns/scheduled__2023-07-04T00:00:00+00:00/taskInstances/push/logs/1 [GET]
Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python3.8/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/decorator.py", line 68, in wrapper
    response = function(request)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/uri_parsing.py", line 149, in wrapper
    response = function(request)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/validation.py", line 399, in wrapper
    return function(request)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/response.py", line 113, in wrapper
    return _wrapper(request, response)
  File "/usr/local/lib/python3.8/site-packages/connexion/decorators/response.py", line 90, in _wrapper
    self.operation.api.get_connexion_response(response, self.mimetype)
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/abstract.py", line 366, in get_connexion_response
    return cls._framework_to_connexion_response(response=response, mimetype=mimetype)
  File "/usr/local/lib/python3.8/site-packages/connexion/apis/flask_api.py", line 165, in _framework_to_connexion_response
    body=response.get_data() if not response.direct_passthrough else None,
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 314, in get_data
    self._ensure_sequence()
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 376, in _ensure_sequence
    self.make_sequence()
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 391, in make_sequence
    self.response = list(self.iter_encoded())
  File "/usr/local/lib/python3.8/site-packages/werkzeug/wrappers/response.py", line 50, in _iter_encoded
    for item in iterable:
  File "/opt/airflow/airflow/utils/log/log_reader.py", line 85, in read_log_stream
    logs, metadata = self.read_log_chunks(ti, current_try_number, metadata)
  File "/opt/airflow/airflow/utils/log/log_reader.py", line 62, in read_log_chunks
    logs, metadatas = self.log_handler.read(ti, try_number, metadata=metadata)
  File "/opt/airflow/airflow/utils/log/file_task_handler.py", line 412, in read
    log, out_metadata = self._read(task_instance, try_number_element, metadata)
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 238, in _read
    logs = self.es_read(log_id, offset, metadata)
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 330, in es_read
    raise e
  File "/opt/airflow/airflow/providers/elasticsearch/log/es_task_handler.py", line 324, in es_read
    max_log_line = self.client.count(index=self.index_patterns, body=query)["count"]
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/utils.py", line 168, in _wrapped
    return func(*args, params=params, headers=headers, **kwargs)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/client/__init__.py", line 549, in count
    return self.transport.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 458, in perform_request
    raise e
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/transport.py", line 419, in perform_request
    status, headers_response, data = connection.perform_request(
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/http_urllib3.py", line 277, in perform_request
    self._raise_error(response.status, raw_data)
  File "/usr/local/lib/python3.8/site-packages/elasticsearch/connection/base.py", line 330, in _raise_error
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(
elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'request does not support [sort]')

Do I need to change my airflow.cfg to something else or would I be needing some extra steps to make the ES remote logging to work with the changes here?

I am also wondering why it is making a POST http://host.docker.internal:9200/_all/_count and giving 400 as response. Should it not be a GET request?

@Owen-CH-Leung
Copy link
Contributor Author

@pankajkoti Thanks for letting me know about your issue.

I had a look at the log and it seems that the http post request is being sent to the _count endpoint:

[2023-07-06T12:48:45.441+0000] {base.py:293} WARNING - POST http://host.docker.internal:9200/_all/_count [status:400 request:0.005s]

this endpoint is used to count the number of documents matching the given query, and the _count endpoint does not support sorting defined in the query below:

https://github.com/apache/airflow/blob/main/airflow/providers/elasticsearch/log/es_task_handler.py#L320

but - how come your webserver will trigger a post request ? And why a post request will trigger the es_read function (if it's posting something I guess it should trigger something like es_write ?

Would you be able to share your full airflow.cfg ? If you have an idea on how to reproduce this error also, that would be perfect

@pankajkoti
Copy link
Member

Hi @Owen-CH-Leung

The steps to reproduce this would be following:

  1. Clone the apache/airflow repo, pull the latest code on main
  2. Start airflow locally using breeze, I am using CeleryExecutor locally with postgres backend
    breeze start-airflow --executor CeleryExecutor --backend postgres
  3. You will get into a tmux session, and you can modify the following keys in the /root/airflow/airflow.cfg file
[logging]
remote_logging = True

[elasticsearch]
json_format = True
host = host.docker.internal:9200
host_field = host.name
offset_field = log.offset
  1. Restart all your components(especially webserver) in the tmux session, by hitting Ctrl+C and then starting each of the component in it's window pane viz., airflow scheduler, airflow celery worker, airflow webserver. Once your task completes and you try to fetch the logs you will see this error in the webserver.

Run the task and go to the task logs to fetch the logs from this remote ES host. I am using Filebeat to ship logs to ES.

I am attaching my airflow.cfg for your reference. I had to append the .txt prefix to the file for it to be able to attached here.
airflow.cfg.txt

@pankajkoti
Copy link
Member

Alternatively, could you please share a config that works for you for using ES remote logging?

@Owen-CH-Leung
Copy link
Contributor Author

Owen-CH-Leung commented Jul 7, 2023

Hi @pankajkoti ,

Thanks for your info. Yes I can reproduce the error and my initial finding suggests to me that it's a bug at the existing code (rather than configuration issue). The error comes from the fact that the program tries to make a http request to http://host.docker.internal:9200/_all/count endpoint (to count all the documents under all indexes) , and this endpoint doesn't support sort parameter defined in my query below:

https://github.com/apache/airflow/blob/main/airflow/providers/elasticsearch/log/es_task_handler.py#L320

(The GET / POST request doesn't really matter as this endpoint accepts both GET and POST request afaik, and POST is used because it can handle larger request body)

Hence you are seeing the exception elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'request does not support [sort]')

I'm still trouble shooting to find out the exact root cause of the error. will keep you posted on this

@pankajkoti
Copy link
Member

Hi @pankajkoti ,

Thanks for your info. Yes I can reproduce the error and my initial finding suggests to me that it's a bug at the existing code (rather than configuration issue). The error comes from the fact that the program tries to make a http request to http://host.docker.internal:9200/_all/count endpoint (to count all the documents under all indexes) , and this endpoint doesn't support sort parameter defined in my query below:

https://github.com/apache/airflow/blob/main/airflow/providers/elasticsearch/log/es_task_handler.py#L320

(The GET / POST request doesn't really matter as this endpoint accepts both GET and POST request afaik, and POST is used because it can handle larger request body)

Hence you are seeing the exception elasticsearch.exceptions.RequestError: RequestError(400, 'parsing_exception', 'request does not support [sort]')

I'm still trouble shooting to find out the exact root cause of the error. will keep you posted on this

Thank you for verifying @Owen-CH-Leung . It used to work fine with Elasticsearch provider 4.5.1 release https://pypi.org/project/apache-airflow-providers-elasticsearch/ and is failing after this change I believe.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants