NodeSubregistry getOrCreateSubregistry(final String key) {
   for (; ; ) {
     final Map<String, NodeSubregistry> snapshot = childrenUpdater.get(this);
     final NodeSubregistry subregistry = snapshot.get(key);
     if (subregistry != null) {
       return subregistry;
     } else {
       final NodeSubregistry newRegistry = new NodeSubregistry(key, this);
       final NodeSubregistry appearing =
           childrenUpdater.putAtomic(this, key, newRegistry, snapshot);
       if (appearing == null) {
         return newRegistry;
       } else if (appearing != newRegistry) {
         // someone else added one
         return appearing;
       }
       // otherwise, retry the loop because the map changed
     }
   }
 }