class ShardDataTree extends ShardDataTreeTransactionParent {

    void applyRecoveryPayload(final @NonNull Payload payload) throws IOException {
        if (payload instanceof CommitTransactionPayload) {
            applyRecoveryCandidate((CommitTransactionPayload) payload);
        } else if (payload instanceof AbortTransactionPayload) {
            allMetadataAbortedTransaction(((AbortTransactionPayload) payload).getIdentifier());
        } else if (payload instanceof PurgeTransactionPayload) {
            allMetadataPurgedTransaction(((PurgeTransactionPayload) payload).getIdentifier());
        } else if (payload instanceof CreateLocalHistoryPayload) {
            allMetadataCreatedLocalHistory(((CreateLocalHistoryPayload) payload).getIdentifier());
        } else if (payload instanceof CloseLocalHistoryPayload) {
            allMetadataClosedLocalHistory(((CloseLocalHistoryPayload) payload).getIdentifier());
        } else if (payload instanceof PurgeLocalHistoryPayload) {
            allMetadataPurgedLocalHistory(((PurgeLocalHistoryPayload) payload).getIdentifier());
        } else {
            LOG.debug("{}: ignoring unhandled payload {}", logContext, payload);
        }
    }

      ShardDataTree(final Shard shard, final EffectiveModelContext schemaContext, final DataTree dataTree,
            final ShardDataTreeChangeListenerPublisher treeChangeListenerPublisher,
            final String logContext,
            final ShardDataTreeMetadata<?>... metadata);
      ShardDataTree(final Shard shard, final EffectiveModelContext schemaContext, final TreeType treeType,
            final YangInstanceIdentifier root,
            final ShardDataTreeChangeListenerPublisher treeChangeListenerPublisher,
            final String logContext,
            final ShardDataTreeMetadata<?>... metadata);
    @VisibleForTesting public  ShardDataTree(final Shard shard, final EffectiveModelContext schemaContext, final TreeType treeType);

}