private List<PolicyAssignment> detectAssignmentsChange(List<PolicyAssignment> list, ScheduleState state) {
Map<String, StreamWorkSlotQueue> queueMap = new HashMap<String, StreamWorkSlotQueue>();
for (MonitoredStream ms : state.getMonitoredStreams()) {
for (StreamWorkSlotQueue q : ms.getQueues()) {
queueMap.put(q.getQueueId(), q);
}
}
List<PolicyAssignment> result = new ArrayList<PolicyAssignment>(list);
Iterator<PolicyAssignment> paIt = result.iterator();
while (paIt.hasNext()) {
PolicyAssignment assignment = paIt.next();
if (!policies.containsKey(assignment.getPolicyName())) {
LOG.info("Policy assignment {} 's policy not found, this assignment will be removed!", assignment);
paIt.remove();
} else {
StreamWorkSlotQueue queue = queueMap.get(assignment.getQueueId());
if (queue == null
|| policies.get(assignment.getPolicyName()).getParallelismHint() != queue.getQueueSize()) {
LOG.info("Policy assignment {} 's policy doesnt match queue: {}!", assignment, queue);
paIt.remove();
}
}
}
return result;
}