uses fail_with to bomb out on datastore probs