Browse Source

fix(datax): PG reader 加 socketTimeout+tcpKeepAlive,防连接被掐后死等

aliyun rwlb 会掐 writer 反压期间空闲的连接;默认无 socketTimeout 时读操作死等半开
socket、挂起不报错。jdbc url 追加 tcpKeepAlive=true&socketTimeout=300,断了立即报错可重试。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
tianyu.chu 1 week ago
parent
commit
d6622d6015
1 changed files with 5 additions and 0 deletions
  1. 5 0
      dw_base/datax/plugins/reader/postgresql_reader.py

+ 5 - 0
dw_base/datax/plugins/reader/postgresql_reader.py

@@ -53,6 +53,11 @@ class PostgreSQLReader(Reader):
             jdbc_url = f'{jdbc_url}{database}'
         else:
             jdbc_url = f'{jdbc_url}/{database}'
+        # 长连接抗断:writer 反压时 reader 空闲,aliyun rwlb 会掐空闲连接;默认无 socketTimeout
+        # 时读操作会死等半开 socket(挂起不报错)。加 socketTimeout(秒)让它断了立即报错、
+        # tcpKeepAlive 开保活探测。全局生效;日常小任务单批 fetch 很快,不受 300s 影响。
+        _sep = '&' if '?' in jdbc_url else '?'
+        jdbc_url = jdbc_url + _sep + 'tcpKeepAlive=true&socketTimeout=300'
         query_sql = self.config_parser.get(self.plugin_type, POSTGRE_SQL_READER_PARAMETER_QUERY_SQL)
         # 优先级:手写 querySql > [mask] 段自动生成 > table 透传
         if not query_sql and self.config_parser.has_section('mask'):