public void updateSubscription(TopicName topicName,
String subscriptionName,
PatchData patch,
String modifiedBy) {
Subscription retrieved = subscriptionRepository.getSubscriptionDetails(topicName, subscriptionName);
Subscription.State oldState = retrieved.getState();
Subscription updated = Patch.apply(retrieved, patch);
revertStateIfChangedToPending(updated, oldState);
subscriptionValidator.checkModification(updated);
subscriptionOwnerCache.onUpdatedSubscription(retrieved, updated);
if (!retrieved.equals(updated)) {
subscriptionRepository.updateSubscription(updated);
auditor.objectUpdated(modifiedBy, retrieved, updated);
}
}