Opened 17 years ago

Last modified 15 years ago

#2008 closed defect

XML RPC Plugin create Ticket return non standard Integer Type (PostgresSQL specifc type) — at Version 5

Reported by: chrisky.c@… Owned by: Alec Thomas
Priority: normal Component: XmlRpcPlugin
Severity: normal Keywords:
Cc: Trac Release: 0.10

Description (last modified by Alec Thomas)

This was originally submitted to Eclipse's Bug (https://bugs.eclipse.org/bugs/show_bug.cgi?id=202230)

Its been commented may be the createTicket in XMLRPC are returning PostgreSQL specific number type (non standard Integer) which cause the problem.

Steps To Reproduce:

  1. Try to create an TRAC Repository New Task using XMLRPCPlugin
  2. When click on "Create New", the EDITOR keep unsaved status with the ERROR message "Unable to submit at this time. Check connectivity and retry."
  3. TICKET(Task) was actually created on TRAC with generated ID

This log was generated during this error

!ENTRY org.eclipse.mylyn.trac.core 4 5 2007-09-05 11:59:48.962
!MESSAGE 'cannot marshal <type 'PgInt8'> objects' while executing
'ticket.create()'
!STACK 0
org.eclipse.mylyn.internal.trac.core.TracRemoteException: 'cannot marshal <type
'PgInt8'> objects' while executing 'ticket.create()'
        at
org.eclipse.mylyn.internal.trac.core.TracXmlRpcClient.callInternal(TracXmlRpcClient.java:182)
        at
org.eclipse.mylyn.internal.trac.core.TracXmlRpcClient.call(TracXmlRpcClient.java:127)
        at
org.eclipse.mylyn.internal.trac.core.TracXmlRpcClient.createTicket(TracXmlRpcClient.java:603)
        at
org.eclipse.mylyn.internal.trac.core.TracTaskDataHandler.postTaskData(TracTaskDataHandler.java:332)
        at
org.eclipse.mylyn.tasks.ui.editors.AbstractRepositoryTaskEditor$37.run(AbstractRepositoryTaskEditor.java:2754)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)
Caused by: org.apache.xmlrpc.XmlRpcException: 'cannot marshal <type 'PgInt8'>
objects' while executing 'ticket.create()'
        at
org.apache.xmlrpc.client.XmlRpcStreamTransport.readResponse(XmlRpcStreamTransport.java:184)
        at
org.apache.xmlrpc.client.XmlRpcStreamTransport.sendRequest(XmlRpcStreamTransport.java:145)
        at
org.apache.xmlrpc.client.XmlRpcHttpTransport.sendRequest(XmlRpcHttpTransport.java:94)
        at
org.apache.xmlrpc.client.XmlRpcClientWorker.execute(XmlRpcClientWorker.java:53)
        at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:166)
        at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:136)
        at org.apache.xmlrpc.client.XmlRpcClient.execute(XmlRpcClient.java:125)
        at
org.eclipse.mylyn.internal.trac.core.TracXmlRpcClient.callInternal(TracXmlRpcClient.java:169)
        ... 5 more

More information: Trac 10.3 with PostgresSQL 8.2.3

Change History (5)

comment:1 Changed 17 years ago by Alec Thomas

To track this down we'll need a backtrace from Trac.

comment:2 in reply to:  1 Changed 17 years ago by anonymous

Replying to athomas:

To track this down we'll need a backtrace from Trac.

How do i generate the backtrace?

I have enable the logging under trac.ini [logging] log_file = trac.log log_level = DEBUG log_type = file

but trac.log show nothing special..

2007-09-07 04:39:53,805 Trac[loader] DEBUG: Loading egg plugin TracXMLRPC from / export/home/opt/csw/lib/python2.3/site-packages/TracXMLRPC-0.1-py2.3.egg 2007-09-07 04:39:54,050 Trac[cache] INFO: Syncing with repository (None to 0)

comment:3 Changed 17 years ago by Steffen Pingel

Description: modified (diff)

Alec, I suspect that the ticket id in the create() method is not converted to an int but has a PostgresSQL specific integer type causing the error. I can't test it since I don't have a working PostgreSQL environment.

Kai, could you try to apply the following patch which adds an explicit type conversion before returning the ticket id to your Trac XML-RPC plug-in:

Index: tracrpc/ticket.py
===================================================================
--- tracrpc/ticket.py   (revision 2617)
+++ tracrpc/ticket.py   (working copy)
@@ -90,7 +90,7 @@
                 self.log.exception("Failure sending notification on creation "
                                    "of ticket #%s: %s" % (t.id, e))

-        return t.id
+        return int(t.id)

     def update(self, req, id, comment, attributes = {}, notify=False):
         """ Update a ticket, returning the new ticket in the same form as getTicket(). """

comment:4 in reply to:  3 Changed 17 years ago by chrisky.c@…

The patch works great!

Replying to stp:

Alec, I suspect that the ticket id in the create() method is not converted to an int but has a PostgresSQL specific integer type causing the error. I can't test it since I don't have a working PostgreSQL environment.

Kai, could you try to apply the following patch which adds an explicit type conversion before returning the ticket id to your Trac XML-RPC plug-in:

Index: tracrpc/ticket.py
===================================================================
--- tracrpc/ticket.py   (revision 2617)
+++ tracrpc/ticket.py   (working copy)
@@ -90,7 +90,7 @@
                 self.log.exception("Failure sending notification on creation "
                                    "of ticket #%s: %s" % (t.id, e))

-        return t.id
+        return int(t.id)

     def update(self, req, id, comment, attributes = {}, notify=False):
         """ Update a ticket, returning the new ticket in the same form as getTicket(). """

comment:5 Changed 17 years ago by Alec Thomas

Description: modified (diff)

Is this conversion problem going to occur anywhere else though? It seems that if pyPgSQL is returning something that is almost-an-int here, it may do so elsewhere.

chrisky, is it possible to try one of the other PostgreSQL DBAPI layers, specifically psycopg2, (then remove the patch)? I'd be interested to see if the problem still occurs.

Note: See TracTickets for help on using tickets.