When creating a dataset, a HTTP call is made to the Dataset Op Executor to perform the actual creation with impersonation. Op Executor, however, then records meta data for the newly created dataset. For that, it makes a getOrCreateDataset() call to instantiate the metadata dataset. This, in turn can cause a recursive HTTP call back to the op executor to create that dataset.
This is an anti-pattern, a cyclic dependency between two services, that can lead to deadlocks and timeouts.
Instead, op executor should return the meta data as part of its response such that dataset service can record it.