func (a *APIServer) Cancel(ctx context.Context, request *CancelRequest) (*CancelResponse, error) {
	a.statusMu.Lock()
	defer a.statusMu.Unlock()
	if request.JobID != a.jobID {
		return &CancelResponse{Success: false}, nil
	}
	if !MatchDatum(request.DataFilters, a.datum()) {
		return &CancelResponse{Success: false}, nil
	}
	a.cancel()
	// clear the status since we're no longer processing this datum
	a.jobID = ""
	a.data = nil
	a.started = time.Time{}
	a.cancel = nil
	return &CancelResponse{Success: true}, nil
}
func (a *APIServer) Cancel(ctx context.Context, request *CancelRequest) (*CancelResponse, error) {
	a.statusMu.Lock()
	defer a.statusMu.Unlock()
	if request.JobID != a.jobID {
		return &CancelResponse{Success: false}, nil
	}
	if !MatchDatum(request.DataFilters, a.datum()) {
		return &CancelResponse{Success: false}, nil
	}
	a.cancel()
	
	a.jobID = ""
	a.data = nil
	a.started = time.Time{}
	a.cancel = nil
	return &CancelResponse{Success: true}, nil
}
func ( a * APIServer ) Cancel ( ctx context . Context , request * CancelRequest ) ( * CancelResponse , error ) { a . statusMu . Lock ( ) defer a . statusMu . Unlock ( ) if request . JobID != a . jobID { return & CancelResponse { Success : false } , nil } if ! MatchDatum ( request . DataFilters , a . datum ( ) ) { return & CancelResponse { Success : false } , nil } a . cancel ( ) // clear the status since we're no longer processing this datum a . jobID = " " a . data = nil a . started = time . Time { } a . cancel = nil return & CancelResponse { Success : true } , nil }
// Cancel cancels the currently running datum
Cancel cancels the currently running datum