@GuardedBy("this") private void storeShard(final DOMDataTreeIdentifier prefix, final ShardRegistration<?> reg) { ShardingTableEntry t = shardingTables.get(prefix.getDatastoreType()); if (t == null) { t = new ShardingTableEntry(); shardingTables.put(prefix.getDatastoreType(), t); } t.store(prefix.getRootIdentifier(), reg); }
@GuardedBy("this") private ShardingTableEntry lookupShard(final DOMDataTreeIdentifier prefix) { final ShardingTableEntry t = shardingTables.get(prefix.getDatastoreType()); if (t == null) { return null; } return t.lookup(prefix.getRootIdentifier()); }
@Override public <L extends DOMDataTreeChangeListener> ListenerRegistration<L> registerDataTreeChangeListener(final DOMDataTreeIdentifier treeId, final L listener) { DOMStore publisher = getTxFactories().get(treeId.getDatastoreType()); checkState(publisher != null, "Requested logical data store is not available."); return ((DOMStoreTreeChangePublisher) publisher).registerTreeChangeListener(treeId.getRootIdentifier(), listener); } });
@Override public <L extends DOMDataTreeChangeListener> ListenerRegistration<L> registerDataTreeChangeListener(final DOMDataTreeIdentifier treeId, final L listener) { DOMStore publisher = getTxFactories().get(treeId.getDatastoreType()); checkState(publisher != null, "Requested logical data store is not available."); return ((DOMStoreTreeChangePublisher)publisher).registerTreeChangeListener(treeId.getRootIdentifier(), listener); } });
void removeShard(final ShardRegistration<?> reg) { final DOMDataTreeIdentifier prefix = reg.getPrefix(); final ShardRegistration<?> parentReg; synchronized (this) { final ShardingTableEntry t = shardingTables.get(prefix.getDatastoreType()); if (t == null) { LOG.warn("Shard registration {} points to non-existent table", reg); return; } t.remove(prefix.getRootIdentifier()); parentReg = lookupShard(prefix).getRegistration(); /* * FIXME: adjust all producers. This is tricky, as we need different locking strategy, * simply because we risk AB/BA deadlock with a producer being split off from * a producer. * */ } if (parentReg != null) { parentReg.getInstance().onChildDetached(prefix, reg.getInstance()); } }