Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id B81B9200C5F for ; Sun, 23 Apr 2017 11:35:09 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id B68E0160BA6; Sun, 23 Apr 2017 09:35:09 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 0A14D160B8E for ; Sun, 23 Apr 2017 11:35:08 +0200 (CEST) Received: (qmail 36306 invoked by uid 500); 23 Apr 2017 09:35:08 -0000 Mailing-List: contact issues-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: issues@commons.apache.org Delivered-To: mailing list issues@commons.apache.org Received: (qmail 36291 invoked by uid 99); 23 Apr 2017 09:35:08 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd1-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 23 Apr 2017 09:35:08 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd1-us-west.apache.org (ASF Mail Server at spamd1-us-west.apache.org) with ESMTP id 9B3B5C0EEF for ; Sun, 23 Apr 2017 09:35:07 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd1-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -99.202 X-Spam-Level: X-Spam-Status: No, score=-99.202 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd1-us-west.apache.org [10.40.0.7]) (amavisd-new, port 10024) with ESMTP id RZfaTfreR82L for ; Sun, 23 Apr 2017 09:35:05 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id 0B99D5F20C for ; Sun, 23 Apr 2017 09:35:05 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id 9077DE0A6C for ; Sun, 23 Apr 2017 09:35:04 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 2A28121B54 for ; Sun, 23 Apr 2017 09:35:04 +0000 (UTC) Date: Sun, 23 Apr 2017 09:35:04 +0000 (UTC) From: "Pascal Schumacher (JIRA)" To: issues@commons.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Closed] (IO-398) listener.fileRotated() will be invoked more than one time in a real rotate activity MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Sun, 23 Apr 2017 09:35:09 -0000 [ https://issues.apache.org/jira/browse/IO-398?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ] Pascal Schumacher closed IO-398. -------------------------------- Resolution: Duplicate > listener.fileRotated() will be invoked more than one time in a real rotate activity > ----------------------------------------------------------------------------------- > > Key: IO-398 > URL: https://issues.apache.org/jira/browse/IO-398 > Project: Commons IO > Issue Type: Bug > Affects Versions: 2.4 > Reporter: Lantao Jin > Attachments: IO-398.patch, IO398_with_ut.patch > > > When Tailer considers file rotation is occurred, listener.fileRotated() will be execute, and file will re-open by "reader = new RandomAccessFile(file, RAF_MODE);". However, the new file may not be created yet, FileNotFoundException would be caught and while loop would be executed again and again until the new file is actually created, which cause listener.fileRotated() triggered repeatedly. > This is the piece of code causing the problem: > {noformat} > while (getRun()) { > final boolean newer = isFileNewer(file, last); // IO-279, must be done first > // Check the file length to see if it was rotated > final long length = file.length(); > if (length < position) { > // File was rotated > listener.fileRotated(); > // Reopen the reader after rotation > try { > // Ensure that the old file is closed iff we re-open it successfully > final RandomAccessFile save = reader; > reader = new RandomAccessFile(file, RAF_MODE); > /* some code */ > } catch (final FileNotFoundException e) { > // in this case we continue to use the previous reader and position values > listener.fileNotFound(); > } > continue; > {noformat} > While condition checkes can be deployed in listener.fileRotated() to correct the sematic of fileRotate, it is better to prevent multiple invocation of listener.fileRotated() on this issue. -- This message was sent by Atlassian JIRA (v6.3.15#6346)