class Action extends ActionType<AcknowledgedResponse> {
        public static final String NAME = "internal:crate:sql/fdw/user/drop";

        private Action() {
            super(NAME);
        }
    }

    @Inject
    public TransportDropUserMapping(TransportService transportService,
                                    ClusterService clusterService,
                                    ThreadPool threadPool) {
        super(
            ACTION.name(),
            transportService,
            clusterService,
            threadPool,
            DropUserMappingRequest::new
        );
    }

    @Override
    protected String executor() {
        return ThreadPool.Names.SAME;
    }

    @Override
    protected AcknowledgedResponse read(StreamInput in) throws IOException {
        return new AcknowledgedResponse(in);
    }

    @Override
    protected void masterOperation(DropUserMappingRequest request,
                                   ClusterState state,
                                   ActionListener<AcknowledgedResponse> listener) throws Exception {<FILL_FUNCTION_BODY>

        if (state.nodes().getMinNodeVersion().before(Version.V_5_7_0)) {
            throw new IllegalStateException(
                "Cannot execute DROP USER MAPPING while there are <5.7.0 nodes in the cluster");
        }
        DropUserMappingTask updateTask = new DropUserMappingTask(request);
        updateTask.completionFuture().whenComplete(listener);
        clusterService.submitStateUpdateTask("drop_user_mapping", updateTask);
    
<methods><variables>protected final non-sealed org.elasticsearch.cluster.service.ClusterService clusterService,private final non-sealed java.lang.String executor,protected final non-sealed org.elasticsearch.threadpool.ThreadPool threadPool,protected final non-sealed org.elasticsearch.transport.TransportService transportService