
Hi all,
We need to implement the following pattern at my org:
- callout to external data source
- if that callout takes too long (according to some configurable threshold), log an error (ie do some DML)
- if that callout timed out on the remote server, try it again
Recognizing the potential for the dreaded "You have uncommitted work pending. Please commit or rollback before calling out." error, I put the error logging code in a future method, thus isolating the DML from the callouts. However, the error is still being thrown. I reduced the issue down to this pattern:
public static void foo() {
Http http = new Http();
HttpRequest req = new Httprequest();
req.setEndpoint('https://test.salesforce.com'); //whatever endpoint
req.setMethod('GET');
http.send(req); //works fine
bar();
http.send(req); //throws calloutexception
}
@future public static void bar() {
}
Am I correct to assume that calling a future method counts as a DML operation? Is there any documentation I'm missing somewhere?

Note: this question has been more conclusively answered here (https://salesforce.stackexchange.com/questions/203304/does-queueing-a-future-method-count-as-dml)