public Diff getDiff(NodeState other) {
Diff diff = new Diff();
if (!state.equals(other.state)) {
diff.add(new Diff.Entry("", state, other.state).bold());
diff.add(new Diff.Entry("capacity", capacity, other.capacity));
diff.add(new Diff.Entry("reliability", reliability, other.reliability));
diff.add(new Diff.Entry("minUsedBits", minUsedBits, other.minUsedBits));
diff.add(new Diff.Entry("initProgress", initProgress, other.initProgress));
diff.add(new Diff.Entry("startTimestamp", startTimestamp, other.startTimestamp));
diff.add(new Diff.Entry("disks", diskStates.size(), other.diskStates.size()));
} else {
Diff diskDiff = new Diff();
for (int i=0; i<diskStates.size(); ++i) {
if (!diskStates.get(i).equals(other.diskStates.get(i))) {
diskDiff.add(new Diff.Entry(i, diskStates.get(i), other.diskStates.get(i)));
diff.add(new Diff.Entry("disks", diskDiff));
diff.add(new Diff.Entry("description", description, other.description));