[ 
https://issues.apache.org/jira/browse/BEAM-6149?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Kenneth Knowles updated BEAM-6149:
----------------------------------
    Labels: easyfix stale-assigned usability  (was: easyfix usability)

> Resolving gcp extra dependencies breaks ssl support when contacting google
> --------------------------------------------------------------------------
>
>                 Key: BEAM-6149
>                 URL: https://issues.apache.org/jira/browse/BEAM-6149
>             Project: Beam
>          Issue Type: Bug
>          Components: dependencies, runner-dataflow, sdk-py-core
>    Affects Versions: 2.7.0, 2.8.0
>            Reporter: Javier Domingo Cansino
>            Assignee: Tyler Akidau
>            Priority: P3
>              Labels: easyfix, stale-assigned, usability
>
> It looks a bit like an oxymoron to me, but when fully resolving apache-beam 
> using gcp extras dependencies, httplib2 is forced to be on a version that 
> doesn't allow it to call google, and any pipeline using google services (I 
> haven't checked others), fails.
> I have done the full back-tracing of the problem, let me try to explain my 
> findings.
> A quick way to reproduce this, is by using pipenv to install all the 
> dependencies. It will make sure to resolve sub-dependencies, {{pipenv install 
> apache-beam[gcp]}}, and then run {{python -c 'from google.cloud import 
> bigquery;client=bigquery.Client(); list(client.list_projects())'}}. The error 
> is the same when running a pipeline, but I kept it simple.
> It will throw an error like this one:
> {code}
> /home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/auth/_default.py:66:
>  UserWarning: Your application has authenticated using end user credentials 
> from Google Cloud SDK. We recommend that most server applications use service 
> accounts instead. If your application continues to use end user credentials 
> from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" 
> error. For more information about service accounts, see 
> https://cloud.google.com/docs/authentication/
>   warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)
> Traceback (most recent call last):
>   File "<string>", line 1, in <module>
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/cloud/iterator.py",
>  line 218, in _items_iter
>     for page in self._page_iter(increment=False):
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/cloud/iterator.py",
>  line 247, in _page_iter
>     page = self._next_page()
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/cloud/iterator.py",
>  line 347, in _next_page
>     response = self._get_next_page_response()
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/cloud/iterator.py",
>  line 396, in _get_next_page_response
>     query_params=params)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/cloud/_http.py",
>  line 299, in api_request
>     headers=headers, target_object=_target_object)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/cloud/_http.py",
>  line 193, in _make_request
>     return self._do_request(method, url, headers, data, target_object)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/cloud/_http.py",
>  line 223, in _do_request
>     body=data)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google_auth_httplib2.py",
>  line 187, in request
>     self._request, method, uri, request_headers)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/auth/credentials.py",
>  line 122, in before_request
>     self.refresh(request)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/oauth2/credentials.py",
>  line 136, in refresh
>     self._client_secret))
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/oauth2/_client.py",
>  line 237, in refresh_grant
>     response_data = _token_endpoint_request(request, token_uri, body)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google/oauth2/_client.py",
>  line 106, in _token_endpoint_request
>     method='POST', url=token_uri, headers=headers, body=body)
>   File 
> "/home/javier/.local/share/virtualenvs/bqssltest-obub2LuN/lib/python2.7/site-packages/google_auth_httplib2.py",
>  line 119, in __call__
>     raise exceptions.TransportError(exc)
> google.auth.exceptions.TransportError: [SSL: CERTIFICATE_VERIFY_FAILED] 
> certificate verify failed (_ssl.c:726)
> {code}
> The reason why I think this problem hasn't been posted before is because 
> people is ignoring pip's output, which clearly states that there are some 
> dependenciy issues:
> {code:text}
> (bqssltest) javier@ffukn897:~/projects/spinoffs/bqssltest$ pip install 
> 'apache-beam[gcp]==2.7.0'                                                     
>                                         ...
> google-gax 0.15.16 has requirement future<0.17dev,>=0.16.0, but you'll have 
> future 0.17.1 which is incompatible.
> gapic-google-cloud-pubsub-v1 0.15.4 has requirement 
> oauth2client<4.0dev,>=2.0.0, but you'll have oauth2client 4.1.3 which is 
> incompatible.
> googledatastore 7.0.1 has requirement httplib2<0.10,>=0.9.1, but you'll have 
> httplib2 0.11.3 which is incompatible.
> googledatastore 7.0.1 has requirement oauth2client<4.0.0,>=2.0.1, but you'll 
> have oauth2client 4.1.3 which is incompatible.
> proto-google-cloud-pubsub-v1 0.15.4 has requirement 
> oauth2client<4.0dev,>=2.0.0, but you'll have oauth2client 4.1.3 which is 
> incompatible.
> proto-google-cloud-datastore-v1 0.90.4 has requirement 
> oauth2client<4.0dev,>=2.0.0, but you'll have oauth2client 4.1.3 which is 
> incompatible.
> ...
> {code}
> These warnings are caused by the version pinning in the GCP requirements, in 
> specific {{googledatastore==7.0.1}} has a direct requirement of {{httplib2 
> [required: >=0.9.1,<0.10, installed: 0.9.2]}}. There is another version 
> pinning of httplib2 directly by apache-beam, but doesn't cause the problem 
> because it's asking for {{<=0.11.3}}.
> I have no idea why googledatastore is pinned on that version, it seems that 
> someone is aware of the problem with datastore as {{googledatastore==7.0.2}} 
> is released with just that constraint removed.
> The only thing missing here is to upgrade this line to use {{7.0.2}}:
> https://github.com/apache/beam/blob/master/sdks/python/setup.py#L143
> Can anyone do it and release a minor version? From previous experience I know 
> it's way faster to merge a PR by a long running collaborator than by someone 
> random on the internet.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to