import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import java.util.HashMap;
+import java.util.Iterator;
import java.util.Map;
import javax.annotation.Nullable;
import javax.annotation.concurrent.NotThreadSafe;
import org.opendaylight.controller.cluster.access.concepts.RequestEnvelope;
import org.opendaylight.controller.cluster.access.concepts.RequestException;
import org.opendaylight.controller.cluster.access.concepts.UnsupportedRequestException;
+import org.opendaylight.controller.cluster.datastore.ShardDataTreeCohort.State;
import org.opendaylight.controller.cluster.datastore.utils.UnsignedLongRangeSet;
import org.opendaylight.yangtools.concepts.Identifiable;
import org.slf4j.Logger;
}
void retire() {
- // FIXME: flush all state
+ // Hunt down any transactions associated with this frontend
+ final Iterator<SimpleShardDataTreeCohort> it = tree.cohortIterator();
+ while (it.hasNext()) {
+ final SimpleShardDataTreeCohort cohort = it.next();
+ if (clientId.equals(cohort.getIdentifier().getHistoryId().getClientId())) {
+ if (cohort.getState() != State.COMMIT_PENDING) {
+ LOG.debug("{}: Retiring transaction {}", persistenceId, cohort.getIdentifier());
+ it.remove();
+ } else {
+ LOG.debug("{}: Transaction {} already committing, not retiring it", persistenceId,
+ cohort.getIdentifier());
+ }
+ }
+ }
+
+ // Clear out all transaction chains
+ localHistories.values().forEach(AbstractFrontendHistory::retire);
+ localHistories.clear();
+ standaloneHistory.retire();
}
@Override