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)