Problem creating a community blog – “Error 409: conflict”

The customer reported a problem when trying to add the blogs widget to a community, an “error 409: conflict” appeared stopping the user from being able to create a blog. Interestingly, the user could see from a list of their own blogs a blog with the same name as the community. Further inspection shows that the blog is restricted like the community is.

The history is somewhat unclear, the community owner didn’t know when this broke.

The below is a snippet from the SystemOut.log

07/02/12 16:17:06:226 GMT] 0000002a EventPropagat E com.ibm.lconn.widgets.service.EventPropagater postRemoteEvent CLFWZ0003E: Failed to post event notification to remote widget application handler: Conflict
com.ibm.lconn.widgets.model.NoRetryConflictException: Conflict
at com.ibm.lconn.widgets.service.EventPropagater.postRemoteEvent(EventPropagater.java:467)
at com.ibm.lconn.widgets.service.EventPropagater.addWidget(EventPropagater.java:664)
at com.ibm.lconn.widgets.service.WidgetInfoService.addWidgetPropagateInternal(WidgetInfoService.java:223)
at com.ibm.lconn.widgets.service.WidgetInfoService.addWidget(WidgetInfoService.java:308)
at com.ibm.lconn.widgets.actions.AddWidgetAction.execute(AddWidgetAction.java:67)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)

Checking the community queued events showed nothing pending to be actioned:

wsadmin>CommunitiesQEventService.viewQueuedEventsByResourceType(“community”, None, 100)
Remote App                Resource Id                       Event Type                          Event Id
Forum   1212121-47e4-4c0a-8320-0fe580e39167    remote.app.added        Wdf3e4e9995c1_4051_86be_e2a21c0d264b
Forum   1212121-47e4-4c0a-8320-0fe580e39167    community.prepare.delete        W7932e51b96d8_4fa6_a791_850222cc7942

{EventType=205, InsertedLong=1328106813866, EventId=W7932e51b96d8_4fa6_a791_850222cc7942, ResourceType=1, Inserted=2012-02-01 14:33:33.866, ResourceId=41a5d0d7-47e4-4c0a-8320-0fe580e39167, ResourceTypeStr=community, RemAppDefId=Forum, EventTypeStr=community.prepare.delete}

wsadmin>CommunitiesQEventService.viewQueuedEventsByResourceId(“community”, “123456-ba1e-4fae-9315-1e268bbc7b23”, None, 100)
Remote App                Resource Id                       Event Type                          Event Id

wsadmin>CommunitiesQEventService.viewQueuedEventsByRemoteAppDefId(“Blog”, None, 100)
Resource Type           Resource Id                         Event Type                          Event Id

Enabling trace and taking Fiddler logs provided with nothing more than the “409 conflict” error in the trace.log.

com.ibm.lconn.widgets.*=all:com.ibm.lconn.extdatamodel.*=all:com.ibm.connections.httpClient.*=all

What did work was the following steps all detailed in the Connections wiki.

Comparing remote application data with the Communities database

This step was not really necessary but was more interesting to ensure the IDs tallied.

execfile(“blogsAdmin.py”)

BlogsAdminService.exportSyncedResourceInfo(“/tmp/blogsOutput.xml”, “community”)

blogsOutput.xml
<snx:resource type=”community” id=”04e92737-ba1e-4fae-9315-1e268bbc7b23“>
<snx:property name=”communityType”>private</snx:property>
<snx:property name=”communityThemeId”>blue</snx:property>
<snx:objectIdentifyingTerm>ACME Jobs</snx:objectIdentifyingTerm>
<snx:objectIdentifyingId>65e0bc22-7994-4b39-bca3-37f15b0d0966</snx:objectIdentifyingId>
</snx:resource>

Generating a synchronization report

This produces two documents. The orphanedRemoteApplications.html file lists the remote applications for which there is either no associated community or whose associated community is missing the orphaned data’s widget, this is the one of interest. From it you can see the affected community and the id of the orphaned blog.

execfile(“communitiesAdmin.py”)

CommunitiesRemoteAppService.generateSyncReports(“/tmp/blogsOutput.xml”, “/tmp”)

In the Blog_orphanedRemoteApps.html I see the Community in question (as well as others….)

No widgets with widget definition id of Blog were found.
community name: ACME Jobs
community uuid: 04e92737-ba1e-4fae-9315-1e268bbc7b23
Identifying Term (Blog Name): ACME Jobs
Identifying Id (BlogUuid): 65e0bc22-7994-4b39-bca3-37f15b0d0966

Assigning orphaned remote applications to a community

execfile(“communitiesAdmin.py”)

CommunitiesRemoteAppService.assignRemoteApp(“Blog”, “65e0bc22-7994-4b39-bca3-37f15b0d0966“, “04e92737-ba1e-4fae-9315-1e268bbc7b23“, “04e92737-ba1e-4fae-9315-1e268bbc7b23“, “col2”)

Assignment succeeded

Inspecting the community now shows the blogs widget and the owner has the ability to create a new entry or view previous entries.