From: Thomas Tornblom on
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
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
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

> 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
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