Source:
<code>public void registerCallback(String importer, ChannelChangeCallback callback) { Preconditions.checkArgument( importer != null && !importer.trim().isEmpty(), "importer is null or empty" ); callback = checkNotNull(callback, "callback is null"); if (m_done.get()) return; int stamp = new int[]{0}; NavigableMap<String,ChannelChangeCallback> prev = null; NavigableMap<String,ChannelChangeCallback> next = null; ImmutableSortedMap.Builder<String,ChannelChangeCallback> mbldr = null; synchronized (m_undispatched) { do { prev = m_callbacks.get(stamp); mbldr = ImmutableSortedMap.naturalOrder(); mbldr.putAll(Maps.filterKeys(prev, not(equalTo(importer)))); mbldr.put(importer, callback); next = mbldr.build(); } while (!m_callbacks.compareAndSet(prev, next, stamp[0], stamp[0]+1)); NavigableSet<String> registered = next.navigableKeySet(); Iterator<ImporterChannelAssignment> itr = m_undispatched.iterator(); while (itr.hasNext()) { final ImporterChannelAssignment assignment = itr.next(); if (registered.contains(assignment.getImporter())) { final ChannelChangeCallback dispatch = next.get(assignment.getImporter()); if (dispatch.canAcceptAssignments()) { m_buses.submit(new DistributerRunnable() { @Override public void susceptibleRun() throws Exception { dispatch.onChange(assignment); } }); itr.remove(); } else { <START> LOG.debug("importer " + dispatch + " is stopping, not sending the assigment " + assignment); <END> } } } } }</code><technical_language>message "channel assignments importer is started"</technical_language>

Target:
public void registerCallback(String importer, ChannelChangeCallback callback) { Preconditions.checkArgument( importer != null && !importer.trim().isEmpty(), "importer is null or empty" ); Preconditions.checkArgument( !m_unregistered.getReference().contains(importer), "cannot re-register importer %s as it was already unregistered", importer ); callback = checkNotNull(callback, "callback is null"); if (m_done.get()) return; int stamp = new int[]{0}; NavigableMap<String,ChannelChangeCallback> prev = null; NavigableMap<String,ChannelChangeCallback> next = null; ImmutableSortedMap.Builder<String,ChannelChangeCallback> mbldr = null; synchronized (m_undispatched) { do { prev = m_callbacks.get(stamp); mbldr = ImmutableSortedMap.naturalOrder(); mbldr.putAll(Maps.filterKeys(prev, not(equalTo(importer)))); mbldr.put(importer, callback); next = mbldr.build(); } while (!m_callbacks.compareAndSet(prev, next, stamp[0], stamp[0]+1)); NavigableSet<String> registered = next.navigableKeySet(); NavigableSet<String> unregistered = m_unregistered.getReference(); Iterator<ImporterChannelAssignment> itr = m_undispatched.iterator(); while (itr.hasNext()) { final ImporterChannelAssignment assignment = itr.next(); if (registered.contains(assignment.getImporter())) { final ChannelChangeCallback dispatch = next.get(assignment.getImporter()); m_buses.submit(new DistributerRunnable() { @Override public void susceptibleRun() throws Exception { dispatch.onChange(assignment); } }); itr.remove(); } else if (unregistered.contains(assignment.getImporter())) { itr.remove(); if (!assignment.getAdded().isEmpty()) { LOG.warn("(" + m_hostId + ") discarding assignment to unregistered importer " + assignment); } } } } }