Xsync configuration

23 views
Skip to first unread message

Ben Wagner

unread,
Apr 14, 2026, 11:49:27 AM (7 days ago) Apr 14
to xnat_discussion
Howdy folks ;)

I'm trying out the Xsync plugin.  Initially hopeful but running into hiccups. I'm seeing a lot of errors in my MR sessions but not in MEG sessions.  Both seem to have the major metadata and imaging synced over. Except MR sessions are marked as FAILED.  The destination instance is somewhat vanilla instance compared to the source.  I'm wondering if it could be the multiple image assessors plugins that are on the source and not on the destination.  Does Xsync require the same plugins on host and destination? Hopefully not. All I want to do it is get the imaging across.

Any thoughts?
Ben

Mohana Ramaratnam

unread,
Apr 15, 2026, 1:57:18 AM (6 days ago) Apr 15
to xnat_di...@googlegroups.com
HI Ben,

Plugin requirement on the destination depends on what you are syncing. 

If there is a datatype at the source, which has been created via a plugin, and you are syncing this datatype to the destination, you will need the plugin which defines the datatype at the destination. 

Can you check logs xsync.log at the source and destination for clues on why the MRSession are failing, 

--
You received this message because you are subscribed to the Google Groups "xnat_discussion" group.
To unsubscribe from this group and stop receiving emails from it, send an email to xnat_discussi...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/xnat_discussion/cc225278-f6af-4b9e-9d1e-e67f1b697854n%40googlegroups.com.

Ben Wagner

unread,
Apr 15, 2026, 11:01:52 AM (6 days ago) Apr 15
to xnat_discussion
Hi Mohana,
  This is a 2nd attempt to post.  Sorry if duplicate.

  The configuration on the host is for: Project Resources: All; Subject Resources: None; Non-Imaging Assessments: None; and Imaging Session: All.  Each MR session has many MANY assessors that I don't want to send over.  Just the images and generic meta data (date, time, etc) found in a downloaded MR session XML.

Below are the relevant logs.
Thanks,
Ben

=== DESTINATION LOGS ===
xdat.log: Nothing
xsync.log: Just sync trigger messages
restlet.log:
2026-04-15 09:24:07,907 [ajp-nio-127.0.0.1-8009-exec-4] ERROR org.nrg.xnat.restlet.resources.QueryOrganizerResource - Unknown alias "URI" processing query for root element: subjectData
2026-04-15 09:26:47,590 [ajp-nio-127.0.0.1-8009-exec-1] ERROR org.nrg.xnat.restlet.resources.QueryOrganizerResource - Unknown alias "URI" processing query for root element: experimentData

=== HOST LOGS ===
xdat.log: Nothing
xsync.log:
2026-04-15 09:30:13,953 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - <200,{"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"eventTime\":1776
263413941,\"message\":\"Importing XAR\"}]}","succeeded":null,"finalMessage":null},[Date:"Wed, 15 Apr 2026 14:30:13 GMT", Server:"Apache/2.4.62 (Red Hat Enterprise Linux) OpenSSL/3.2.2", Set-Cookie:"SESSION_
EXPIRATION_TIME="1776263413944,900000"; Version=1; Path=/xnat/; Secure", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", X-Frame-Options:"SAMEORIGIN", Content-Security-Policy:"frame-ance
stors 'self'", Content-Type:"application/json", Keep-Alive:"timeout=5, max=99", Connection:"Keep-Alive", Transfer-Encoding:"chunked"]>
2026-04-15 09:30:13,953 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - {"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"eventTime\":177626341
3941,\"message\":\"Importing XAR\"}]}","succeeded":null,"finalMessage":null}
2026-04-15 09:30:13,953 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - [SESSION_EXPIRATION_TIME="1776263413944,900000"; Version=1; Path=/xnat/; Secure]
2026-04-15 09:30:13,953 [xsync-thread-1] DEBUG org.nrg.xsync.services.remote.RemoteRESTServiceImpl - Import progress: {"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"even
tTime\":1776263413941,\"message\":\"Importing XAR\"}]}","succeeded":null,"finalMessage":null}
2026-04-15 09:30:18,988 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - <200,{"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"eventTime\":1776
263413941,\"message\":\"Importing XAR\"}]}","succeeded":null,"finalMessage":null},[Date:"Wed, 15 Apr 2026 14:30:18 GMT", Server:"Apache/2.4.62 (Red Hat Enterprise Linux) OpenSSL/3.2.2", Set-Cookie:"SESSION_
EXPIRATION_TIME="1776263418975,900000"; Version=1; Path=/xnat/; Secure", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", X-Frame-Options:"SAMEORIGIN", Content-Security-Policy:"frame-ance
stors 'self'", Content-Type:"application/json", Keep-Alive:"timeout=5, max=100", Connection:"Keep-Alive", Transfer-Encoding:"chunked"]>
2026-04-15 09:30:18,988 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - {"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"eventTime\":177626341
3941,\"message\":\"Importing XAR\"}]}","succeeded":null,"finalMessage":null}
2026-04-15 09:30:18,988 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - [SESSION_EXPIRATION_TIME="1776263418975,900000"; Version=1; Path=/xnat/; Secure]
2026-04-15 09:30:18,988 [xsync-thread-1] DEBUG org.nrg.xsync.services.remote.RemoteRESTServiceImpl - Import progress: {"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"even
tTime\":1776263413941,\"message\":\"Importing XAR\"}]}","succeeded":null,"finalMessage":null}
2026-04-15 09:30:24,005 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - <200,{"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"eventTime\":1776
263413941,\"message\":\"Importing XAR\"}]}","succeeded":true,"finalMessage":"/archive/experiments/ANSIRBIDS_E00206"},[Date:"Wed, 15 Apr 2026 14:30:23 GMT", Server:"Apache/2.4.62 (Red Hat Enterprise Linux) O
penSSL/3.2.2", Set-Cookie:"SESSION_EXPIRATION_TIME="1776263423997,900000"; Version=1; Path=/xnat/; Secure", X-Content-Type-Options:"nosniff", X-XSS-Protection:"1; mode=block", X-Frame-Options:"SAMEORIGIN",
Content-Security-Policy:"frame-ancestors 'self'", Content-Type:"application/json", Keep-Alive:"timeout=5, max=100", Connection:"Keep-Alive", Transfer-Encoding:"chunked"]>
2026-04-15 09:30:24,005 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - {"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"eventTime\":177626341
3941,\"message\":\"Importing XAR\"}]}","succeeded":true,"finalMessage":"/archive/experiments/ANSIRBIDS_E00206"}
2026-04-15 09:30:24,005 [xsync-thread-1] INFO  org.nrg.xsync.services.remote.RemoteRESTServiceImpl - [SESSION_EXPIRATION_TIME="1776263423997,900000"; Version=1; Path=/xnat/; Secure]
2026-04-15 09:30:24,005 [xsync-thread-1] DEBUG org.nrg.xsync.services.remote.RemoteRESTServiceImpl - Import progress: {"key":"20260415_092936882","payload":"{\"entryList\":[{\"status\":\"InProgress\",\"even
tTime\":1776263413941,\"message\":\"Importing XAR\"}]}","succeeded":true,"finalMessage":"/archive/experiments/ANSIRBIDS_E00206"}
2026-04-15 09:30:24,006 [xsync-thread-1] DEBUG org.nrg.xsync.local.XsyncExperimentTransfer - Total Time to process XAR file for scan 13 :: 47126
2026-04-15 09:30:24,058 [xsync-thread-1] DEBUG org.nrg.xsync.tools.XsyncURIUtils - connectionResopnse.getResponseBody()=/archive/experiments/ANSIRBIDS_E00206
2026-04-15 09:30:24,065 [xsync-thread-1] ERROR org.nrg.xsync.local.XsyncExperimentTransfer - Could not sync experiment
java.lang.NullPointerException: null
        at org.nrg.xsync.local.XsyncExperimentTransfer.transformOtherItemFieldsBeforeSync(XsyncExperimentTransfer.java:1242)
        at org.nrg.xsync.local.XsyncExperimentTransfer.storeXar(XsyncExperimentTransfer.java:435)
        at org.nrg.xsync.local.XsyncExperimentTransfer.syncExperiment(XsyncExperimentTransfer.java:151)
        at org.nrg.xsync.local.BatchExperimentSync.pushExperiment(BatchExperimentSync.java:156)
        at org.nrg.xsync.local.RemoteSubject.pushExperiment(RemoteSubject.java:131)
        at org.nrg.xsync.local.RemoteSubject.syncExperiment(RemoteSubject.java:99)
        at org.nrg.xsync.local.SingleExperimentTransfer.syncExperiment(SingleExperimentTransfer.java:178)
        at org.nrg.xsync.local.SingleExperimentTransfer.sync(SingleExperimentTransfer.java:128)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:87)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:42)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
2026-04-15 09:30:30,201 [xsync-thread-1] ERROR org.nrg.xsync.local.RemoteSubject - Error syncing experiment LONG_0006_20231213
org.nrg.xsync.exception.XsyncStoreException: Unable to store for subject LONG_0006 experiment LONG_0006_20231213
        at org.nrg.xsync.local.XsyncExperimentTransfer.syncExperiment(XsyncExperimentTransfer.java:153)
        at org.nrg.xsync.local.BatchExperimentSync.pushExperiment(BatchExperimentSync.java:156)
        at org.nrg.xsync.local.RemoteSubject.pushExperiment(RemoteSubject.java:131)
        at org.nrg.xsync.local.RemoteSubject.syncExperiment(RemoteSubject.java:99)
        at org.nrg.xsync.local.SingleExperimentTransfer.syncExperiment(SingleExperimentTransfer.java:178)
        at org.nrg.xsync.local.SingleExperimentTransfer.sync(SingleExperimentTransfer.java:128)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:87)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:42)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
2026-04-15 09:30:30,205 [xsync-thread-1] ERROR org.nrg.xsync.utils.XSyncFailureHandler - Failed to sync LONG xsiType ANSIRUTSW02_S00926
2026-04-15 09:30:30,207 [xsync-thread-1] ERROR org.nrg.xsync.local.SingleExperimentTransfer - Unable to store for subject LONG_0006 experiment LONG_0006_20231213
org.nrg.xsync.exception.XsyncStoreException: Unable to store for subject LONG_0006 experiment LONG_0006_20231213
        at org.nrg.xsync.local.XsyncExperimentTransfer.syncExperiment(XsyncExperimentTransfer.java:153)
        at org.nrg.xsync.local.BatchExperimentSync.pushExperiment(BatchExperimentSync.java:156)
        at org.nrg.xsync.local.RemoteSubject.pushExperiment(RemoteSubject.java:131)
        at org.nrg.xsync.local.RemoteSubject.syncExperiment(RemoteSubject.java:99)
        at org.nrg.xsync.local.SingleExperimentTransfer.syncExperiment(SingleExperimentTransfer.java:178)
        at org.nrg.xsync.local.SingleExperimentTransfer.sync(SingleExperimentTransfer.java:128)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:87)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:42)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
2026-04-15 09:30:30,207 [xsync-thread-1] DEBUG org.nrg.xsync.local.SingleExperimentTransfer - Unable to store for subject LONG_0006 experiment LONG_0006_20231213
2026-04-15 09:30:30,212 [xsync-thread-1] DEBUG org.nrg.xsync.manifest.SyncManifest - <html><body><p>The following data  was synced from project LONG on https://ansirxnat.biohpc.swmed.edu:8443/xnat to https://ansirbids.biohpc.swmed.edu:8443/xnat/data/projects/LONG requested by s164041. </p><table><tr><th> Source Project </th><th> Target Project </th><th> Sync Start Time </th><th> Sync End Time </th><th> Status </th></tr><tr><td>LONG</td><td>LONG</td><td>Wed Apr 15 09:23:10 CDT 2026</td><td>--</td><td>Sync Failed/Incomplete</td></tr></table><p>  Subjects synced</p><table><tr><th> Subject Label </th><th> Remote ID </th><th> Status </th><th> Message </th></tr><tr><td> LONG_0006 </td><td> ANSIRBIDS_S00014 </td><td> FAILED </td><td> org.nrg.xsync.exception.XsyncStoreException: Unable to store for subject LONG_0006 experiment LONG_0006_20231213
        at org.nrg.xsync.local.XsyncExperimentTransfer.syncExperiment(XsyncExperimentTransfer.java:153)
        at org.nrg.xsync.local.BatchExperimentSync.pushExperiment(BatchExperimentSync.java:156)
        at org.nrg.xsync.local.RemoteSubject.pushExperiment(RemoteSubject.java:131)
        at org.nrg.xsync.local.RemoteSubject.syncExperiment(RemoteSubject.java:99)
        at org.nrg.xsync.local.SingleExperimentTransfer.syncExperiment(SingleExperimentTransfer.java:178)
        at org.nrg.xsync.local.SingleExperimentTransfer.sync(SingleExperimentTransfer.java:128)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:87)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:42)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
 </td></tr></table><p>  Experiments synced</p><table><tr><th> Experiment Label </th><th> Experiment Remote ID </th><th> Experiment Type </th><th> Status </th><th> Message </th><td>  Total Files  </td><td>  Total File Size </td></tr><tr><td> LONG_0006_20231213 </td><td> ANSIRBIDS_E00206 </td><td> xnat:mrSessionData </td><td> FAILED </td><td> Subject LONG_0006 experiment LONG_0006_20231213 could not be synced. null </td><td> 3973 </td><td> 2.9 GB </td></tr></table></body></html>
2026-04-15 09:30:30,315 [xsync-thread-1] DEBUG org.nrg.xsync.manifest.SyncManifest - <html><body><p>The following data  was synced from project LONG on https://ansirxnat.biohpc.swmed.edu:8443/xnat to https://ansirbids.biohpc.swmed.edu:8443/xnat/data/projects/LONG requested by s164041. </p><table><tr><th> Source Project </th><th> Target Project </th><th> Sync Start Time </th><th> Sync End Time </th><th> Status </th></tr><tr><td>LONG</td><td>LONG</td><td>Wed Apr 15 09:23:10 CDT 2026</td><td>--</td><td>Sync Failed/Incomplete</td></tr></table><p>  Subjects synced</p><table><tr><th> Subject Label </th><th> Remote ID </th><th> Status </th><th> Message </th></tr><tr><td> LONG_0006 </td><td> ANSIRBIDS_S00014 </td><td> FAILED </td><td> org.nrg.xsync.exception.XsyncStoreException: Unable to store for subject LONG_0006 experiment LONG_0006_20231213
        at org.nrg.xsync.local.XsyncExperimentTransfer.syncExperiment(XsyncExperimentTransfer.java:153)
        at org.nrg.xsync.local.BatchExperimentSync.pushExperiment(BatchExperimentSync.java:156)
        at org.nrg.xsync.local.RemoteSubject.pushExperiment(RemoteSubject.java:131)
        at org.nrg.xsync.local.RemoteSubject.syncExperiment(RemoteSubject.java:99)
        at org.nrg.xsync.local.SingleExperimentTransfer.syncExperiment(SingleExperimentTransfer.java:178)
        at org.nrg.xsync.local.SingleExperimentTransfer.sync(SingleExperimentTransfer.java:128)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:87)
        at org.nrg.xsync.local.SingleExperimentTransfer.call(SingleExperimentTransfer.java:42)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)
 </td></tr></table><p>  Experiments synced</p><table><tr><th> Experiment Label </th><th> Experiment Remote ID </th><th> Experiment Type </th><th> Status </th><th> Message </th><td>  Total Files  </td><td>  Total File Size </td></tr><tr><td> LONG_0006_20231213 </td><td> ANSIRBIDS_E00206 </td><td> xnat:mrSessionData </td><td> FAILED </td><td> Subject LONG_0006 experiment LONG_0006_20231213 could not be synced. null </td><td> 3973 </td><td> 2.9 GB </td></tr></table></body></html>

restlet.log:
(This is a long standing issue on another thread that has yet to be resolved.  *cough* Tim and Rick *cough)
2026-04-15 09:23:29,021 [ajp-nio-127.0.0.1-8008-exec-8] ERROR org.nrg.xnat.restlet.resources.search.SearchResource - Failed POST
org.postgresql.util.PSQLException: ERROR: column "sub_project_identifier_long" does not exist
  Hint: Perhaps you meant to reference the column "search.mr_project_identifier_long".
  Position: 2909
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2725)
        at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2412)
        at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:371)
        at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:502)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:419)
        at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:341)
        at org.postgresql.jdbc.PgStatement.executeCachedSql(PgStatement.java:326)
        at org.postgresql.jdbc.PgStatement.executeWithFlags(PgStatement.java:302)
        at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:297)
        at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:98)
        at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java)

Moore, Charlie

unread,
Apr 15, 2026, 12:28:36 PM (6 days ago) Apr 15
to xnat_di...@googlegroups.com
Hi Ben,

It's been many years since I used XSync, so take this all with a grain of salt as it's coming from memory, but...

My understanding is that the configuration within the XSync UI is a bit confusing on what "Non-Imaging Assessments" means. That's not referring to any experiment that's not an imaging session, but rather any subject assessor that's not an imaging session. By default, if you're syncing imaging sessions, all of their session assessors will be synced as well. That can be disabled, with some caveats:
  1. The API to configure XSync is exceedingly powerful in the amount of customization it will let you do, where you configure the behavior for individual datatypes. That is, you would configure each imaging session data type on whether or not to also sync child assessors, or you could even define which type of assessors for each imaging session type.
  2. This flexibility comes at a cost: because the API to configure XSync was so flexible, it's also rather unwieldy to use, so most of that functionality is hidden from the UI. The UI was intended as a "version 1" type of UI that would allow some flexibility for some use cases, but revisiting it never made a priority cut. I don't believe you'd actually be able to turn off the assessor syncing from the UI.

Hopefully someone can correct me if I'm wrong, but I think you'd need to use XSync's rather complex API to turn this off. If you end up going down this route, I see an example config JSON in the repo: https://bitbucket.org/xnatdev/xsync/src/master/src/main/resources/sync_config.json . That might end up being useful as a reference.

Thanks,
Charlie

From: xnat_di...@googlegroups.com <xnat_di...@googlegroups.com> on behalf of Ben Wagner <thewa...@gmail.com>
Sent: Wednesday, April 15, 2026 10:01 AM
To: xnat_discussion <xnat_di...@googlegroups.com>
Subject: Re: [XNAT Discussion] Xsync configuration
 

 


The materials in this message are private and may contain Protected Healthcare Information or other information of a sensitive nature. If you are not the intended recipient, be advised that any unauthorized use, disclosure, copying or the taking of any action in reliance on the contents of this information is strictly prohibited. If you have received this email in error, please immediately notify the sender via telephone or return mail.

Ben Wagner

unread,
Apr 16, 2026, 10:18:15 AM (5 days ago) Apr 16
to xnat_discussion
Charlie thank you!

Between the swagger interface, a little AI on the referenced codebase, and a little gray matter I think I've got it worked out.  In short for reference I downloaded the current JSON and modified the image section as below and then reuploaded it.

    "imaging_sessions": {
      "sync_type": "include",
      "xsi_types": [
        {
          "xsi_type": "xnat:mrSessionData",
          "session_assessors": { "sync_type": "none" },
          "scan_resources": {
            "sync_type": "include",
            "items": ["DICOM"]
          }
        },
        {
          "xsi_type": "xnat:megSessionData",
          "session_assessors": { "sync_type": "none" },
          "scan_resources": {
            "sync_type": "include",
            "items": ["FIFF"]
          }
        }
      ]
    },

I've tried with a few session successfully and am about to run a full scale test.

Thanks again!
Reply all
Reply to author
Forward
0 new messages