See the discussion in #31. We need to tweak the interface for ShardedCounterService#increment and decrement to be able to return a CounterOperation in the event that a DatastoreTimeoutException or DatastoreFailureException is thrown. Since the Datastore may have actually succeeded in these cases, this would allow the caller to retry in an idempotent fashion.
Alternatively, perhaps the implementation could catch these exceptions and try to handle them internally as well.