2 Replies Latest reply on Sep 14, 2007 5:03 PM by raist_majere

    IllegalStateException: Current state = FLUSHED, new state =

    sirji

      Hi all,

      We are seeing the following error message intermittently in our Jboss env. We are using JBoss 4.0.5 (clustered with 3 nodes) with JDK 1.5 and ours is Struts based web application with log4j-1.2.14.

      2007-09-02 05:22:21,924 ERROR [STDERR] java.lang.IllegalStateException: Current state = FLUSHED, new state = CODING_END
      2007-09-02 05:22:21,925 ERROR [STDERR] at java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.java:941)
      2007-09-02 05:22:21,925 ERROR [STDERR] at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:537)
      2007-09-02 05:22:21,925 ERROR [STDERR] at sun.nio.cs.StreamEncoder$CharsetSE.flushLeftoverChar(StreamEncoder.java:358)
      2007-09-02 05:22:21,926 ERROR [STDERR] at sun.nio.cs.StreamEncoder$CharsetSE.implClose(StreamEncoder.java:414)
      2007-09-02 05:22:21,926 ERROR [STDERR] at sun.nio.cs.StreamEncoder.close(StreamEncoder.java:160)
      2007-09-02 05:22:21,926 ERROR [STDERR] at java.io.OutputStreamWriter.close(OutputStreamWriter.java:222)
      2007-09-02 05:22:21,926 ERROR [STDERR] at java.io.FilterWriter.close(FilterWriter.java:92)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.FileAppender.closeFile(FileAppender.java:171)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.FileAppender.reset(FileAppender.java:302)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.FileAppender.setFile(FileAppender.java:271)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.RollingFileAppender.setFile(RollingFileAppender.java:156)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.RollingFileAppender.rollOver(RollingFileAppender.java:145)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.RollingFileAppender.subAppend(RollingFileAppender.java:228)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.WriterAppender.append(WriterAppender.java:150)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.AppenderSkeleton.doAppend(AppenderSkeleton.java:221)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.helpers.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:57)
      2007-09-02 05:22:21,926 ERROR [STDERR] at org.apache.log4j.Category.callAppenders(Category.java:187)
      2007-09-02 05:22:21,927 ERROR [STDERR] at org.apache.log4j.Category.forcedLog(Category.java:372)
      2007-09-02 05:22:21,927 ERROR [STDERR] at org.apache.log4j.Category.log(Category.java:864)
      2007-09-02 05:22:21,927 ERROR [STDERR] at com.abcd.xyz.common.Logger.info(Logger.java:225)



      This problem is not reproducible at will. So far, restart of JBoss instances helping us out. It is very critical problem for us, as JBoss stops showing any successful request execution after this problem. And forcefully, we have to restart the Jboss environment. We did some googling but didn't find any antidote for it.

      Any pointers on this will be very helpful.

      Regards,

        • 1. Re: IllegalStateException: Current state = FLUSHED, new stat
          sirji

          Hi all,

          Please post your suggestion for this problem. It is very critical issue for us.

          Let me know if someone require any more information on this.

          Regards,

          • 2. Re: IllegalStateException: Current state = FLUSHED, new stat
            raist_majere

            As sais here, using FileAppender or any "common" subclass leads to errors on clusters http://www.oreillynet.com/cs/user/view/cs_msg/17235.

            The problem is due to Log4J not rolling the files consulting the underlying system. Log4J mantains a counter of how many bytes has written to the file. So every node has it's own counter and when another node has already rolled the file, you find that problem.

             protected
             void subAppend(LoggingEvent event) {
             super.subAppend(event);
             if((fileName != null) &&
             ((CountingQuietWriter) qw).getCount() >= maxFileSize)
             this.rollOver();
             }
            

            As said in the post of the url I've given you sould either subclass RollingFileAppender and change it's subAppend method or use any other mean of logging, like JMS or JMX.