You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "kkkkk (JIRA)" <ji...@apache.org> on 2018/09/24 15:01:00 UTC

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

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)