private void fetchAndDeleteMessages() throws Exception { Integer sizes[] = connection.getMessageSizes(); LOG.info("Found %d new message(s) on remote server", sizes.length); IOExceptionHandler.getInstance().resetSyncCounter(mbox); for (int msgno = sizes.length; msgno > 0; --msgno) { LOG.debug("Fetching message number %d", msgno); IOExceptionHandler.getInstance().trackSyncItem(mbox, msgno); try { fetchAndAddMessage(msgno, sizes[msgno - 1], null, true); } catch (Exception e) { if (IOExceptionHandler.getInstance().isRecoverable(mbox, msgno, "pop sync fail", e)) { // don't delete msg; if we end up aborting we want it still to exist // skip it; will be retried on every subsequent sync continue; } throw e; } checkIsEnabled(); connection.deleteMessage(msgno); } IOExceptionHandler.getInstance().checkpointIOExceptionRate(mbox); }