Details of bug (trackback fails when post is not published to home page)

| 1 Comment

This post details how and why the trackback bug described in my previous post ("Trackback bug - Trackback fails when post is not published to home page") occurs.

If you look at the structure of weblogData.posts.[postNum].trackback.outbound.urls, it is apparent that the names of the subtables are urls. The tables listed under weblogData.posts.[postNum].trackback.inbound.urls should be the same way - the names of the subtables should be urls as well.

The error message that is being received:

Can't create item "radiocommentsManilaWebsite.#newsSite.radioHosting.trackback.users.
0127252.114.trackback.inbound.urls." because "" is an illegal name.

...would seem to indicate that a new subtable under inbound.urls is trying to be created with a name (url) of "" (null or empty string).

An outbound trackback ping requires 5 parameters - the trackback url to be pinged, the title of the post originating the trackback ping, the url of the post originating the trackback ping (permalink), an excerpt of text from the originating post, and the title of the weblog.

When a post is published with a link that can be pinged by Radio's trackback, and this post is not published to the "Home Page" (main weblog), Radio is not determining the permalink url correctly - it is sending an empty permalink url string. When such a trackback ping is sent to a Radio weblog, Radio's trackback servers can't create an inbound.urls table entry on Radio's trackback servers with an empty name (url). Apparently, the trackback table structure on Radio's trackback servers is similar to the table structure on a local Radio installation. The only thing Radio's trackback servers can do is report the error shown above.

This is how the error occurs:

1. When a post is published, processing of trackbacks is started with a call to
system.verbs.builtins.radio.weblog.builtinCallbacks.publishItem.trackback.

2. Within the above callback, a call is made to system.verbs.builtins.radio.trackback.threadScript.

3. Within the above thread script, a call is made to system.verbs.builtins.radio.trackback.ping for each url that Radio has determined it can send a trackback ping to.

4. The overall purpose of radio.trackback.ping is to get the 5 parameters necessary to perform an outbound trackback ping and pass them to system.verbs.apps.trackback.ping (the code which actually performs the trackback ping).

In the code for radio.trackback.ping, the permalink url parameter is initialized:

local (url = "")

...then radio.weblog.getUrlForPost (adrpost, @url) is called to get the permalink url of the post.

5. This is the initial line of code from radio.weblog.getUrlForPost:

on getUrlForPost (adrpost, adrurl, catname="", adrdata=radio.weblog.init ())

Note that radio.weblog.getUrlForPost takes a category parameter (catname), and if one is not supplied, the default value of "" is used. radio.trackback.ping does not pass a category parameter, so the value of "" is always used for catname when this macro is called from radio.trackback.ping.

6. Near the beginning of radio.weblog.getUrlForPost, this code is encountered:

if catname == "" //get the weblog archive relative folder path
  if adrpost^.flNotOnHomePage //post is not in weblog archive
    return (false)

This code is where the bug is most apparent:

A. catname is always "" (no category) when called by radio.trackback.ping, so the first if statement is true and the next statement is executed.

B. In the case we are interested in (a post that is not published to the "Home Page" and has links that Radio will send trackback pings to), flNotOnHomePage for that post is true by definition. The second if statement is true and the next line of code is executed.

C. radio.weblog.getUrlForPost returns a value of false to radio.trackback.ping, and the url permalink parameter (adrurl in this macro's code) is never changed from its original value of "".

7. On return from radio.weblog.getUrlForPost, radio.trackback.ping takes the five trackback parameters it has gathered (including the still empty url permalink parameter) and passes them to system.verbs.apps.trackback.ping to perform the ping. Radio's trackback servers throw the error described above when they try to create a new table entry with the empty url permalink parameter as a name.

The difficulty I see here in fixing the trackback code is determining a single permalink url to use when a post is not published to the "Home Page" and the post is published to multiple categories.

1 Comment

Thanks for tracking down all these details. We'll get a fix in for this today if possible.