private boolean abortRequest(Request request) {

        // Presumption : transaction exists
        transactionEntity tempT = this.transInfo.get(request.transaction);

        // remove all transaction requests in the waiting list.
        Set<Request> removing = new HashSet<Request>();
        for (Request wait : this.waitingList) {
            if (wait.transaction.equals(request.transaction))
                removing.add(wait);
        }
        this.waitingList.removeAll(removing);

        // clear site visiting record
        // clear site lock and buffer data
        for (Site site : tempT.visitedSites) {
            if (!site.isRunning())
                continue;
            site.exeRequest(request);
            this.visitingTrans.get(site).remove(tempT.name);
        }

        tempT.status = tranStatus.Aborted;
        tempT.visitedSites = Collections.unmodifiableSet(tempT.visitedSites);
        System.out
                .println("transaction [" + tempT.name + "] have been aborted");
        return true;
    }