[ 
https://issues.apache.org/jira/browse/AIRFLOW-3425?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16705951#comment-16705951
 ] 

Kaxil Naik commented on AIRFLOW-3425:
-------------------------------------

Btw [~alsokoloff] it is not a bug, it already checked for `is not None`, and 
not `is None` as you mentioned.

However, I am merging this because it is a better convention.

> GoogleCloudBaseHook doesn't set default scope when google_cloud_default 
> connection is empty
> -------------------------------------------------------------------------------------------
>
>                 Key: AIRFLOW-3425
>                 URL: https://issues.apache.org/jira/browse/AIRFLOW-3425
>             Project: Apache Airflow
>          Issue Type: Bug
>          Components: gcp, hooks
>    Affects Versions: 1.10.1
>            Reporter: Alexander Sokolov
>            Priority: Minor
>             Fix For: 2.0.0
>
>
> When using Application Default Credentials to authenticating to GCP.
> _If the environment variable {{GOOGLE_APPLICATION_CREDENTIALS}} is set to the 
> path of a valid service account JSON private key file, then it is loaded and 
> returned. The project ID returned is the project ID defined in the service 
> account file if available (some older files do not contain project ID 
> information)._
> {code:java}
> [2018-11-30 11:18:35,038] {models.py:1569} INFO - Executing 
> <Task(FileToGoogleCloudStorageOperator): upload_transformed_data_to_gcs> on 
> 2018-11-29T17:54:03.110575+00:00
> [2018-11-30 11:18:35,039] {base_task_runner.py:124} INFO - Running: ['bash', 
> '-c', 'airflow run transform_raw_data upload_transformed_data_to_gcs 
> 2018-11-29T17:54:03.110575+00:00 --job_id 98 --raw -sd 
> DAGS_FOLDER/transform_raw_data.py --cfg_path 
> /var/folders/5j/n3y23gt93l19lmt1tf4mgpr80000gn/T/tmprbpmva2a']
> [2018-11-30 11:18:35,606] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs [2018-11-30 11:18:35,606] {settings.py:174} 
> INFO - setting.configure_orm(): Using pool settings. pool_size=5, 
> pool_recycle=1800
> [2018-11-30 11:18:35,981] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs [2018-11-30 11:18:35,979] {_init_.py:51} INFO 
> - Using executor LocalExecutor
> [2018-11-30 11:18:36,202] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs [2018-11-30 11:18:36,201] {models.py:258} INFO 
> - Filling up the DagBag from /Users/alex/airflow/dags/transform_raw_data.py
> [2018-11-30 11:18:38,391] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs [2018-11-30 11:18:38,390] {base_hook.py:83} 
> INFO - Using connection to: localhost
> [2018-11-30 11:18:43,427] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs [2018-11-30 11:18:43,426] {cli.py:492} INFO - 
> Running <TaskInstance: transform_raw_data.upload_transformed_data_to_gcs 
> 2018-11-29T17:54:03.110575+00:00 [running]> on host laptop.local
> [2018-11-30 11:18:48,574] {logging_mixin.py:95} INFO - [2018-11-30 
> 11:18:48,574] {gcp_api_base_hook.py:86} INFO - Getting connection using 
> `google.auth.default()` since no key file is defined for hook.
> [2018-11-30 11:18:48,583] {logging_mixin.py:95} INFO - [2018-11-30 
> 11:18:48,583] {discovery.py:267} INFO - URL being requested: GET 
> https://www.googleapis.com/discovery/v1/apis/storage/v1/rest
> [2018-11-30 11:18:48,852] {models.py:1736} ERROR - ('invalid_scope: Empty or 
> missing scope not allowed.', '{\n  "error": "invalid_scope",\n  
> "error_description": "Empty or missing scope not allowed."\n}')
> Traceback (most recent call last):
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/models.py",
>  line 1633, in _run_raw_task
>     result = task_copy.execute(context=context)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/contrib/operators/file_to_gcs.py",
>  line 75, in execute
>     filename=self.src)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/contrib/hooks/gcs_hook.py",
>  line 187, in upload
>     service = self.get_conn()
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/contrib/hooks/gcs_hook.py",
>  line 48, in get_conn
>     'storage', 'v1', http=http_authorized, cache_discovery=False)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/googleapiclient/_helpers.py",
>  line 130, in positional_wrapper
>     return wrapped(*args, **kwargs)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/googleapiclient/discovery.py",
>  line 222, in build
>     requested_url, discovery_http, cache_discovery, cache)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/googleapiclient/discovery.py",
>  line 269, in _retrieve_discovery_doc
>     resp, content = http.request(actual_url)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google_auth_httplib2.py",
>  line 187, in request
>     self._request, method, uri, request_headers)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/auth/credentials.py",
>  line 122, in before_request
>     self.refresh(request)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/service_account.py",
>  line 322, in refresh
>     request, self._token_uri, assertion)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/_client.py",
>  line 145, in jwt_grant
>     response_data = _token_endpoint_request(request, token_uri, body)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/_client.py",
>  line 111, in _token_endpoint_request
>     _handle_error_response(response_body)
>   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/_client.py",
>  line 61, in _handle_error_response
>     error_details, response_body)
> google.auth.exceptions.RefreshError: ('invalid_scope: Empty or missing scope 
> not allowed.', '{\n  "error": "invalid_scope",\n  "error_description": "Empty 
> or missing scope not allowed."\n}')
> [2018-11-30 11:18:48,865] {models.py:1764} INFO - Marking task as FAILED.
> [2018-11-30 11:18:48,899] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs 
> /Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/psycopg2/_init_.py:144:
>  UserWarning: The psycopg2 wheel package will be renamed from release 2.8; in 
> order to keep installing from binary please use "pip install psycopg2-binary" 
> instead. For details see: 
> <http://initd.org/psycopg/docs/install.html#binary-install-from-pypi>.
> [2018-11-30 11:18:48,899] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   """)
> [2018-11-30 11:18:48,904] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs Traceback (most recent call last):
> [2018-11-30 11:18:48,904] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/bin/airflow", line 32, 
> in <module>
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     args.func(args)
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/utils/cli.py",
>  line 74, in wrapper
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     return f(*args, **kwargs)
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/bin/cli.py",
>  line 498, in run
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     _run(args, dag, ti)
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/bin/cli.py",
>  line 402, in _run
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     pool=args.pool,
> [2018-11-30 11:18:48,905] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/utils/db.py",
>  line 74, in wrapper
> [2018-11-30 11:18:48,906] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     return func(*args, **kwargs)
> [2018-11-30 11:18:48,906] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/models.py",
>  line 1633, in _run_raw_task
> [2018-11-30 11:18:48,906] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     result = task_copy.execute(context=context)
> [2018-11-30 11:18:48,906] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/contrib/operators/file_to_gcs.py",
>  line 75, in execute
> [2018-11-30 11:18:48,906] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     filename=self.src)
> [2018-11-30 11:18:48,906] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/contrib/hooks/gcs_hook.py",
>  line 187, in upload
> [2018-11-30 11:18:48,906] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     service = self.get_conn()
> [2018-11-30 11:18:48,907] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/airflow/contrib/hooks/gcs_hook.py",
>  line 48, in get_conn
> [2018-11-30 11:18:48,907] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     'storage', 'v1', http=http_authorized, 
> cache_discovery=False)
> [2018-11-30 11:18:48,907] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/googleapiclient/_helpers.py",
>  line 130, in positional_wrapper
> [2018-11-30 11:18:48,907] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     return wrapped(*args, **kwargs)
> [2018-11-30 11:18:48,907] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/googleapiclient/discovery.py",
>  line 222, in build
> [2018-11-30 11:18:48,907] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     requested_url, discovery_http, 
> cache_discovery, cache)
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/googleapiclient/discovery.py",
>  line 269, in _retrieve_discovery_doc
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     resp, content = http.request(actual_url)
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google_auth_httplib2.py",
>  line 187, in request
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     self._request, method, uri, 
> request_headers)
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/auth/credentials.py",
>  line 122, in before_request
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     self.refresh(request)
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/service_account.py",
>  line 322, in refresh
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     request, self._token_uri, assertion)
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/_client.py",
>  line 145, in jwt_grant
> [2018-11-30 11:18:48,908] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     response_data = 
> _token_endpoint_request(request, token_uri, body)
> [2018-11-30 11:18:48,909] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/_client.py",
>  line 111, in _token_endpoint_request
> [2018-11-30 11:18:48,909] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     _handle_error_response(response_body)
> [2018-11-30 11:18:48,909] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs   File 
> "/Users/alex/.local/share/virtualenvs/project-X9xQGmcz/lib/python3.6/site-packages/google/oauth2/_client.py",
>  line 61, in _handle_error_response
> [2018-11-30 11:18:48,909] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs     error_details, response_body)
> [2018-11-30 11:18:48,909] {base_task_runner.py:107} INFO - Job 98: Subtask 
> upload_transformed_data_to_gcs google.auth.exceptions.RefreshError: 
> ('invalid_scope: Empty or missing scope not allowed.', '{\n  "error": 
> "invalid_scope",\n  "error_description": "Empty or missing scope not 
> allowed."\n}')
> [2018-11-30 11:18:50,180] {logging_mixin.py:95} INFO - [2018-11-30 
> 11:18:50,178] {jobs.py:2612} INFO - Task exited with return code 1
> {code}
> h3. Prerequisites:
> export GOOGLE_APPLICATION_CREDENTIALS=~/keys/google_service_account.json
> Keep *_google_cloud_default_* connection empty.
>  
> h3. Root cause:
> Extra parameters are
> {'extra__jdbc__drv_path': '', 'extra__jdbc__drv_clsname': '', 
> 'extra__google_cloud_platform__project': '', 
> 'extra__google_cloud_platform__key_path': '', 
> 'extra__google_cloud_platform__keyfile_dict': '', 
> 'extra__google_cloud_platform__scope': ''}
> {{Code in line 
> [https://github.com/apache/incubator-airflow/blob/master/airflow/contrib/hooks/gcp_api_base_hook.py#L78]}}
> {{checks if scope is None, but it's empty string.}}
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to