in src/java/org/apache/cassandra/service/accord/serializers/CommandSerializers.java [329:375]
public void serialize(StoreParticipants t, DataOutputPlus out) throws IOException
{
Participants<?> hasTouched = t.hasTouched();
Route<?> route = t.route();
Participants<?> owns = t.owns();
Participants<?> executes = t.executes();
Participants<?> touches = t.touches();
boolean hasRoute = route != null;
boolean touchesEqualsHasTouched = touches == hasTouched;
boolean ownsEqualsTouches = owns == touches;
boolean executesIsNull = executes == null;
boolean executesIsOwns = !executesIsNull && executes == owns;
boolean waitsOnIsOwns = !executesIsNull && t.waitsOn() == owns;
boolean encodeSubsets = hasTouched.domain() == Routable.Domain.Key;
Participants<?> superset = !hasRoute ? hasTouched : encodeSubsets ? route.with((Participants)hasTouched) : route;
boolean routeEqualsSuperset = route == superset;
boolean hasTouchedEqualsSuperset = hasTouched == superset;
out.writeByte((hasRoute ? HAS_ROUTE : 0)
| (routeEqualsSuperset ? ROUTE_EQUALS_SUPERSET : 0)
| (hasTouchedEqualsSuperset ? HAS_TOUCHED_EQUALS_SUPERSET : 0)
| (touchesEqualsHasTouched ? TOUCHES_EQUALS_HAS_TOUCHED : 0)
| (ownsEqualsTouches ? OWNS_EQUALS_TOUCHES : 0)
| (executesIsNull ? EXECUTES_IS_NULL : 0)
| (executesIsOwns ? EXECUTES_IS_OWNS : 0)
| (waitsOnIsOwns ? WAITSON_IS_OWNS : 0)
);
KeySerializers.participants.serialize(superset, out);
if (encodeSubsets)
{
if (hasRoute && !routeEqualsSuperset) KeySerializers.route.serializeSubset(route, superset, out);
if (!hasTouchedEqualsSuperset) KeySerializers.participants.serializeSubset(hasTouched, superset, out);
if (!touchesEqualsHasTouched) KeySerializers.participants.serializeSubset(touches, superset, out);
if (!ownsEqualsTouches) KeySerializers.participants.serializeSubset(owns, superset, out);
if (!executesIsNull && !executesIsOwns) KeySerializers.participants.serializeSubset(executes, superset, out);
if (!executesIsNull && !waitsOnIsOwns) KeySerializers.participants.serializeSubset(t.waitsOn(), superset, out);
}
else
{
if (hasRoute && !routeEqualsSuperset) KeySerializers.route.serialize(route, out);
if (!hasTouchedEqualsSuperset) KeySerializers.participants.serialize(hasTouched, out);
if (!touchesEqualsHasTouched) KeySerializers.participants.serialize(touches, out);
if (!ownsEqualsTouches) KeySerializers.participants.serialize(owns, out);
if (!executesIsNull && !executesIsOwns) KeySerializers.participants.serialize(executes, out);
if (!executesIsNull && !waitsOnIsOwns) KeySerializers.participants.serialize(t.waitsOn(), out);
}
}