The gradebook service makes use of an externally provided identifier to allow its clients to distinguish assignments. The external id must be unique. It is possible that more than one client may attempt to use the same identifier, in which case only the first client will be allowed to add the assessment to the gradebook.
Clients may misinterpret a ConflictingExternalIdException to mean that they have already added their assessment to the gradebook. This is not necessarily the case, since it is possible that another client has simply "taken" that external id. This risk is mitigated by the widespread use of the sakai ID service, which should keep external ID collisions to a minimum.
The best solution for this issue is for gradebook service clients to keep track of whether they have successfully inserted the assessment into the gradebook rather than relying on a ConflictingExternalIdException to indicate whether they've already added the assessment.
Another solution is to change the API to scope each query to a particular client. This would involve changes such as:
removeExternalAssessment(String gradebookUid, String externalId)
removeExternalAssessment(String gradebookUid, String externalId, String clientId)
updateExternalAssessmentScores(String gradebookUid, String externalId, Map studentUidsToScores)
updateExternalAssessmentScores(String gradebookUid, String externalId, String clientId, Map studentUidsToScores)