From e63b200f75c282f9df6af865910767b06780ee07 Mon Sep 17 00:00:00 2001
From: scott snyder <snyder@bnl.gov>
Date: Mon, 24 Apr 2017 16:52:15 +0200
Subject: [PATCH] Adding tests for explicit symlink support in WriteHandle.

---
 .../share/xAODTestSymlinks1.ref               | 65 +++++++-------
 .../share/xAODTestSymlinks1MT.ref             | 85 +++++++++++--------
 .../share/xAODTestSymlinks1_jo.py             |  4 +-
 .../share/xAODTestSymlinks2.ref               | 56 ++++++------
 .../share/xAODTestSymlinks2MT.ref             | 67 ++++++++-------
 .../share/xAODTestWrite_jo.py                 |  5 +-
 .../DataModelTestDataCommonDict.h             |  2 +
 .../DataModelTestDataCommon/S1.h              | 39 +++++++++
 .../DataModelTestDataCommon/S2.h              | 39 +++++++++
 .../DataModelTestDataCommon/selection.xml     |  2 +
 .../src/setConverterLibrary.cxx               |  2 +
 .../src/xAODTestReadSymlink.cxx               | 14 ++-
 .../src/xAODTestReadSymlink.h                 |  6 ++
 .../DataModelTestDataReadCnv/CMakeLists.txt   |  4 +-
 .../DataModelTestDataWrite_entries.cxx        |  2 +
 .../src/xAODTestWriteSymlinks.cxx             | 69 +++++++++++++++
 .../src/xAODTestWriteSymlinks.h               | 74 ++++++++++++++++
 .../DataModelTestDataWriteCnv/CMakeLists.txt  |  4 +-
 18 files changed, 411 insertions(+), 128 deletions(-)
 create mode 100644 Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S1.h
 create mode 100644 Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S2.h
 create mode 100644 Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.cxx
 create mode 100644 Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.h

diff --git a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1.ref b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1.ref
index 3e4b05309430..36fd3d17284a 100644
--- a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1.ref
+++ b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1.ref
@@ -1,20 +1,25 @@
-Thu Apr 20 20:18:35 CEST 2017
+Mon Apr 24 16:12:01 CEST 2017
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.0] [x86_64-slc6-gcc62-opt] [atlas-work3g/725f3a42d9] -- built on [2017-04-20T1906]
+Py:Athena            INFO using release [WorkDir-22.0.0] [x86_64-slc6-gcc62-dbg] [mt-sss/06ff187fe6] -- built on [2017-04-24T1528]
 Py:Athena            INFO including file "AthenaCommon/Bootstrap.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 [?1034hPy:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "DataModelRunTests/xAODTestSymlinks1_jo.py"
-Py:ConfigurableDb    INFO Read module info for 5294 configurables from 15 genConfDb files
-Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb    INFO Read module info for 5296 configurables from 12 genConfDb files
+Py:ConfigurableDb WARNING Found 1 duplicates among the 12 genConfDb files :
+Py:ConfigurableDb WARNING --------------------------------------------------
+Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
+Py:ConfigurableDb WARNING --------------------------------------------------
+Py:ConfigurableDb WARNING   -DMTest__xAODTestDecor: DataModelTestDataCommon.DataModelTestDataCommonConf - ['DataModelTestDataRead.DataModelTestDataReadConf']
+Py:ConfigurableDb WARNING Fix your cmt/requirements file !!
 Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v28r1)
-                                          running on lxplus005.cern.ch on Thu Apr 20 20:18:47 2017
+                                          running on lxplus068.cern.ch on Mon Apr 24 16:12:24 2017
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -27,23 +32,23 @@ ChronoStatSvc        INFO  Number of skipped events for MemStat-1
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
-ClassIDSvc           INFO  getRegistryEntries: read 5682 CLIDRegistry entries for module ALL
-ClassIDSvc           INFO  getRegistryEntries: read 52 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 6160 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 57 CLIDRegistry entries for module ALL
 MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
 AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
 PoolSvc              INFO io_register[PoolSvc](xmlcatalog_file:PoolFileCatalog.xml) [ok]
 PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
-DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2017-04-18T2225/Athena/22.0.0/InstallArea/x86_64-slc6-gcc62-opt/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus005.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2017-04-23T2225/Athena/22.0.0/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus068.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
 DbSession Info     Open     DbSession    
 Domain[ROOT_All] Info >   Access   DbDomain     READ      [ROOT_All] 
 PoolSvc              INFO Re-initializing PoolSvc
-ClassIDSvc           INFO  getRegistryEntries: read 867 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 753 CLIDRegistry entries for module ALL
 HistogramPersis...WARNING Histograms saving not required.
 EventSelector        INFO  Enter McEventSelector Initialization 
 AthenaEventLoopMgr   INFO Setup EventSelector service EventSelector
@@ -53,64 +58,64 @@ EventPersistenc...   INFO Added successfully Conversion service:McCnvSvc
 AthenaEventLoopMgr   INFO   ===>>>  start of run 0    <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #0, run #0 0 events processed so far  <<<===
 ClassIDSvc           INFO  getRegistryEntries: read 104 CLIDRegistry entries for module ALL
-xAODTestReadSym...   INFO C (as AuxElement): 1000
+xAODTestReadSym...   INFO C (as AuxElement): 1000; S 0
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #0 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #1, run #0 1 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 2000
+xAODTestReadSym...   INFO C (as AuxElement): 2000; S 100
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #0 2 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #2, run #0 2 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 3000
+xAODTestReadSym...   INFO C (as AuxElement): 3000; S 200
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #0 3 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #3, run #0 3 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 4000
+xAODTestReadSym...   INFO C (as AuxElement): 4000; S 300
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #0 4 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #4, run #0 4 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 5000
+xAODTestReadSym...   INFO C (as AuxElement): 5000; S 400
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #0 5 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #5, run #0 5 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 6000
+xAODTestReadSym...   INFO C (as AuxElement): 6000; S 500
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #0 6 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #6, run #0 6 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 7000
+xAODTestReadSym...   INFO C (as AuxElement): 7000; S 600
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #0 7 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #7, run #0 7 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 8000
+xAODTestReadSym...   INFO C (as AuxElement): 8000; S 700
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #0 8 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #8, run #0 8 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 9000
+xAODTestReadSym...   INFO C (as AuxElement): 9000; S 800
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #0 9 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #9, run #0 9 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 10000
+xAODTestReadSym...   INFO C (as AuxElement): 10000; S 900
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #0 10 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #10, run #0 10 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 11000
+xAODTestReadSym...   INFO C (as AuxElement): 11000; S 1000
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #0 11 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #11, run #0 11 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 12000
+xAODTestReadSym...   INFO C (as AuxElement): 12000; S 1100
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #0 12 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #12, run #0 12 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 13000
+xAODTestReadSym...   INFO C (as AuxElement): 13000; S 1200
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #0 13 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #13, run #0 13 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 14000
+xAODTestReadSym...   INFO C (as AuxElement): 14000; S 1300
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #0 14 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #14, run #0 14 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 15000
+xAODTestReadSym...   INFO C (as AuxElement): 15000; S 1400
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #0 15 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #15, run #0 15 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 16000
+xAODTestReadSym...   INFO C (as AuxElement): 16000; S 1500
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #0 16 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #16, run #0 16 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 17000
+xAODTestReadSym...   INFO C (as AuxElement): 17000; S 1600
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #0 17 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #17, run #0 17 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 18000
+xAODTestReadSym...   INFO C (as AuxElement): 18000; S 1700
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #0 18 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #18, run #0 18 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 19000
+xAODTestReadSym...   INFO C (as AuxElement): 19000; S 1800
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #0 19 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #19, run #0 19 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 20000
+xAODTestReadSym...   INFO C (as AuxElement): 20000; S 1900
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #0 20 events processed so far  <<<===
 Domain[ROOT_All] Info >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr       INFO Application Manager Stopped successfully
diff --git a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1MT.ref b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1MT.ref
index 85e4e24bba88..bec36ac66379 100644
--- a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1MT.ref
+++ b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1MT.ref
@@ -1,7 +1,7 @@
-Thu Apr 20 20:24:37 CEST 2017
+Mon Apr 24 16:12:05 CEST 2017
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [WorkDir-22.0.0] [x86_64-slc6-gcc62-opt] [atlas-work3g/725f3a42d9] -- built on [2017-04-20T1906]
+Py:Athena            INFO using release [WorkDir-22.0.0] [x86_64-slc6-gcc62-dbg] [mt-sss/06ff187fe6] -- built on [2017-04-24T1528]
 Py:Athena            INFO including file "AthenaCommon/Bootstrap.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
@@ -9,15 +9,20 @@ Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "DataModelRunTests/xAODTestSymlinks1MT_jo.py"
 Py:Athena            INFO including file "DataModelRunTests/xAODTestSymlinks1_jo.py"
-Py:ConfigurableDb    INFO Read module info for 5294 configurables from 15 genConfDb files
-Py:ConfigurableDb    INFO No duplicates have been found: that's good !
+Py:ConfigurableDb    INFO Read module info for 5296 configurables from 12 genConfDb files
+Py:ConfigurableDb WARNING Found 1 duplicates among the 12 genConfDb files :
+Py:ConfigurableDb WARNING --------------------------------------------------
+Py:ConfigurableDb WARNING   -<component name>: <module> - [ <duplicates> ]
+Py:ConfigurableDb WARNING --------------------------------------------------
+Py:ConfigurableDb WARNING   -DMTest__xAODTestDecor: DataModelTestDataCommon.DataModelTestDataCommonConf - ['DataModelTestDataRead.DataModelTestDataReadConf']
+Py:ConfigurableDb WARNING Fix your cmt/requirements file !!
 Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v28r1)
-                                          running on lxplus005.cern.ch on Thu Apr 20 20:24:50 2017
+                                          running on lxplus068.cern.ch on Mon Apr 24 16:12:35 2017
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -35,27 +40,30 @@ PoolSvc                                            INFO io_register[PoolSvc](xml
 PoolSvc                                            INFO Set connectionsvc retry/timeout/IDLE timeout to  'ConnectionRetrialPeriod':300/ 'ConnectionRetrialTimeOut':3600/ 'ConnectionTimeOut':5 seconds with connection cleanup disabled
 PoolSvc                                            INFO Frontier compression level set to 5
 DBReplicaSvc                                       INFO Frontier server at (serverurl=http://atlasfrontier-local.cern.ch:8000/atlr)(serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://lcgft-atlas.gridpp.rl.ac.uk:3128/frontierATLAS)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca-proxy-meyrin.cern.ch:3128)(proxyurl=http://ca-proxy-wigner.cern.ch:3128) will be considered for COOL data
-DBReplicaSvc                                       INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2017-04-18T2225/Athena/22.0.0/InstallArea/x86_64-slc6-gcc62-opt/share/dbreplica.config
-DBReplicaSvc                                       INFO Total of 10 servers found for host lxplus005.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                       INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2017-04-23T2225/Athena/22.0.0/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
+DBReplicaSvc                                       INFO Total of 10 servers found for host lxplus068.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                            INFO Successfully setup replica sorting algorithm
 PoolSvc                                            INFO Setting up APR FileCatalog and Streams
 PoolSvc                                            INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
 DbSession Info     Open     DbSession    
 Domain[ROOT_All] Info >   Access   DbDomain     READ      [ROOT_All] 
 PoolSvc                                            INFO Re-initializing PoolSvc
-ClassIDSvc                                         INFO  getRegistryEntries: read 6549 CLIDRegistry entries for module ALL
-ClassIDSvc                                         INFO  getRegistryEntries: read 52 CLIDRegistry entries for module ALL
+ClassIDSvc                                         INFO  getRegistryEntries: read 6913 CLIDRegistry entries for module ALL
+ClassIDSvc                                         INFO  getRegistryEntries: read 57 CLIDRegistry entries for module ALL
 SGInputLoader                                      INFO Will preload the following DataObjects:
 ThreadPoolSvc                                      INFO no thread init tools attached
 ForwardSchedulerSvc                                INFO Activating scheduler in a separate thread
 ForwardSchedulerSvc                                INFO Waiting for ForwardSchedulerSvc to activate
 ForwardSchedulerSvc                                INFO Start checking the actionsQueue
 ForwardSchedulerSvc                             WARNING Property MaxEventsInFlight was set. This works but it's deprecated. Please migrate your code options files.
-ForwardSchedulerSvc                                INFO Found 8 algorithms
+ForwardSchedulerSvc                                INFO Found 9 algorithms
 ForwardSchedulerSvc                                INFO outputs:
-('DMTest::C','cinfo')
-('SG::AuxElement','cinfo')
 ('DMTest::CVec','cvec')
+('SG::AuxElement','cinfo')
+('DMTest::S2','S2alias')
+('DMTest::S1','S2')
+('DMTest::C','cinfo')
+('DMTest::S2','S2')
 
 ForwardSchedulerSvc                                INFO Data Dependencies for Algorithms:
   BeginIncFiringAlg
@@ -72,8 +80,16 @@ ForwardSchedulerSvc                                INFO Data Dependencies for Al
     o INPUT  ('DMTest::CVec','cvec')
     o OUTPUT ('SG::AuxElement','cinfo')
     o OUTPUT ('DMTest::C','cinfo')
+  xAODTestWriteSymlinks
+    o INPUT  ('EventInfo','McEventInfo')
+    o OUTPUT ('DMTest::S2','S2')
+    o OUTPUT ('DMTest::S1','S2')
+    o OUTPUT ('DMTest::S2','S2alias')
   xAODTestReadSymlink
     o INPUT  ('SG::AuxElement','cinfo')
+    o INPUT  ('DMTest::S1','S2')
+    o INPUT  ('DMTest::S2','S2')
+    o INPUT  ('DMTest::S2','S2alias')
   EndIncFiringAlg
       none
   IncidentProcAlg2
@@ -82,6 +98,7 @@ ForwardSchedulerSvc                                INFO Will attribute the follo
    o ('EventInfo','McEventInfo')    required by Algorithm: 
        * xAODTestWriteCVec
        * xAODTestWriteCInfo
+       * xAODTestWriteSymlinks
 ForwardSchedulerSvc                                INFO Concurrency level information:
 ForwardSchedulerSvc                                INFO  o Number of events in flight:  'MaxEventsInFlight':1
 ForwardSchedulerSvc                                INFO  o Number of algorithms in flight:  'MaxAlgosInFlight':1
@@ -96,66 +113,66 @@ EventPersistencySvc                                INFO Added successfully Conve
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start of run 0    <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #0, run #0 on slot 0,  0 events processed so far  <<<===
 ClassIDSvc                              0   0      INFO  getRegistryEntries: read 104 CLIDRegistry entries for module ALL
-xAODTestReadSymlink                     0   0      INFO C (as AuxElement): 1000
+xAODTestReadSymlink                     0   0      INFO C (as AuxElement): 1000; S 0
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #0, run #0 on slot 0,  1 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #1, run #0 on slot 0,  1 events processed so far  <<<===
-xAODTestReadSymlink                     1   0      INFO C (as AuxElement): 2000
+xAODTestReadSymlink                     1   0      INFO C (as AuxElement): 2000; S 100
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #1, run #0 on slot 0,  2 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #2, run #0 on slot 0,  2 events processed so far  <<<===
-xAODTestReadSymlink                     2   0      INFO C (as AuxElement): 3000
+xAODTestReadSymlink                     2   0      INFO C (as AuxElement): 3000; S 200
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #2, run #0 on slot 0,  3 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #3, run #0 on slot 0,  3 events processed so far  <<<===
-xAODTestReadSymlink                     3   0      INFO C (as AuxElement): 4000
+xAODTestReadSymlink                     3   0      INFO C (as AuxElement): 4000; S 300
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #3, run #0 on slot 0,  4 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #4, run #0 on slot 0,  4 events processed so far  <<<===
-xAODTestReadSymlink                     4   0      INFO C (as AuxElement): 5000
+xAODTestReadSymlink                     4   0      INFO C (as AuxElement): 5000; S 400
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #4, run #0 on slot 0,  5 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #5, run #0 on slot 0,  5 events processed so far  <<<===
-xAODTestReadSymlink                     5   0      INFO C (as AuxElement): 6000
+xAODTestReadSymlink                     5   0      INFO C (as AuxElement): 6000; S 500
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #5, run #0 on slot 0,  6 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #6, run #0 on slot 0,  6 events processed so far  <<<===
-xAODTestReadSymlink                     6   0      INFO C (as AuxElement): 7000
+xAODTestReadSymlink                     6   0      INFO C (as AuxElement): 7000; S 600
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #6, run #0 on slot 0,  7 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #7, run #0 on slot 0,  7 events processed so far  <<<===
-xAODTestReadSymlink                     7   0      INFO C (as AuxElement): 8000
+xAODTestReadSymlink                     7   0      INFO C (as AuxElement): 8000; S 700
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #7, run #0 on slot 0,  8 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #8, run #0 on slot 0,  8 events processed so far  <<<===
-xAODTestReadSymlink                     8   0      INFO C (as AuxElement): 9000
+xAODTestReadSymlink                     8   0      INFO C (as AuxElement): 9000; S 800
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #8, run #0 on slot 0,  9 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #9, run #0 on slot 0,  9 events processed so far  <<<===
-xAODTestReadSymlink                     9   0      INFO C (as AuxElement): 10000
+xAODTestReadSymlink                     9   0      INFO C (as AuxElement): 10000; S 900
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #9, run #0 on slot 0,  10 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #10, run #0 on slot 0,  10 events processed so far  <<<===
-xAODTestReadSymlink                     10  0      INFO C (as AuxElement): 11000
+xAODTestReadSymlink                     10  0      INFO C (as AuxElement): 11000; S 1000
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #10, run #0 on slot 0,  11 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #11, run #0 on slot 0,  11 events processed so far  <<<===
-xAODTestReadSymlink                     11  0      INFO C (as AuxElement): 12000
+xAODTestReadSymlink                     11  0      INFO C (as AuxElement): 12000; S 1100
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #11, run #0 on slot 0,  12 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #12, run #0 on slot 0,  12 events processed so far  <<<===
-xAODTestReadSymlink                     12  0      INFO C (as AuxElement): 13000
+xAODTestReadSymlink                     12  0      INFO C (as AuxElement): 13000; S 1200
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #12, run #0 on slot 0,  13 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #13, run #0 on slot 0,  13 events processed so far  <<<===
-xAODTestReadSymlink                     13  0      INFO C (as AuxElement): 14000
+xAODTestReadSymlink                     13  0      INFO C (as AuxElement): 14000; S 1300
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #13, run #0 on slot 0,  14 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #14, run #0 on slot 0,  14 events processed so far  <<<===
-xAODTestReadSymlink                     14  0      INFO C (as AuxElement): 15000
+xAODTestReadSymlink                     14  0      INFO C (as AuxElement): 15000; S 1400
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #14, run #0 on slot 0,  15 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #15, run #0 on slot 0,  15 events processed so far  <<<===
-xAODTestReadSymlink                     15  0      INFO C (as AuxElement): 16000
+xAODTestReadSymlink                     15  0      INFO C (as AuxElement): 16000; S 1500
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #15, run #0 on slot 0,  16 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #16, run #0 on slot 0,  16 events processed so far  <<<===
-xAODTestReadSymlink                     16  0      INFO C (as AuxElement): 17000
+xAODTestReadSymlink                     16  0      INFO C (as AuxElement): 17000; S 1600
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #16, run #0 on slot 0,  17 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #17, run #0 on slot 0,  17 events processed so far  <<<===
-xAODTestReadSymlink                     17  0      INFO C (as AuxElement): 18000
+xAODTestReadSymlink                     17  0      INFO C (as AuxElement): 18000; S 1700
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #17, run #0 on slot 0,  18 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #18, run #0 on slot 0,  18 events processed so far  <<<===
-xAODTestReadSymlink                     18  0      INFO C (as AuxElement): 19000
+xAODTestReadSymlink                     18  0      INFO C (as AuxElement): 19000; S 1800
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #18, run #0 on slot 0,  19 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #19, run #0 on slot 0,  19 events processed so far  <<<===
-xAODTestReadSymlink                     19  0      INFO C (as AuxElement): 20000
+xAODTestReadSymlink                     19  0      INFO C (as AuxElement): 20000; S 1900
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #19, run #0 on slot 0,  20 events processed so far  <<<===
-AthenaHiveEventLoopMgr                             INFO ---> Loop Finished (seconds): 0.0441599
+AthenaHiveEventLoopMgr                             INFO ---> Loop Finished (seconds): 0.353586
 Domain[ROOT_All] Info >   Deaccess DbDomain     READ      [ROOT_All] 
 ApplicationMgr                                     INFO Application Manager Stopped successfully
 IncidentProcAlg1                                   INFO Finalize
@@ -164,7 +181,7 @@ IncidentProcAlg2                                   INFO Finalize
 EventSelector                                      INFO finalize
 ForwardSchedulerSvc                                INFO Joining Scheduler thread
 ForwardSchedulerSvc                     19  0      INFO Terminating thread-pool resources
-TimelineSvc                                        INFO Outputting timeline with 160 entries to file  'TimelineFile':timeline.csv
+TimelineSvc                                        INFO Outputting timeline with 180 entries to file  'TimelineFile':timeline.csv
 EventDataSvc                                       INFO Finalizing EventDataSvc - package version StoreGate-00-00-00
 AthDictLoaderSvc                                   INFO in finalize...
 ToolSvc                                            INFO Removing all tools created by ToolSvc
diff --git a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1_jo.py b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1_jo.py
index b2fcac96491b..e819e9f2c229 100644
--- a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1_jo.py
+++ b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks1_jo.py
@@ -51,9 +51,11 @@ from DataModelTestDataCommon.DataModelTestDataCommonConf import \
      DMTest__xAODTestReadSymlink
 from DataModelTestDataWrite.DataModelTestDataWriteConf import \
      DMTest__xAODTestWriteCVec, \
-     DMTest__xAODTestWriteCInfo
+     DMTest__xAODTestWriteCInfo, \
+     DMTest__xAODTestWriteSymlinks
 topSequence += DMTest__xAODTestWriteCVec ("xAODTestWriteCVec")
 topSequence += DMTest__xAODTestWriteCInfo ("xAODTestWriteCInfo")
+topSequence += DMTest__xAODTestWriteSymlinks ("xAODTestWriteSymlinks")
 topSequence += DMTest__xAODTestReadSymlink ("xAODTestReadSymlink", Key='cinfo')
 
 
diff --git a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2.ref b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2.ref
index 35e97761a040..fcff043e09c3 100644
--- a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2.ref
+++ b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2.ref
@@ -1,20 +1,20 @@
-Fri Apr  7 03:45:19 CEST 2017
+Sat Apr  8 04:35:07 CEST 2017
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [AthenaWorkDir-22.0.0] [x86_64-slc6-gcc62-dbg] [mt-sss/4765e91ead] -- built on [2017-04-07T0230]
+Py:Athena            INFO using release [AthenaWorkDir-22.0.0] [x86_64-slc6-gcc62-dbg] [mt-sss/22868139e4] -- built on [2017-04-07T2349]
 Py:Athena            INFO including file "AthenaCommon/Bootstrap.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
 [?1034hPy:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "DataModelRunTests/xAODTestSymlinks2_jo.py"
-Py:ConfigurableDb    INFO Read module info for 5290 configurables from 30 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5291 configurables from 30 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v28r1)
-                                          running on lxplus042.cern.ch on Fri Apr  7 03:45:41 2017
+                                          running on lxplus068.cern.ch on Sat Apr  8 04:35:29 2017
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
@@ -22,12 +22,12 @@ ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to leve
 StatusCodeSvc        INFO initialize
 AthDictLoaderSvc     INFO in initialize...
 AthDictLoaderSvc     INFO acquired Dso-registry
-ClassIDSvc           INFO  getRegistryEntries: read 8862 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 8868 CLIDRegistry entries for module ALL
 ChronoStatSvc        INFO  Number of skipped events for MemStat-1
 CoreDumpSvc          INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc          INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
 AthenaEventLoopMgr   INFO Initializing AthenaEventLoopMgr - package version AthenaServices-00-00-00
-ClassIDSvc           INFO  getRegistryEntries: read 358 CLIDRegistry entries for module ALL
+ClassIDSvc           INFO  getRegistryEntries: read 360 CLIDRegistry entries for module ALL
 MetaDataSvc          INFO Initializing MetaDataSvc - package version AthenaServices-00-00-00
 AthenaPoolCnvSvc     INFO Initializing AthenaPoolCnvSvc - package version AthenaPoolCnvSvc-00-00-00
 PoolSvc              INFO Initializing PoolSvc - package version PoolSvc-00-00-00
@@ -36,7 +36,7 @@ PoolSvc              INFO Set connectionsvc retry/timeout/IDLE timeout to  'Conn
 PoolSvc              INFO Frontier compression level set to 5
 DBReplicaSvc         INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://aiatlas036.cern.ch:8000/atlr)(serverurl=http://aiatlas034.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(serverurl=http://ccfrontier01.in2p3.fr:23128/ccin2p3-AtlasFrontier)(serverurl=http://ccfrontier05.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca20.cern.ch:3128)(proxyurl=http://ca17.cern.ch:3128)(proxyurl=http://atlast0fsquid.cern.ch:3128)(proxyurl=http://atlassquid1.cern.ch:3128)(proxyurl=http://atlassquid2.cern.ch:3128)(proxyurl=http://atlassquid4.cern.ch:3128) will be considered for COOL data
 DBReplicaSvc         INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2017-04-05T2225/Athena/22.0.0/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
-DBReplicaSvc         INFO Total of 10 servers found for host lxplus042.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc         INFO Total of 10 servers found for host lxplus068.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc              INFO Successfully setup replica sorting algorithm
 PoolSvc              INFO Setting up APR FileCatalog and Streams
 PoolSvc              INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
@@ -83,65 +83,65 @@ AthenaPoolConve...   INFO massageEventInfo: unable to get OverrideRunNumberFromI
 AthenaEventLoopMgr   INFO   ===>>>  start of run 0    <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #0, run #0 0 events processed so far  <<<===
 ClassIDSvc           INFO  getRegistryEntries: read 11 CLIDRegistry entries for module ALL
-xAODTestReadSym...   INFO C (as AuxElement): 1000
-ClassIDSvc           INFO  getRegistryEntries: read 48 CLIDRegistry entries for module ALL
+xAODTestReadSym...   INFO C (as AuxElement): 1000; S 0
+ClassIDSvc           INFO  getRegistryEntries: read 50 CLIDRegistry entries for module ALL
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #0, run #0 1 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #1, run #0 1 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 2000
+xAODTestReadSym...   INFO C (as AuxElement): 2000; S 100
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #1, run #0 2 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #2, run #0 2 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 3000
+xAODTestReadSym...   INFO C (as AuxElement): 3000; S 200
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #2, run #0 3 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #3, run #0 3 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 4000
+xAODTestReadSym...   INFO C (as AuxElement): 4000; S 300
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #3, run #0 4 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #4, run #0 4 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 5000
+xAODTestReadSym...   INFO C (as AuxElement): 5000; S 400
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #4, run #0 5 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #5, run #0 5 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 6000
+xAODTestReadSym...   INFO C (as AuxElement): 6000; S 500
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #5, run #0 6 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #6, run #0 6 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 7000
+xAODTestReadSym...   INFO C (as AuxElement): 7000; S 600
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #6, run #0 7 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #7, run #0 7 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 8000
+xAODTestReadSym...   INFO C (as AuxElement): 8000; S 700
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #7, run #0 8 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #8, run #0 8 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 9000
+xAODTestReadSym...   INFO C (as AuxElement): 9000; S 800
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #8, run #0 9 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #9, run #0 9 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 10000
+xAODTestReadSym...   INFO C (as AuxElement): 10000; S 900
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #9, run #0 10 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #10, run #0 10 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 11000
+xAODTestReadSym...   INFO C (as AuxElement): 11000; S 1000
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #10, run #0 11 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #11, run #0 11 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 12000
+xAODTestReadSym...   INFO C (as AuxElement): 12000; S 1100
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #11, run #0 12 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #12, run #0 12 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 13000
+xAODTestReadSym...   INFO C (as AuxElement): 13000; S 1200
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #12, run #0 13 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #13, run #0 13 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 14000
+xAODTestReadSym...   INFO C (as AuxElement): 14000; S 1300
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #13, run #0 14 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #14, run #0 14 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 15000
+xAODTestReadSym...   INFO C (as AuxElement): 15000; S 1400
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #14, run #0 15 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #15, run #0 15 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 16000
+xAODTestReadSym...   INFO C (as AuxElement): 16000; S 1500
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #15, run #0 16 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #16, run #0 16 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 17000
+xAODTestReadSym...   INFO C (as AuxElement): 17000; S 1600
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #16, run #0 17 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #17, run #0 17 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 18000
+xAODTestReadSym...   INFO C (as AuxElement): 18000; S 1700
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #17, run #0 18 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #18, run #0 18 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 19000
+xAODTestReadSym...   INFO C (as AuxElement): 19000; S 1800
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #18, run #0 19 events processed so far  <<<===
 AthenaEventLoopMgr   INFO   ===>>>  start processing event #19, run #0 19 events processed so far  <<<===
-xAODTestReadSym...   INFO C (as AuxElement): 20000
+xAODTestReadSym...   INFO C (as AuxElement): 20000; S 1900
 AthenaEventLoopMgr   INFO   ===>>>  done processing event #19, run #0 20 events processed so far  <<<===
 xaoddata.root Info Database being retired...
 Domain[ROOT_All] Info ->  Deaccess DbDatabase   READ      [ROOT_All] C99A5126-381F-7F4F-B568-3D70CAC1AC25
diff --git a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2MT.ref b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2MT.ref
index fd1c6f485f64..560c67e50c0a 100644
--- a/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2MT.ref
+++ b/Control/DataModelTest/DataModelRunTests/share/xAODTestSymlinks2MT.ref
@@ -1,7 +1,7 @@
-Fri Apr  7 03:44:23 CEST 2017
+Sat Apr  8 03:23:26 CEST 2017
 Preloading tcmalloc_minimal.so
 Py:Athena            INFO including file "AthenaCommon/Preparation.py"
-Py:Athena            INFO using release [AthenaWorkDir-22.0.0] [x86_64-slc6-gcc62-dbg] [mt-sss/4765e91ead] -- built on [2017-04-07T0230]
+Py:Athena            INFO using release [AthenaWorkDir-22.0.0] [x86_64-slc6-gcc62-dbg] [mt-sss/22868139e4] -- built on [2017-04-07T2349]
 Py:Athena            INFO including file "AthenaCommon/Bootstrap.py"
 Py:Athena            INFO including file "AthenaCommon/Atlas.UnixStandardJob.py"
 Py:Athena            INFO executing ROOT6Setup
@@ -9,7 +9,7 @@ Py:Athena            INFO executing ROOT6Setup
 Py:Athena            INFO including file "AthenaCommon/Execution.py"
 Py:Athena            INFO including file "DataModelRunTests/xAODTestSymlinks2MT_jo.py"
 Py:Athena            INFO including file "DataModelRunTests/xAODTestSymlinks2_jo.py"
-Py:ConfigurableDb    INFO Read module info for 5290 configurables from 30 genConfDb files
+Py:ConfigurableDb    INFO Read module info for 5291 configurables from 30 genConfDb files
 Py:ConfigurableDb    INFO No duplicates have been found: that's good !
 Py:Athena            INFO including file "AthenaCommon/runbatch.py"
 ApplicationMgr       INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
@@ -17,14 +17,14 @@ MessageSvc           INFO Activating in a separate thread
 ApplicationMgr    SUCCESS 
 ====================================================================================================================================
                                                    Welcome to ApplicationMgr (GaudiCoreSvc v28r1)
-                                          running on lxplus042.cern.ch on Fri Apr  7 03:44:44 2017
+                                          running on lxplus068.cern.ch on Sat Apr  8 03:23:48 2017
 ====================================================================================================================================
 ApplicationMgr       INFO Successfully loaded modules : AthenaServices
 ApplicationMgr       INFO Application Manager Configured successfully
 ApplicationMgr                                     INFO Updating Gaudi::PluginService::SetDebug(level) to level= 'PluginDebugLevel':0
 AthDictLoaderSvc                                   INFO in initialize...
 AthDictLoaderSvc                                   INFO acquired Dso-registry
-ClassIDSvc                                         INFO  getRegistryEntries: read 9237 CLIDRegistry entries for module ALL
+ClassIDSvc                                         INFO  getRegistryEntries: read 9243 CLIDRegistry entries for module ALL
 ChronoStatSvc                                      INFO  Number of skipped events for MemStat-1
 CoreDumpSvc                                        INFO install f-a-t-a-l handler... (flag = -1)
 CoreDumpSvc                                        INFO Handling signals: 11(Segmentation fault) 7(Bus error) 4(Illegal instruction) 8(Floating point exception) 
@@ -37,7 +37,7 @@ PoolSvc                                            INFO Set connectionsvc retry/
 PoolSvc                                            INFO Frontier compression level set to 5
 DBReplicaSvc                                       INFO Frontier server at (serverurl=http://atlasfrontier-ai.cern.ch:8000/atlr)(serverurl=http://aiatlas036.cern.ch:8000/atlr)(serverurl=http://aiatlas034.cern.ch:8000/atlr)(serverurl=http://ccfrontier.in2p3.fr:23128/ccin2p3-AtlasFrontier)(serverurl=http://ccfrontier01.in2p3.fr:23128/ccin2p3-AtlasFrontier)(serverurl=http://ccfrontier05.in2p3.fr:23128/ccin2p3-AtlasFrontier)(proxyurl=http://ca-proxy.cern.ch:3128)(proxyurl=http://ca20.cern.ch:3128)(proxyurl=http://ca17.cern.ch:3128)(proxyurl=http://atlast0fsquid.cern.ch:3128)(proxyurl=http://atlassquid1.cern.ch:3128)(proxyurl=http://atlassquid2.cern.ch:3128)(proxyurl=http://atlassquid4.cern.ch:3128) will be considered for COOL data
 DBReplicaSvc                                       INFO Read replica configuration from /cvmfs/atlas-nightlies.cern.ch/repo/sw/master/2017-04-05T2225/Athena/22.0.0/InstallArea/x86_64-slc6-gcc62-dbg/share/dbreplica.config
-DBReplicaSvc                                       INFO Total of 10 servers found for host lxplus042.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
+DBReplicaSvc                                       INFO Total of 10 servers found for host lxplus068.cern.ch [ATLF ATLAS_COOLPROD atlas_dd ATLAS_CONFIG INT8R INTR ATONR_COOL ATONR_CONF DEVDB11 ATLF ]
 PoolSvc                                            INFO Successfully setup replica sorting algorithm
 PoolSvc                                            INFO Setting up APR FileCatalog and Streams
 PoolSvc                                            INFO POOL WriteCatalog is xmlcatalog_file:PoolFileCatalog.xml
@@ -63,7 +63,7 @@ RootCollection Info File xaoddata.root opened
 ImplicitCollection Info Opened the implicit collection with connection string "PFN:xaoddata.root"
 ImplicitCollection Info and a name "POOLContainer(DataHeader)"
 AthenaPoolAddressProviderSvc                       INFO Initializing AthenaPoolAddressProviderSvc - package version EventSelectorAthenaPool-00-00-00
-ClassIDSvc                                         INFO  getRegistryEntries: read 1425 CLIDRegistry entries for module ALL
+ClassIDSvc                                         INFO  getRegistryEntries: read 1427 CLIDRegistry entries for module ALL
 SGInputLoader                                      INFO Will preload the following DataObjects:
 ThreadPoolSvc                                      INFO no thread init tools attached
 ForwardSchedulerSvc                                INFO Activating scheduler in a separate thread
@@ -82,6 +82,9 @@ ForwardSchedulerSvc                                INFO Data Dependencies for Al
       none
   xAODTestReadSymlink
     o INPUT  ('SG::AuxElement','cinfo')
+    o INPUT  ('DMTest::S1','S2')
+    o INPUT  ('DMTest::S2','S2')
+    o INPUT  ('DMTest::S2','S2alias')
   EndIncFiringAlg
       none
   IncidentProcAlg2
@@ -89,6 +92,12 @@ ForwardSchedulerSvc                                INFO Data Dependencies for Al
 ForwardSchedulerSvc                                INFO Will attribute the following unmet INPUT dependencies to "SGInputLoader/SGInputLoader" Algorithm
    o ('SG::AuxElement','cinfo')    required by Algorithm: 
        * xAODTestReadSymlink
+   o ('DMTest::S1','S2')    required by Algorithm: 
+       * xAODTestReadSymlink
+   o ('DMTest::S2','S2')    required by Algorithm: 
+       * xAODTestReadSymlink
+   o ('DMTest::S2','S2alias')    required by Algorithm: 
+       * xAODTestReadSymlink
 ForwardSchedulerSvc                                INFO Concurrency level information:
 ForwardSchedulerSvc                                INFO  o Number of events in flight:  'MaxEventsInFlight':1
 ForwardSchedulerSvc                                INFO  o Number of algorithms in flight:  'MaxAlgosInFlight':1
@@ -114,67 +123,67 @@ AthenaPoolConverter                                INFO massageEventInfo: unable
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start of run 0    <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #0, run #0 on slot 0,  0 events processed so far  <<<===
 ClassIDSvc                              0   0      INFO  getRegistryEntries: read 11 CLIDRegistry entries for module ALL
-xAODTestReadSymlink                     0   0      INFO C (as AuxElement): 1000
-ClassIDSvc                              0   0      INFO  getRegistryEntries: read 48 CLIDRegistry entries for module ALL
+xAODTestReadSymlink                     0   0      INFO C (as AuxElement): 1000; S 0
+ClassIDSvc                              0   0      INFO  getRegistryEntries: read 50 CLIDRegistry entries for module ALL
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #0, run #0 on slot 0,  1 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #1, run #0 on slot 0,  1 events processed so far  <<<===
-xAODTestReadSymlink                     1   0      INFO C (as AuxElement): 2000
+xAODTestReadSymlink                     1   0      INFO C (as AuxElement): 2000; S 100
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #1, run #0 on slot 0,  2 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #2, run #0 on slot 0,  2 events processed so far  <<<===
-xAODTestReadSymlink                     2   0      INFO C (as AuxElement): 3000
+xAODTestReadSymlink                     2   0      INFO C (as AuxElement): 3000; S 200
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #2, run #0 on slot 0,  3 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #3, run #0 on slot 0,  3 events processed so far  <<<===
-xAODTestReadSymlink                     3   0      INFO C (as AuxElement): 4000
+xAODTestReadSymlink                     3   0      INFO C (as AuxElement): 4000; S 300
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #3, run #0 on slot 0,  4 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #4, run #0 on slot 0,  4 events processed so far  <<<===
-xAODTestReadSymlink                     4   0      INFO C (as AuxElement): 5000
+xAODTestReadSymlink                     4   0      INFO C (as AuxElement): 5000; S 400
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #4, run #0 on slot 0,  5 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #5, run #0 on slot 0,  5 events processed so far  <<<===
-xAODTestReadSymlink                     5   0      INFO C (as AuxElement): 6000
+xAODTestReadSymlink                     5   0      INFO C (as AuxElement): 6000; S 500
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #5, run #0 on slot 0,  6 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #6, run #0 on slot 0,  6 events processed so far  <<<===
-xAODTestReadSymlink                     6   0      INFO C (as AuxElement): 7000
+xAODTestReadSymlink                     6   0      INFO C (as AuxElement): 7000; S 600
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #6, run #0 on slot 0,  7 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #7, run #0 on slot 0,  7 events processed so far  <<<===
-xAODTestReadSymlink                     7   0      INFO C (as AuxElement): 8000
+xAODTestReadSymlink                     7   0      INFO C (as AuxElement): 8000; S 700
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #7, run #0 on slot 0,  8 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #8, run #0 on slot 0,  8 events processed so far  <<<===
-xAODTestReadSymlink                     8   0      INFO C (as AuxElement): 9000
+xAODTestReadSymlink                     8   0      INFO C (as AuxElement): 9000; S 800
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #8, run #0 on slot 0,  9 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #9, run #0 on slot 0,  9 events processed so far  <<<===
-xAODTestReadSymlink                     9   0      INFO C (as AuxElement): 10000
+xAODTestReadSymlink                     9   0      INFO C (as AuxElement): 10000; S 900
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #9, run #0 on slot 0,  10 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #10, run #0 on slot 0,  10 events processed so far  <<<===
-xAODTestReadSymlink                     10  0      INFO C (as AuxElement): 11000
+xAODTestReadSymlink                     10  0      INFO C (as AuxElement): 11000; S 1000
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #10, run #0 on slot 0,  11 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #11, run #0 on slot 0,  11 events processed so far  <<<===
-xAODTestReadSymlink                     11  0      INFO C (as AuxElement): 12000
+xAODTestReadSymlink                     11  0      INFO C (as AuxElement): 12000; S 1100
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #11, run #0 on slot 0,  12 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #12, run #0 on slot 0,  12 events processed so far  <<<===
-xAODTestReadSymlink                     12  0      INFO C (as AuxElement): 13000
+xAODTestReadSymlink                     12  0      INFO C (as AuxElement): 13000; S 1200
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #12, run #0 on slot 0,  13 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #13, run #0 on slot 0,  13 events processed so far  <<<===
-xAODTestReadSymlink                     13  0      INFO C (as AuxElement): 14000
+xAODTestReadSymlink                     13  0      INFO C (as AuxElement): 14000; S 1300
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #13, run #0 on slot 0,  14 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #14, run #0 on slot 0,  14 events processed so far  <<<===
-xAODTestReadSymlink                     14  0      INFO C (as AuxElement): 15000
+xAODTestReadSymlink                     14  0      INFO C (as AuxElement): 15000; S 1400
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #14, run #0 on slot 0,  15 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #15, run #0 on slot 0,  15 events processed so far  <<<===
-xAODTestReadSymlink                     15  0      INFO C (as AuxElement): 16000
+xAODTestReadSymlink                     15  0      INFO C (as AuxElement): 16000; S 1500
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #15, run #0 on slot 0,  16 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #16, run #0 on slot 0,  16 events processed so far  <<<===
-xAODTestReadSymlink                     16  0      INFO C (as AuxElement): 17000
+xAODTestReadSymlink                     16  0      INFO C (as AuxElement): 17000; S 1600
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #16, run #0 on slot 0,  17 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #17, run #0 on slot 0,  17 events processed so far  <<<===
-xAODTestReadSymlink                     17  0      INFO C (as AuxElement): 18000
+xAODTestReadSymlink                     17  0      INFO C (as AuxElement): 18000; S 1700
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #17, run #0 on slot 0,  18 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #18, run #0 on slot 0,  18 events processed so far  <<<===
-xAODTestReadSymlink                     18  0      INFO C (as AuxElement): 19000
+xAODTestReadSymlink                     18  0      INFO C (as AuxElement): 19000; S 1800
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #18, run #0 on slot 0,  19 events processed so far  <<<===
 AthenaHiveEventLoopMgr                             INFO   ===>>>  start processing event #19, run #0 on slot 0,  19 events processed so far  <<<===
-xAODTestReadSymlink                     19  0      INFO C (as AuxElement): 20000
+xAODTestReadSymlink                     19  0      INFO C (as AuxElement): 20000; S 1900
 AthenaHiveEventLoopMgr                             INFO   ===>>>  done processing event #19, run #0 on slot 0,  20 events processed so far  <<<===
-AthenaHiveEventLoopMgr                             INFO ---> Loop Finished (seconds): 0.533476
+AthenaHiveEventLoopMgr                             INFO ---> Loop Finished (seconds): 0.438994
 xaoddata.root Info Database being retired...
 Domain[ROOT_All] Info ->  Deaccess DbDatabase   READ      [ROOT_All] C99A5126-381F-7F4F-B568-3D70CAC1AC25
 ApplicationMgr                                     INFO Application Manager Stopped successfully
diff --git a/Control/DataModelTest/DataModelRunTests/share/xAODTestWrite_jo.py b/Control/DataModelTest/DataModelRunTests/share/xAODTestWrite_jo.py
index d42be61fe514..edcb0eb62a5b 100755
--- a/Control/DataModelTest/DataModelRunTests/share/xAODTestWrite_jo.py
+++ b/Control/DataModelTest/DataModelRunTests/share/xAODTestWrite_jo.py
@@ -43,13 +43,15 @@ from DataModelTestDataWrite.DataModelTestDataWriteConf import \
      DMTest__xAODTestWriteCView, \
      DMTest__xAODTestWriteCInfo, \
      DMTest__xAODTestWriteCVecConst, \
-     DMTest__xAODTestWrite
+     DMTest__xAODTestWrite, \
+     DMTest__xAODTestWriteSymlinks
 topSequence += DMTest__xAODTestWriteCVec ("xAODTestWriteCVec")
 topSequence += DMTest__xAODTestWriteHVec ("xAODTestWriteHVec")
 topSequence += DMTest__xAODTestWriteCView ("xAODTestWriteCView")
 topSequence += DMTest__xAODTestWriteCInfo ("xAODTestWriteCInfo")
 topSequence += DMTest__xAODTestWrite ("xAODTestWrite")
 topSequence += DMTest__xAODTestWriteCVecConst ("xAODTestWriteCVecConst")
+topSequence += DMTest__xAODTestWriteSymlinks ("xAODTestWriteSymlinks")
 
 
 #--------------------------------------------------------------
@@ -80,6 +82,7 @@ fullItemList+=["DMTest::CInfoAuxContainer#cinfoAux."]
 fullItemList+=["DMTest::HVec#hvec"]
 fullItemList+=["DMTest::HAuxContainer#hvecAux."]
 fullItemList+=["DMTest::HView#hview"]
+fullItemList+=["DMTest::S2#S2"]
 
 from xAODEventFormatCnv.xAODEventFormatCnvConf import xAODMaker__EventFormatSvc
 fmtsvc = xAODMaker__EventFormatSvc (FormatNames = 
diff --git a/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/DataModelTestDataCommonDict.h b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/DataModelTestDataCommonDict.h
index 7c19696dd47c..64348ed784a8 100755
--- a/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/DataModelTestDataCommonDict.h
+++ b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/DataModelTestDataCommonDict.h
@@ -19,6 +19,8 @@
 
 #include "DataModelTestDataCommon/B.h"
 #include "DataModelTestDataCommon/D.h"
+#include "DataModelTestDataCommon/S1.h"
+#include "DataModelTestDataCommon/S2.h"
 #include "DataModelTestDataCommon/BAux.h"
 #include "DataModelTestDataCommon/BAuxStandalone.h"
 #include "DataModelTestDataCommon/BAuxVec.h"
diff --git a/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S1.h b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S1.h
new file mode 100644
index 000000000000..55bbb4a80daa
--- /dev/null
+++ b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S1.h
@@ -0,0 +1,39 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+/*
+ * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration.
+ */
+// $Id$
+/**
+ * @file DataModelTestDataCommon/S1.h
+ * @author scott snyder <snyder@bnl.gov>
+ * @date Apr, 2017
+ * @brief For symlink tests.
+ */
+
+
+#ifndef DATAMODELTESTDATACOMMON_S1_H
+#define DATAMODELTESTDATACOMMON_S1_H
+
+
+#include "SGTools/CLASS_DEF.h"
+
+
+namespace DMTest {
+
+
+class S1
+{
+public:
+  S1 (int x = 0) : m_x (x) {}
+  virtual ~S1() {}
+  int m_x;
+};
+
+
+} // namespace DMTest
+
+
+CLASS_DEF (DMTest::S1, 243020043, 0)
+
+
+#endif // not DATAMODELTESTDATACOMMON_S1_H
diff --git a/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S2.h b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S2.h
new file mode 100644
index 000000000000..a6d4771217a2
--- /dev/null
+++ b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/S2.h
@@ -0,0 +1,39 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+/*
+ * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration.
+ */
+// $Id$
+/**
+ * @file DataModelTestDataCommon/S2.h
+ * @author scott snyder <snyder@bnl.gov>
+ * @date Apr, 2017
+ * @brief For symlink tests.
+ */
+
+
+#ifndef DATAMODELTESTDATACOMMON_S2_H
+#define DATAMODELTESTDATACOMMON_S2_H
+
+
+#include "DataModelTestDataCommon/S1.h"
+#include "SGTools/CLASS_DEF.h"
+
+
+namespace DMTest {
+
+
+class S2
+  : public S1
+{
+public:
+  S2 (int x = 0) : S1(x) {}
+};
+
+
+} // namespace DMTest
+
+
+CLASS_DEF (DMTest::S2, 243020042, 0)
+
+
+#endif // not DATAMODELTESTDATACOMMON_S2_H
diff --git a/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/selection.xml b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/selection.xml
index 46c8ebbdccb6..6f6ac81d83d8 100755
--- a/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/selection.xml
+++ b/Control/DataModelTest/DataModelTestDataCommon/DataModelTestDataCommon/selection.xml
@@ -12,6 +12,8 @@
 
   <class name="DMTest::B"/>
   <class name="DMTest::D"/>
+  <class name="DMTest::S1" id="230C025C-A8BB-4C8A-9C82-04C9C3D92384"/>
+  <class name="DMTest::S2" id="EC2D9BCD-4B99-41EB-A799-82BAF48887FC"/>
   <class name="DMTest::BAux" id="B2751847-F5E8-456A-8C03-BCA9AEEB27DD"/>
   <class name="DMTest::BAuxStandalone" id="6378E4BD-95AD-4D46-9860-B15779893A75" IAuxStore="true"/>
   <class name="DataVector<DMTest::BAux>" id="734BB39F-4E7C-4637-8510-6716160242D4"/>
diff --git a/Control/DataModelTest/DataModelTestDataCommon/src/setConverterLibrary.cxx b/Control/DataModelTest/DataModelTestDataCommon/src/setConverterLibrary.cxx
index 1ba260949148..a7d3d3a75ec5 100644
--- a/Control/DataModelTest/DataModelTestDataCommon/src/setConverterLibrary.cxx
+++ b/Control/DataModelTest/DataModelTestDataCommon/src/setConverterLibrary.cxx
@@ -62,6 +62,8 @@ void setConverterLibrary (const std::string& lib)
   setConverterLibrary (9742, lib); // DMTest::GAuxContainer_v1
   setConverterLibrary (9744, lib); // DMTest::G_v1
   setConverterLibrary (9779, lib); // DMTest::CView_v1
+  setConverterLibrary (243020043, lib); // DMTest::S1
+  setConverterLibrary (243020042, lib); // DMTest::S2
   setPluginLibrary ("_PERS_DMTest::HVec_v1", lib);
   setPluginLibrary ("_PERS_DataVector<DMTest::H_v1>", lib);
 }
diff --git a/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.cxx b/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.cxx
index aebed797353b..31e3a94d7d75 100644
--- a/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.cxx
+++ b/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.cxx
@@ -22,12 +22,18 @@ xAODTestReadSymlink::xAODTestReadSymlink (const std::string &name, ISvcLocator *
   : AthReentrantAlgorithm (name, pSvcLocator)
 {
   declareProperty ("Key", m_objKey);
+  declareProperty ("S1Key", m_s1Key = "S2");
+  declareProperty ("S2Key", m_s2Key = "S2");
+  declareProperty ("AliasKey", m_aliasKey = "S2alias");
 }
 
 
 StatusCode xAODTestReadSymlink::initialize()
 {
   ATH_CHECK( m_objKey.initialize() );
+  ATH_CHECK( m_s1Key.initialize() );
+  ATH_CHECK( m_s2Key.initialize() );
+  ATH_CHECK( m_aliasKey.initialize() );
   return StatusCode::SUCCESS;
 }
 
@@ -35,9 +41,15 @@ StatusCode xAODTestReadSymlink::initialize()
 StatusCode xAODTestReadSymlink::execute_r (const EventContext& ctx) const
 {
   SG::ReadHandle<SG::AuxElement> c (m_objKey, ctx);
+  SG::ReadHandle<DMTest::S1> s1 (m_s1Key, ctx);
+  SG::ReadHandle<DMTest::S2> s2 (m_s2Key, ctx);
+  SG::ReadHandle<DMTest::S2> alias (m_aliasKey, ctx);
 
   static const SG::AuxElement::Accessor<int> anInt ("anInt");
-  ATH_MSG_INFO( "C (as AuxElement): " << anInt (*c) );
+  ATH_MSG_INFO( "C (as AuxElement): " << anInt (*c)
+                << "; S " << s2->m_x );
+  if (s2.cptr() != s1.cptr() || s2.cptr() != alias.cptr())
+    ATH_MSG_ERROR( " S objects mismatch! ");
   return StatusCode::SUCCESS;
 }
 
diff --git a/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.h b/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.h
index 9c793a392959..55561d6328b6 100644
--- a/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.h
+++ b/Control/DataModelTest/DataModelTestDataCommon/src/xAODTestReadSymlink.h
@@ -17,6 +17,8 @@
 #define DATAMODELTESTDATACOMMON_XAODTESTREADSYMLINK_H
 
 
+#include "DataModelTestDataCommon/S1.h"
+#include "DataModelTestDataCommon/S2.h"
 #include "AthenaBaseComps/AthReentrantAlgorithm.h"
 #include "StoreGate/ReadHandleKey.h"
 #include "AthContainers/AuxElement.h"
@@ -51,6 +53,10 @@ public:
 
 private:
   SG::ReadHandleKey<SG::AuxElement> m_objKey;
+
+  SG::ReadHandleKey<DMTest::S1> m_s1Key;
+  SG::ReadHandleKey<DMTest::S2> m_s2Key;
+  SG::ReadHandleKey<DMTest::S2> m_aliasKey;
 };
 
 
diff --git a/Control/DataModelTest/DataModelTestDataReadCnv/CMakeLists.txt b/Control/DataModelTest/DataModelTestDataReadCnv/CMakeLists.txt
index b47fbba44e92..a9ade5a93433 100644
--- a/Control/DataModelTest/DataModelTestDataReadCnv/CMakeLists.txt
+++ b/Control/DataModelTest/DataModelTestDataReadCnv/CMakeLists.txt
@@ -19,7 +19,7 @@ atlas_depends_on_subdirs( PUBLIC
 # Component(s) in the package:
 atlas_add_poolcnv_library( DataModelTestDataReadCnvPoolCnv
                            src/*.cxx
-                           FILES DataModelTestDataRead/BVec.h DataModelTestDataRead/BDer.h DataModelTestDataRead/DVec.h DataModelTestDataRead/DDer.h DataModelTestDataRead/ELVec.h DataModelTestDataRead/G.h DataModelTestDataRead/GVec.h DataModelTestDataRead/GAuxContainer.h DataModelTestDataRead/H.h DataModelTestDataRead/HVec.h DataModelTestDataRead/HAuxContainer.h DataModelTestDataRead/HView.h DataModelTestDataCommon/BAux.h DataModelTestDataCommon/BAuxVec.h DataModelTestDataCommon/BAuxStandalone.h DataModelTestDataCommon/C.h DataModelTestDataCommon/CVec.h DataModelTestDataCommon/CAuxContainer.h DataModelTestDataCommon/CView.h DataModelTestDataCommon/CVecWithData.h DataModelTestDataCommon/CInfoAuxContainer.h DataModelTestDataCommon/CTrigAuxContainer.h
-                           TYPES_WITH_NAMESPACE DMTest::BVec DMTest::DVec DMTest::DDer DMTest::BDer DMTest::ELVec DMTest::BAux DMTest::BAuxVec DMTest::BAuxStandalone DMTest::C DMTest::CVec DMTest::CAuxContainer DMTest::G DMTest::GVec DMTest::GAuxContainer DMTest::CVecWithData DMTest::CInfoAuxContainer DMTest::CTrigAuxContainer DMTest::CView DMTest::H DMTest::HVec DMTest::HAuxContainer DMTest::HView
+                           FILES DataModelTestDataRead/BVec.h DataModelTestDataRead/BDer.h DataModelTestDataRead/DVec.h DataModelTestDataRead/DDer.h DataModelTestDataRead/ELVec.h DataModelTestDataRead/G.h DataModelTestDataRead/GVec.h DataModelTestDataRead/GAuxContainer.h DataModelTestDataRead/H.h DataModelTestDataRead/HVec.h DataModelTestDataRead/HAuxContainer.h DataModelTestDataRead/HView.h DataModelTestDataCommon/BAux.h DataModelTestDataCommon/BAuxVec.h DataModelTestDataCommon/BAuxStandalone.h DataModelTestDataCommon/C.h DataModelTestDataCommon/CVec.h DataModelTestDataCommon/CAuxContainer.h DataModelTestDataCommon/CView.h DataModelTestDataCommon/CVecWithData.h DataModelTestDataCommon/CInfoAuxContainer.h DataModelTestDataCommon/CTrigAuxContainer.h DataModelTestDataCommon/S1.h DataModelTestDataCommon/S2.h
+                           TYPES_WITH_NAMESPACE DMTest::BVec DMTest::DVec DMTest::DDer DMTest::BDer DMTest::ELVec DMTest::BAux DMTest::BAuxVec DMTest::BAuxStandalone DMTest::C DMTest::CVec DMTest::CAuxContainer DMTest::G DMTest::GVec DMTest::GAuxContainer DMTest::CVecWithData DMTest::CInfoAuxContainer DMTest::CTrigAuxContainer DMTest::CView DMTest::H DMTest::HVec DMTest::HAuxContainer DMTest::HView DMTest::S1 DMTest::S2
                            LINK_LIBRARIES AthenaPoolUtilities AthenaKernel DataModelTestDataCommonLib DataModelTestDataReadLib AthenaPoolCnvSvcLib )
 
diff --git a/Control/DataModelTest/DataModelTestDataWrite/src/components/DataModelTestDataWrite_entries.cxx b/Control/DataModelTest/DataModelTestDataWrite/src/components/DataModelTestDataWrite_entries.cxx
index c85dd40d3ee7..3e924cc3cf57 100644
--- a/Control/DataModelTest/DataModelTestDataWrite/src/components/DataModelTestDataWrite_entries.cxx
+++ b/Control/DataModelTest/DataModelTestDataWrite/src/components/DataModelTestDataWrite_entries.cxx
@@ -15,6 +15,7 @@
 #include "../xAODTestWriteCView.h"
 #include "../xAODTestWriteCInfo.h"
 #include "../xAODTestWriteCVecConst.h"
+#include "../xAODTestWriteSymlinks.h"
 #include "../HLTResultWriter.h"
 
 DECLARE_NAMESPACE_ALGORITHM_FACTORY(DMTest, DMTestWrite)
@@ -25,5 +26,6 @@ DECLARE_NAMESPACE_ALGORITHM_FACTORY(DMTest, xAODTestWriteHVec)
 DECLARE_NAMESPACE_ALGORITHM_FACTORY(DMTest, xAODTestWriteCView)
 DECLARE_NAMESPACE_ALGORITHM_FACTORY(DMTest, xAODTestWriteCInfo)
 DECLARE_NAMESPACE_ALGORITHM_FACTORY(DMTest, xAODTestWriteCVecConst)
+DECLARE_NAMESPACE_ALGORITHM_FACTORY(DMTest, xAODTestWriteSymlinks)
 DECLARE_NAMESPACE_ALGORITHM_FACTORY(DMTest, HLTResultWriter)
 
diff --git a/Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.cxx b/Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.cxx
new file mode 100644
index 000000000000..549dfef439f0
--- /dev/null
+++ b/Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.cxx
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration.
+ */
+// $Id$
+/**
+ * @file DataModelTestDataWrite/src/xAODTestWriteSymlinks.cxx
+ * @author scott snyder <snyder@bnl.gov>
+ * @date Apr, 2017
+ * @brief Testing making symlinks/aliases through handles.
+ */
+
+
+#include "xAODTestWriteSymlinks.h"
+#include "EventInfo/EventID.h"
+#include "StoreGate/WriteHandle.h"
+#include "StoreGate/ReadHandle.h"
+
+
+namespace DMTest {
+
+
+/**
+ * @brief Constructor.
+ * @param name The algorithm name.
+ * @param svc The service locator.
+ */
+xAODTestWriteSymlinks::xAODTestWriteSymlinks (const std::string &name,
+                                              ISvcLocator *pSvcLocator)
+  : AthReentrantAlgorithm (name, pSvcLocator)
+{
+  declareProperty ("EventInfoKey", m_eventInfoKey = "McEventInfo");
+  declareProperty ("S2Key", m_s2Key = "S2");
+  declareProperty ("S1Key", m_s1Key = "S2");
+  declareProperty ("AliasKey", m_aliasKey = "S2alias");
+}
+
+
+/**
+ * @brief Algorithm initialization; called at the beginning of the job.
+ */
+StatusCode xAODTestWriteSymlinks::initialize()
+{
+  m_s1Key = m_s2Key.key();
+
+  ATH_CHECK( m_eventInfoKey.initialize() );
+  ATH_CHECK( m_s2Key.initialize() );
+  ATH_CHECK( m_s1Key.initialize() );
+  ATH_CHECK( m_aliasKey.initialize() );
+  return StatusCode::SUCCESS;
+}
+
+
+/**
+ * @brief Algorithm event processing.
+ */
+StatusCode xAODTestWriteSymlinks::execute_r (const EventContext& ctx) const
+{
+  SG::ReadHandle<EventInfo> eventInfo (m_eventInfoKey, ctx);
+  SG::WriteHandle<DMTest::S2> s2 (m_s2Key, ctx);
+  unsigned int eventNumber = eventInfo->event_ID()->event_number();
+  ATH_CHECK( s2.record (std::make_unique<DMTest::S2> (eventNumber*100)) );
+  ATH_CHECK( s2.alias (m_aliasKey) );
+  ATH_CHECK( s2.symLink (m_s1Key) );
+  return StatusCode::SUCCESS;
+}
+
+
+} // namespace DMTest
+
diff --git a/Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.h b/Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.h
new file mode 100644
index 000000000000..e58707d95c4c
--- /dev/null
+++ b/Control/DataModelTest/DataModelTestDataWrite/src/xAODTestWriteSymlinks.h
@@ -0,0 +1,74 @@
+// This file's extension implies that it's C, but it's really -*- C++ -*-.
+/*
+ * Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration.
+ */
+// $Id$
+/**
+ * @file DataModelTestDataWrite/src/xAODTestWriteSymlinks.h
+ * @author scott snyder <snyder@bnl.gov>
+ * @date Apr, 2017
+ * @brief Testing making symlinks/aliases through handles.
+ */
+
+
+#ifndef DATAMODELTESTDATAWRITE_XAODTESTWRITESYMLINKS_H
+#define DATAMODELTESTDATAWRITE_XAODTESTWRITESYMLINKS_H
+
+
+#include "DataModelTestDataCommon/S1.h"
+#include "DataModelTestDataCommon/S2.h"
+#include "AthenaBaseComps/AthReentrantAlgorithm.h"
+#include "EventInfo/EventInfo.h"
+#include "StoreGate/ReadHandleKey.h"
+#include "StoreGate/WriteHandleKey.h"
+
+
+namespace DMTest {
+
+
+/**
+ * @brief Algorithm testing making symlinks/aliases through handles.
+ */
+class xAODTestWriteSymlinks
+  : public AthReentrantAlgorithm
+{
+public:
+  /**
+   * @brief Constructor.
+   * @param name The algorithm name.
+   * @param svc The service locator.
+   */
+  xAODTestWriteSymlinks (const std::string &name, ISvcLocator *pSvcLocator);
+  
+
+  /**
+   * @brief Algorithm initialization; called at the beginning of the job.
+   */
+  virtual StatusCode initialize() override;
+
+
+  /**
+   * @brief Algorithm event processing.
+   */
+  virtual StatusCode execute_r (const EventContext& ctx) const override; 
+
+
+private:
+  /// EventInfo.
+  SG::ReadHandleKey<EventInfo> m_eventInfoKey;
+
+  /// Main output.
+  SG::WriteHandleKey<DMTest::S2> m_s2Key;
+
+  /// Symlink.
+  SG::WriteHandleKey<DMTest::S1> m_s1Key;
+
+  /// Alias.
+  SG::WriteHandleKey<DMTest::S2> m_aliasKey;
+};
+
+
+} // namespace DMTest
+
+
+#endif // not DATAMODELTESTDATAWRITE_XAODTESTWRITESYMLINKS_H
diff --git a/Control/DataModelTest/DataModelTestDataWriteCnv/CMakeLists.txt b/Control/DataModelTest/DataModelTestDataWriteCnv/CMakeLists.txt
index 104f8b02fb7d..cc792b6af2ef 100644
--- a/Control/DataModelTest/DataModelTestDataWriteCnv/CMakeLists.txt
+++ b/Control/DataModelTest/DataModelTestDataWriteCnv/CMakeLists.txt
@@ -18,7 +18,7 @@ atlas_depends_on_subdirs( PUBLIC
 # Component(s) in the package:
 atlas_add_poolcnv_library( DataModelTestDataWriteCnvPoolCnv
                            src/*.cxx
-                           FILES DataModelTestDataWrite/BVec.h DataModelTestDataWrite/BDer.h DataModelTestDataWrite/DVec.h DataModelTestDataWrite/DDer.h DataModelTestDataWrite/ELVec.h DataModelTestDataWrite/G.h DataModelTestDataWrite/GVec.h DataModelTestDataWrite/GAuxContainer.h DataModelTestDataWrite/H.h DataModelTestDataWrite/HVec.h DataModelTestDataWrite/HAuxContainer.h DataModelTestDataWrite/HView.h DataModelTestDataCommon/BAux.h DataModelTestDataCommon/BAuxVec.h DataModelTestDataCommon/BAuxStandalone.h DataModelTestDataCommon/C.h DataModelTestDataCommon/CVec.h DataModelTestDataCommon/CAuxContainer.h DataModelTestDataCommon/CView.h DataModelTestDataCommon/CVecWithData.h DataModelTestDataCommon/CInfoAuxContainer.h DataModelTestDataCommon/CTrigAuxContainer.h
-                           TYPES_WITH_NAMESPACE DMTest::BVec DMTest::DVec DMTest::DDer DMTest::BDer DMTest::ELVec DMTest::BAux DMTest::BAuxVec DMTest::BAuxStandalone DMTest::C DMTest::CVec DMTest::CAuxContainer DMTest::G DMTest::GVec DMTest::GAuxContainer DMTest::CVecWithData DMTest::CInfoAuxContainer DMTest::CTrigAuxContainer DMTest::CView DMTest::H DMTest::HVec DMTest::HAuxContainer DMTest::HView
+                           FILES DataModelTestDataWrite/BVec.h DataModelTestDataWrite/BDer.h DataModelTestDataWrite/DVec.h DataModelTestDataWrite/DDer.h DataModelTestDataWrite/ELVec.h DataModelTestDataWrite/G.h DataModelTestDataWrite/GVec.h DataModelTestDataWrite/GAuxContainer.h DataModelTestDataWrite/H.h DataModelTestDataWrite/HVec.h DataModelTestDataWrite/HAuxContainer.h DataModelTestDataWrite/HView.h DataModelTestDataCommon/BAux.h DataModelTestDataCommon/BAuxVec.h DataModelTestDataCommon/BAuxStandalone.h DataModelTestDataCommon/C.h DataModelTestDataCommon/CVec.h DataModelTestDataCommon/CAuxContainer.h DataModelTestDataCommon/CView.h DataModelTestDataCommon/CVecWithData.h DataModelTestDataCommon/CInfoAuxContainer.h DataModelTestDataCommon/CTrigAuxContainer.h DataModelTestDataCommon/S1.h DataModelTestDataCommon/S2.h
+                           TYPES_WITH_NAMESPACE DMTest::BVec DMTest::DVec DMTest::DDer DMTest::BDer DMTest::ELVec DMTest::BAux DMTest::BAuxVec DMTest::BAuxStandalone DMTest::C DMTest::CVec DMTest::CAuxContainer DMTest::G DMTest::GVec DMTest::GAuxContainer DMTest::CVecWithData DMTest::CInfoAuxContainer DMTest::CTrigAuxContainer DMTest::CView DMTest::H DMTest::HVec DMTest::HAuxContainer DMTest::HView DMTest::S1 DMTest::S2
                            LINK_LIBRARIES AthenaPoolUtilities DataModelTestDataCommonLib DataModelTestDataWriteLib AthenaPoolCnvSvcLib )
 
-- 
GitLab