Depends on D4270
There are a couple of places where we may throw in this code and the problem with throwing errors in the done callback is that it results in a crash of the service. This is because in the done callback all grpc operations are done, so we cannot set an error state and send it to the client. So there's no other way to handle errors. Therefore, I converted the done callback to terminate the callback in the blob's put reactor so we can properly handle errors that come from invalid users' input. I think it doesn't affect the validity of the way this service is working.