Caused by: java.lang.NullPointerException
at org.opendaylight.controller.cluster.datastore.modification.
MutableCompositeModification.writeExternal(MutableCompositeModification.java:120)
Somehow a null Modification instance got added to the modifications List.
Looking at the callers of addModification, it is not clear which call site
might have been the culprit. So I added a guard in addModification against
a null input Modification and logged an error with stack trace. I also
modified getModifications to return an immutable List to prevent callers
from directly modifying the List (there was one).
Change-Id: Ic63aa9daada0548da05fe663a0d22cdcb3e7bceb
Signed-off-by: Tom Pantelis <tpanteli@brocade.com>
batchedModifications.setReady(ready);
batchedModifications.setDoCommitOnReady(doCommitOnReady);
batchedModifications.setTotalMessagesSent(++totalBatchedModificationsSent);
batchedModifications.setReady(ready);
batchedModifications.setDoCommitOnReady(doCommitOnReady);
batchedModifications.setTotalMessagesSent(++totalBatchedModificationsSent);
- sent = executeOperationAsync(batchedModifications, actorContext.getTransactionCommitOperationTimeout());
+ final BatchedModifications toSend = batchedModifications;
if (ready) {
batchedModifications = null;
} else {
batchedModifications = newBatchedModifications();
}
if (ready) {
batchedModifications = null;
} else {
batchedModifications = newBatchedModifications();
}
+
+ sent = executeOperationAsync(toSend, actorContext.getTransactionCommitOperationTimeout());
private void newInflightCommitWithDifferentTransactionID() {
BatchedModifications newBatchedModifications = newBatchedModifications();
private void newInflightCommitWithDifferentTransactionID() {
BatchedModifications newBatchedModifications = newBatchedModifications();
- newBatchedModifications.getModifications().addAll(inflightCommit.getModifications());
+ newBatchedModifications.addModifications(inflightCommit.getModifications());
inflightCommit = newBatchedModifications;
}
inflightCommit = newBatchedModifications;
}
/**
* Get a list of modifications contained by this composite.
*
/**
* Get a list of modifications contained by this composite.
*
- * @return list of modifications
+ * @return an immutable list of modifications
*/
List<Modification> getModifications();
}
*/
List<Modification> getModifications();
}
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
import java.io.ObjectInput;
import java.io.ObjectOutput;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import org.opendaylight.controller.cluster.datastore.DataStoreVersions;
import org.opendaylight.controller.cluster.datastore.messages.VersionedExternalizableMessage;
import java.util.List;
import org.opendaylight.controller.cluster.datastore.DataStoreVersions;
import org.opendaylight.controller.cluster.datastore.messages.VersionedExternalizableMessage;
private static final long serialVersionUID = 1L;
private final List<Modification> modifications = new ArrayList<>();
private static final long serialVersionUID = 1L;
private final List<Modification> modifications = new ArrayList<>();
+ private List<Modification> immutableModifications = null;
public MutableCompositeModification() {
this(DataStoreVersions.CURRENT_VERSION);
public MutableCompositeModification() {
this(DataStoreVersions.CURRENT_VERSION);
* @param modification the modification to add.
*/
public void addModification(Modification modification) {
* @param modification the modification to add.
*/
public void addModification(Modification modification) {
+ Preconditions.checkNotNull(modification);
modifications.add(modification);
}
modifications.add(modification);
}
+ public void addModifications(Iterable<Modification> newMods) {
+ for (Modification mod : newMods) {
+ addModification(mod);
+ }
+ }
+
@Override
public List<Modification> getModifications() {
@Override
public List<Modification> getModifications() {
+ if (immutableModifications == null) {
+ immutableModifications = Collections.unmodifiableList(modifications);
+ }
+
+ return immutableModifications;