callTimeout takes no effect (cx_Oracle 8.1; Oracle client 18.3)

ConcreteVitamin <[email protected]> Thu, 22 Apr 2021 15:44:50 -0700
Newsgroups gmane.comp.python.db.cx-oracle
Message-ID <CAG2+eojPdMYX3wj8PtT6UhtjvqXDbXtgDJEGZoTi7Mass4KVpA@mail.gmail.com>
--===============2107364373699252054==
Content-Type: multipart/alternative; boundary="000000000000fdfbce05c0976dd2"

--000000000000fdfbce05c0976dd2
Content-Type: text/plain; charset="UTF-8"

Hi,

I'm using the following script, modified from samples/CallTimeout.py
(changing into cx_Oracle.connect(mode=cx_Oracle.SYSDBA) & using a 500ms
timeout), and *callTimeout is not taking effects*:

import cx_Oracle
print(cx_Oracle.version, cx_Oracle.clientversion())

connection = cx_Oracle.connect(mode=cx_Oracle.SYSDBA)

connection.callTimeout = 500
print("Call timeout set at", connection.callTimeout, "milliseconds...")

cursor = connection.cursor()
cursor.execute("select sysdate from dual")
today, = cursor.fetchone()
print("Fetch of current date before timeout:", today)

# dbms_session.sleep() replaces dbms_lock.sleep() from Oracle Database 18c
sleep_proc_name = "dbms_session.sleep" \
        if int(connection.version.split(".")[0]) >= 18 \
        else "dbms_lock.sleep"

print("Sleeping...should time out...")
try:
    cursor.callproc(sleep_proc_name, (3,))
except cx_Oracle.DatabaseError as e:
    print("ERROR:", e)

cursor.execute("select sysdate from dual")
today, = cursor.fetchone()
print("Fetch of current date after timeout:", today)


The output is:

$ python test.py
8.1.0 (18, 3, 0, 0, 0)
Call timeout set at 500 milliseconds...
Fetch of current date before timeout: 2021-04-22 22:39:30
Sleeping...should time out...
Fetch of current date after timeout: 2021-04-22 22:39:33


Note that (from the output), I'm using *cx_Oracle 8.1 and Oracle client
library 18.3* --- both satisfy this feature's requirements.  The DB is
freshly installed on an Oracle Linux box.

Is there a pointer on how to resolve this?  *Is it possible something
about connect(mode=cx_Oracle.SYSDBA) made the timeout a no-op?  *Or, should
I upgrade to Oracle 19 and retry?

Thanks.

--000000000000fdfbce05c0976dd2
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">Hi,<div><br></div><div>I&#39;m using the following script,=
 modified from samples/CallTimeout.py (changing into cx_Oracle.connect(mode=
=3Dcx_Oracle.SYSDBA) &amp; using a 500ms timeout), and <b>callTimeout is no=
t taking effects</b>:</div><div><br></div><blockquote style=3D"margin:0 0 0=
 40px;border:none;padding:0px"><div><font face=3D"monospace">import cx_Orac=
le</font></div><div><font face=3D"monospace">print(cx_Oracle.version, cx_Or=
acle.clientversion())</font></div><div><font face=3D"monospace"><br></font>=
</div><div><font face=3D"monospace">connection =3D cx_Oracle.connect(mode=
=3Dcx_Oracle.SYSDBA)</font></div><div><font face=3D"monospace"><br></font><=
/div><div><font face=3D"monospace">connection.callTimeout =3D 500</font></d=
iv><div><font face=3D"monospace">print(&quot;Call timeout set at&quot;, con=
nection.callTimeout, &quot;milliseconds...&quot;)</font></div><div><font fa=
ce=3D"monospace"><br></font></div><div><font face=3D"monospace">cursor =3D =
connection.cursor()</font></div><div><font face=3D"monospace">cursor.execut=
e(&quot;select sysdate from dual&quot;)</font></div><div><font face=3D"mono=
space">today, =3D cursor.fetchone()</font></div><div><font face=3D"monospac=
e">print(&quot;Fetch of current date before timeout:&quot;, today)</font></=
div><div><font face=3D"monospace"><br></font></div><div><font face=3D"monos=
pace"># dbms_session.sleep() replaces dbms_lock.sleep() from Oracle Databas=
e 18c</font></div><div><font face=3D"monospace">sleep_proc_name =3D &quot;d=
bms_session.sleep&quot; \</font></div><div><font face=3D"monospace">=C2=A0 =
=C2=A0 =C2=A0 =C2=A0 if int(connection.version.split(&quot;.&quot;)[0]) &gt=
;=3D 18 \</font></div><div><font face=3D"monospace">=C2=A0 =C2=A0 =C2=A0 =
=C2=A0 else &quot;dbms_lock.sleep&quot;</font></div><div><font face=3D"mono=
space"><br></font></div><div><font face=3D"monospace">print(&quot;Sleeping.=
..should time out...&quot;)</font></div><div><font face=3D"monospace">try:<=
/font></div><div><font face=3D"monospace">=C2=A0 =C2=A0 cursor.callproc(sle=
ep_proc_name, (3,))</font></div><div><font face=3D"monospace">except cx_Ora=
cle.DatabaseError as e:</font></div><div><font face=3D"monospace">=C2=A0 =
=C2=A0 print(&quot;ERROR:&quot;, e)</font></div><div><font face=3D"monospac=
e"><br></font></div><div><font face=3D"monospace">cursor.execute(&quot;sele=
ct sysdate from dual&quot;)</font></div><div><font face=3D"monospace">today=
, =3D cursor.fetchone()</font></div><div><font face=3D"monospace">print(&qu=
ot;Fetch of current date after timeout:&quot;, today)</font></div></blockqu=
ote><div><br></div><div>The output is:</div><div><br></div><blockquote styl=
e=3D"margin:0 0 0 40px;border:none;padding:0px"><div><font face=3D"monospac=
e">$ python test.py</font></div><div><font face=3D"monospace">8.1.0 (18, 3,=
 0, 0, 0)</font></div><div><font face=3D"monospace">Call timeout set at 500=
 milliseconds...</font></div><div><font face=3D"monospace">Fetch of current=
 date before timeout: 2021-04-22 22:39:30</font></div><div><font face=3D"mo=
nospace">Sleeping...should time out...</font></div><div><font face=3D"monos=
pace">Fetch of current date after timeout: 2021-04-22 22:39:33</font></div>=
</blockquote><div><br></div><div>Note that (from the output), I&#39;m using=
 <b>cx_Oracle 8.1 and Oracle client library 18.3</b> --- both satisfy this =
feature&#39;s=C2=A0requirements.=C2=A0 The DB is freshly installed on an Or=
acle Linux box.</div><div><br></div><div>Is there a pointer on how to resol=
ve this?=C2=A0 <b>Is it possible something about=C2=A0connect(mode=3Dcx_Ora=
cle.SYSDBA) made the timeout a no-op?=C2=A0 </b>Or, should I upgrade to Ora=
cle 19 and retry?</div><div><br></div><div>Thanks.</div></div>

--000000000000fdfbce05c0976dd2--


--===============2107364373699252054==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline


--===============2107364373699252054==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

_______________________________________________
cx-oracle-users mailing list
cx-oracle-users-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org
https://lists.sourceforge.net/lists/listinfo/cx-oracle-users

--===============2107364373699252054==--