You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2019/01/14 20:33:00 UTC

[jira] [Commented] (AIRFLOW-3108) MsSqlHook.run fails to commit if autocommit=False (Default config)

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

ASF GitHub Bot commented on AIRFLOW-3108:
-----------------------------------------

thalesmello commented on pull request #4525: [AIRFLOW-3108] Define get_autocommit method for MsSqlHook
URL: https://github.com/apache/airflow/pull/4525
 
 
   
   Make sure you have checked _all_ steps below.
   
   ### Jira
   
     - https://issues.apache.org/jira/browse/AIRFLOW-3108
   
   ### Description
   
   The default implementation of DbApiHook merely checks for an attribute named `autocommit`.
   
   Since `pymssql` Connection object actually has a method with that name, it returns a bound method when fetching an attribute with that name, evaluating to a "truthy" value. It resulted in SQL statements not actually being committed.
   
   ### Tests
   
   No tests
   
   ### Commits
   
   - [ ] My commits all reference Jira issues in their subject lines, and I have squashed multiple commits if they address the same issue. In addition, my commits follow the guidelines from "[How to write a good git commit message](http://chris.beams.io/posts/git-commit/)":
     1. Subject is separated from body by a blank line
     1. Subject is limited to 50 characters (not including Jira issue reference)
     1. Subject does not end with a period
     1. Subject uses the imperative mood ("add", not "adding")
     1. Body wraps at 72 characters
     1. Body explains "what" and "why", not "how"
   
   ### Documentation
   
   No new functionality
   
   ### Code Quality
   
   - [ ] Passes `flake8`
   
 
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> MsSqlHook.run fails to commit if autocommit=False (Default config)
> ------------------------------------------------------------------
>
>                 Key: AIRFLOW-3108
>                 URL: https://issues.apache.org/jira/browse/AIRFLOW-3108
>             Project: Apache Airflow
>          Issue Type: Bug
>          Components: hooks
>    Affects Versions: 1.10.0
>            Reporter: kkkkk
>            Priority: Major
>              Labels: usability
>
> The MsSqlHook.run method doesn't execute conn.commit() if autocommit is set to False.
>  
> It looks like this bug has existed for a very long time, but wasn't apparent in 1.9, because the default value for autocommit was True. In 1.10 the default value was changed to False and the MsSqlHook and Operator have started failing silently.
>  
> The bug happens because the MssqlHook doesn't implement a custom get_autocommit(self, conn) method.The superclass' DbiApiHook method always returns True even if autocommit wasn't enabled in pymssql. Therefore the hook doesn't call commit and pymsql doesn't autocommit.
>  
> The below patch fixes the issue. Please consider including this fix in airflow 1.10.1, because it is a very frustrating issue to debug.
>  
> {code:java}
> --- mssql_hook.py
> +++ mssql_hook.py
> @@ -50,3 +50,13 @@ class MsSqlHook(DbApiHook):
>  
> def set_autocommit(self, conn, autocommit):
> conn.autocommit(autocommit)
> +
> + def get_autocommit(self, conn):
> + """
> + MS SQL connection gets autocommit in a different way.
> + :param conn: connection to get autocommit setting from.
> + :type conn: connection object.
> + :return: connection autocommit setting
> + :rtype bool
> + """
> + return conn.autocommit_state
> {code}



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