import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableMap.Builder;
import com.google.common.primitives.UnsignedLong;
+import java.io.File;
import java.io.IOException;
import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayDeque;
import org.opendaylight.controller.cluster.datastore.persisted.MetadataShardDataTreeSnapshot;
import org.opendaylight.controller.cluster.datastore.persisted.ShardDataTreeSnapshot;
import org.opendaylight.controller.cluster.datastore.persisted.ShardDataTreeSnapshotMetadata;
+import org.opendaylight.controller.cluster.datastore.utils.DataTreeModificationOutput;
import org.opendaylight.controller.cluster.datastore.utils.PruningDataTreeModification;
import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope;
ImmutableMap.builder();
for (ShardDataTreeMetadata<?> m : metadata) {
- final ShardDataTreeSnapshotMetadata<?> meta = m.toStapshot();
+ final ShardDataTreeSnapshotMetadata<?> meta = m.toSnapshot();
if (meta != null) {
metaBuilder.put(meta.getType(), meta);
}
final DataTreeModification unwrapped = mod.delegate();
LOG.trace("{}: Applying recovery modification {}", logContext, unwrapped);
- dataTree.validate(unwrapped);
- dataTree.commit(dataTree.prepare(unwrapped));
+ try {
+ dataTree.validate(unwrapped);
+ dataTree.commit(dataTree.prepare(unwrapped));
+ } catch (Exception e) {
+ File file = new File(System.getProperty("karaf.data", "."),
+ "failed-recovery-payload-" + logContext + ".out");
+ DataTreeModificationOutput.toFile(file, unwrapped);
+ throw new IllegalStateException(String.format(
+ "%s: Failed to apply recovery payload. Modification data was written to file %s",
+ logContext, file), e);
+ }
}
/**
private File writeRoot(final String kind, final NormalizedNode<?, ?> node) {
final File file = new File(System.getProperty("karaf.data", "."),
- "failed-" + kind + "-snapshot-" + shardName + ".xml");
+ "failed-recovery-" + kind + "-" + shardName + ".xml");
NormalizedNodeXMLOutput.toFile(file, node);
return file;
}
try {
store.applyRecoverySnapshot(snapshot);
} catch (Exception e) {
- log.error("{}: failed to apply snapshot {}", shardName, snapshot, e);
-
- final File f = writeRoot("recovery", snapshot.getRootNode().orElse(null));
+ final File f = writeRoot("snapshot", snapshot.getRootNode().orElse(null));
throw new IllegalStateException(String.format(
- "%s: Failed to apply recovery snapshot. Node data was written to file %s", shardName, f), e);
+ "%s: Failed to apply recovery snapshot %s. Node data was written to file %s",
+ shardName, snapshot, f), e);
}
}