Unable to edit a page within Confluence caused by "No implementation of method: :root-editor" Synchrony message

Still need help?

The Atlassian Community is here for you.

Ask the community


Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.

Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Summary

When attempting to edit a page, Confluence displays the following message which prevents the page from being edited:

"This page is taking longer to load than usual. Give it a few moments, then try refreshing. Still having issues? Contact your Confluence admin."

Diagnosis

If a HAR file is recorded while trying to edit the page, a request like the following will return an HTTP 500 error:

https://mycompany.com/synchrony-proxy/v1/data/Synchrony-b109fcb5-968a-3c6b-861f-c6b23f73947e/confluence-37226019?state-at=@head&state-format=type-tagged&rewrite-request=true&cached=true

While the atlassian-confluence.log file will show no corresponding error message, the Synchrony logs will.  Here, we see an example of this:

2020-11-12 09:40:53,201 DEBUG [2086:StdOutHandler [/opt/atlassian/confluence/jre/bin/java]] {"synchrony":{"message":"synchrony.http.entity-api [warn] Error in get-entity","entity":"/Synchrony-b109fcb5-968a-3c6b-861f-c6b23f73947e/confluence-37226019","id":"TPfHnNg7ksUI3BPrLoddUA","ns":"synchrony.http.entity-api","throwable":"java.lang.IllegalArgumentException: No implementation of method: :root-editor of protocol: #'synchrony.operation.materialize-impl/RootEditor found for class: nil\n\tat clojure.core$_cache_protocol_fn.invokeStatic(core_deftype.clj:583)\n\tat synchrony.operation.materialize_impl$fn__26917$G__26912__26922.invoke(materialize_impl.cljc:10)\n\tat synchrony.operation.materialize_impl.VecEditor.vec_subeditor(materialize_impl.cljc:326)\n\tat synchrony.operation.materialize_impl$edit_vec_step.invokeStatic(materialize_impl.cljc:245)\n\tat synchrony.operation.materialize_impl$edit_vec$fn__27146.invoke(materialize_impl.cljc:305)\n\tat clojure.lang.PersistentVector.reduce(PersistentVector.java:341)\n\tat clojure.core$reduce.invokeStatic(core.clj:6703)\n\tat synchrony.operation.materialize_impl$edit_vec.invokeStatic(materialize_impl.cljc:304)\n\tat synchrony.operation.materialize_impl$materialize.invokeStatic(materialize_impl.cljc:319)\n\tat synchrony.operation.materialize$fn__31035.invokeStatic(materialize.cljc:14)\n\tat clojure.lang.MultiFn.invoke(MultiFn.java:233)\n\tat synchrony.data$regenerate_snapshots_BANG_$fn__38911.invoke(data.clj:296)\n\tat synchrony.data.(take?)(data.clj:333)\n\tat synchrony.data$repair_snapshots_BANG_$fn__39087.invoke(data.clj:332)\n\tat synchrony.data.(take?)(data.clj:342)\n\tat synchrony.data$get_snapshots_BANG_$fn__39143.invoke(data.clj:339)\n\tat synchrony.data.(take?)(data.clj:584)\n\tat synchrony.data$get_snapshots_and_tree_given_part_BANG_$fn__40456.invoke(data.clj:577)\n\tat synchrony.data.(take?)(data.clj:626)\n\tat synchrony.data$get_entity_at_master_head_BANG_$fn__40613.invoke(data.clj:621)\n\tat synchrony.data.(take?)(data.clj:635)\n\tat synchrony.data$get_entity_at_master_head_updating_cache_BANG_$fn__40671.invoke(data.clj:634)\n\tat synchrony.data.(take?)(data.clj:664)\n\tat synchrony.data$get_entity_at_master_head_caching_BANG_$fn__40735.invoke(data.clj:644)\n\tat synchrony.http.entity-api.(take?)(entity_api.clj:281)\n\tat synchrony.http.entity_api$get_state$fn__48044.invoke(entity_api.clj:269)\n\tat synchrony.http.entity-api.(take?)(entity_api.clj:332)\n\tat synchrony.http.entity_api$get_entity$fn__48173.invoke(entity_api.clj:328)\n\tat synchrony.http.entity-api.(take?)(entity_api.clj:589)\n\tat synchrony.http.entity_api$get_entity_handler$fn__48858.invoke(entity_api.clj:565)\n\tat clojure.lang.AFn.run(AFn.java:22)\n\tat java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)\n\tat java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)\n\tat java.lang.Thread.run(Thread.java:748)\n","level":"warn"}}

Of particular interest is the message: 

java.lang.IllegalArgumentException: No implementation of method: :root-editor of protocol: #'synchrony.operation.materialize-impl/RootEditor found for class: nil

This particular message indicates a failure centering around the materialization of the page's content from Synchrony, most likely a data corruption within the backend Synchrony tables.  Typically, this kind of error affects individual pages.


Cause

As of the creation of this article, the cause of the problem is unknown.

Solution

To fix this kind of problem, we'll need to recreate the page's content as a new page:

  1. First, if you don't already have the free Atlassian developed Source Editor plugin, download and install this plugin.
  2. Next, create a new page in the same space as the page that can't be edited and save it.
  3. Then, while viewing the page that can't be edited, select ... -> View Storage Format and copy the content from the resulting pop up box to the clipboard.
  4. Now, edit the new page that you just created.
  5. In edit mode, click <> to invoke the Source Editor plugin.
  6. Finally, paste the content from the clipboard into the resulting pop up box and save both this and the page.


Last modified on Nov 17, 2020

Was this helpful?

Yes
No
Provide feedback about this article
Powered by Confluence and Scroll Viewport.