kkkkk created AIRFLOW-3108:
------------------------------

             Summary: 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


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)

Reply via email to