From: Thomas Tornblom on 23 Dec 2009 18:22 maps <mapsiddiqui(a)gmail.com> writes: > This error has been popping up since a few days back on our production > servers. Googling it retrieved the following article: > http://docs.sun.com/app/docs/doc/806-1075/6jacsnin5?a=view > > I'm not into Solaris administration but this issue has been bugging me > since quite some time. If anyone can help explain it to me in simple > terms; also what are the recommended solutions. > > Thanks. I have seen this issue when some field in a stat buffer is out of range, like atime, mtime or ctime, which is defined as a time_t, which is typedef:ed as a long. A long is 32-bit in a 32-bit binary and 64-bit in a 64-bit binary, so you can set the times on a file with a 64-bit application that will be too large for a 32-bit application. If you know how to provoke the issue, run the application under truss to see if this is the issue, or if you are on s10 (or later) you may try "dtrace" to see what happens. Thomas
From: maps on 28 Dec 2009 12:00 Heres an update: A case was opened with Sun and they suggested a workaround for the - problem in the following manner: zcat somearchive.Z | diff somefile /dev/stdin I compared the truss results from both variations and the output looks the same except for write: diff: stdin: Value too large for defined data type write(1, " C o m p a n y , S t o r".., 3748) Err#32 EPIPE Received signal #13, SIGPIPE [default] for /dev/stdin: write(1, " C o m p a n y , S t o r".., 3748) = 3748 Is there a way I can dig deeper ? -maps.
From: Chris Ridd on 28 Dec 2009 14:17 On 2009-12-28 17:00:01 +0000, maps said: > Heres an update: > > A case was opened with Sun and they suggested a workaround for the - > problem in the following manner: > > zcat somearchive.Z | diff somefile /dev/stdin > > I compared the truss results from both variations and the output looks > the same except for write: > > diff: stdin: Value too large for defined data type > write(1, " C o m p a n y , S t o r".., 3748) Err#32 EPIPE > Received signal #13, SIGPIPE [default] > > for /dev/stdin: > > write(1, " C o m p a n y , S t o r".., 3748) = 3748 > > Is there a way I can dig deeper ? The man page for write says (Solaris 10) it returns EPIPE when: EPIPE An attempt is made to write to a pipe or a FIFO that is not open for reading by any process, or that has only one end open (or to a file descrip- tor created by socket(3SOCKET), using type SOCK_STREAM that is no longer connected to a peer endpoint). A SIGPIPE signal will also be sent to the thread. The process dies unless special pro- visions were taken to catch or ignore the signal. So what's happening to the process with the other end of the pipe? -- Chris
From: maps on 28 Dec 2009 14:58 > So what's happening to the process with the other end of the pipe? we are comparing the standard input with somefile zcat somearchive.Z | diff somefile - -maps.
From: jgh on 28 Dec 2009 15:15
On Mon, 28 Dec 2009 11:58:46 -0800, maps wrote: >> So what's happening to the process with the other end of the pipe? > > we are comparing the standard input with somefile > > > zcat somearchive.Z | diff somefile - How big are these files? Any chance you're running into a 2GB or 4GB limit? -- Jeremy |