You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@harmony.apache.org by "Jimmy, Jing Lv" <fi...@gmail.com> on 2006/07/25 09:00:01 UTC

[classLib]Given a long value, RI behaves differently on windows and linux (and TestNG?)

Hi:

     I find another platform-dependent operation 
FileChannel.transforFrom(ReadableByteChannel src, long position, long 
count) in java.nio.channels. RI behaves differently if the given count 
is larger than Integer.MAX_VALUE: on windows, it throws an IOException; 
on Linux, it return zero silently. It is clear that the difference is 
caused by system call. Unfortunately Harmony fails to behave like RI as 
its has the same native code using the port-lib.
     If it is necessary to make Harmony behaving exactly like RI, I 
suggest writing native code for transforFrom. This may be a 
waste-of-effect as it is nearly the same except for this little 
difference.However, currently people have few chances to use a size 
larger than Integer.MAX_VALUE(nearly 4G, is it?), and system call does 
not support long value to pass in.

     Another thing I'd like to mention is that it'll be great if we can 
use testNG, or decide some other way to go. At least 2 testcases should 
  be written for different platform as I remember, including the one for 
this problem. :)

-- 

Best Regards!

Jimmy, Jing Lv
China Software Development Lab, IBM

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Re: [classLib]Given a long value, RI behaves differently on windows and linux (and TestNG?)

Posted by Mikhail Fursov <mi...@gmail.com>.
But from the bug it follows that SUN result depends on long-to-int
convertion.
So you never know if result if positive (OK) or negative (Exception).
I vote just to do it right and to ignore buggy RI behaviour in this case.

On 7/28/06, Jimmy, Jing Lv <fi...@gmail.com> wrote:
>
> Hi,
>      Thanks, Mikhail :) I read though that bug detail, but I think this
> is not the same thing we are talking about. That bug was caused by a
> long-to-integer-cast, "Integer.MAX_VALUE + 1" is a integer value that is
> less than zero. The evaluation of that bug says:
> "...
>         file.transferFrom(socket, 0, Integer.MAX_VALUE + 1);
> this is not correct, it should be:
>         file.transferFrom(socket, 0, (long)Integer.MAX_VALUE + 1L);
> ..."
> And it throws IllegalArgumentException.
>
> But in our topic, the IOException was caused by native operation. The
> question is, shall we modify native code/Harmony portlib to allow
> system-call deal with the long parameter itself, instead of dealing it
> in Harmony code? RI seems doing in this way.
>
>
-- 
Mikhail Fursov

Re: [classLib]Given a long value, RI behaves differently on windows and linux (and TestNG?)

Posted by "Jimmy, Jing Lv" <fi...@gmail.com>.
Mikhail Fursov wrote:
> The comments to this bug
> http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5105464
> can give us some additional thoughts.
> As follows from this comment any (positive or negative) value could be if
>> MAX_INTEGER is passed.
> So I propose not to follow RI here.
> 
> The comment:
> "Indeed, FileChannelImpl.transferFromArbitraryChannel casts a long value to
> an int, it gets a negative value if the long value is bigger than
> Integer.MAX_VALUE"
> 

Hi,
     Thanks, Mikhail :) I read though that bug detail, but I think this 
is not the same thing we are talking about. That bug was caused by a 
long-to-integer-cast, "Integer.MAX_VALUE + 1" is a integer value that is 
less than zero. The evaluation of that bug says:
"...
	file.transferFrom(socket, 0, Integer.MAX_VALUE + 1);
this is not correct, it should be:
	file.transferFrom(socket, 0, (long)Integer.MAX_VALUE + 1L);
..."
And it throws IllegalArgumentException.

But in our topic, the IOException was caused by native operation. The 
question is, shall we modify native code/Harmony portlib to allow 
system-call deal with the long parameter itself, instead of dealing it 
in Harmony code? RI seems doing in this way.

> On 7/26/06, Jimmy, Jing Lv <fi...@gmail.com> wrote:
>>
>> Alexei Zakharov wrote:
>> > Hi,
>> >
>> > Is there any known real applications that use NIO for reading stuff
>> > with 4GB blocks?
>> >
>>
>> I've never heard of that. However, I believe there may be some in the
>> future, or the operation system may support this. That's the reason I
>> suggest Harmony use system call to solve the problem, not cut long to a
>> integer in Harmony's Java or native code.
>> Currently the problem is that the portlib has ignored the difference
>> between Linux and windows, so we see no difference in Harmony, while RI
>> behaves differently.
>>
>> And again, any sounds for TestNG? :)
>>
>> >
>> > Regards,
>> >
>> > 2006/7/25, Leo Li <li...@gmail.com>:
>> >> 2006/7/25, Jimmy, Jing Lv <fi...@gmail.com>:
>> >> >
>> >> > Hi:
>> >> >
>> >> >     I find another platform-dependent operation
>> >> > FileChannel.transforFrom(ReadableByteChannel src, long position, 
>> long
>> >> > count) in java.nio.channels. RI behaves differently if the given
>> count
>> >> > is larger than Integer.MAX_VALUE: on windows, it throws an
>> IOException;
>> >> > on Linux, it return zero silently. It is clear that the 
>> difference is
>> >> > caused by system call. Unfortunately Harmony fails to behave like RI
>> as
>> >> > its has the same native code using the port-lib.
>> >> >     If it is necessary to make Harmony behaving exactly like RI, I
>> >> > suggest writing native code for transforFrom. This may be a
>> >> > waste-of-effect as it is nearly the same except for this little
>> >> > difference.However, currently people have few chances to use a size
>> >> > larger than Integer.MAX_VALUE(nearly 4G, is it?), and system call
>> does
>> >> > not support long value to pass in.
>> >> >
>> >> >     Another thing I'd like to mention is that it'll be great if we
>> can
>> >> > use testNG, or decide some other way to go. At least 2 testcases
>> should
>> >> > be written for different platform as I remember, including the one
>> for
>> >> > this problem. :)
>> >> >
>> >> > --
>> >> >
>> >> > Best Regards!
>> >> >
>> >> > Jimmy, Jing Lv
>> >> > China Software Development Lab, IBM
>> >> >
>> >> > 
>> ---------------------------------------------------------------------
>> >> > Terms of use : http://incubator.apache.org/harmony/mailing.html
>> >> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> >> > For additional commands, e-mail:
>> harmony-dev-help@incubator.apache.org
>> >> >
>> >> > Dear Jimmy:
>> >>        As spec is not clear about how to deal with the argument 
>> greater
>> >> than Integer.MAX_VALUE, maybe we shall look more closely at what RI
>> >> does and
>> >> how the system call behaves.
>> >>         I think it will be a good idea to let native code or even
>> system
>> >> call itself treat with such affairs, provided that Harmony will
>> >> support some
>> >> 64-bit  platforms one day. Thus it may be not so wise to throw some
>> >> exception in java code if encountering the data longer than 32-bits.
>> >>        Besides, whether we should behaves the same as RI, even if 
>> it is
>> >> different on different platforms? :)
>> >>
>> >>
>> >>
>> >> --
>> >> Leo Li
>> >> China Software Development Lab, IBM
>> >
>> >
>>
>>
>> -- 
>>
>> Best Regards!
>>
>> Jimmy, Jing Lv
>> China Software Development Lab, IBM
>>
>> ---------------------------------------------------------------------
>> Terms of use : http://incubator.apache.org/harmony/mailing.html
>> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>>
>>
> 
> 


-- 

Best Regards!

Jimmy, Jing Lv
China Software Development Lab, IBM

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Re: [classLib]Given a long value, RI behaves differently on windows and linux (and TestNG?)

Posted by Mikhail Fursov <mi...@gmail.com>.
The comments to this bug
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=5105464
can give us some additional thoughts.
As follows from this comment any (positive or negative) value could be if
>MAX_INTEGER is passed.
So I propose not to follow RI here.

The comment:
"Indeed, FileChannelImpl.transferFromArbitraryChannel casts a long value to
an int, it gets a negative value if the long value is bigger than
Integer.MAX_VALUE"

On 7/26/06, Jimmy, Jing Lv <fi...@gmail.com> wrote:
>
> Alexei Zakharov wrote:
> > Hi,
> >
> > Is there any known real applications that use NIO for reading stuff
> > with 4GB blocks?
> >
>
> I've never heard of that. However, I believe there may be some in the
> future, or the operation system may support this. That's the reason I
> suggest Harmony use system call to solve the problem, not cut long to a
> integer in Harmony's Java or native code.
> Currently the problem is that the portlib has ignored the difference
> between Linux and windows, so we see no difference in Harmony, while RI
> behaves differently.
>
> And again, any sounds for TestNG? :)
>
> >
> > Regards,
> >
> > 2006/7/25, Leo Li <li...@gmail.com>:
> >> 2006/7/25, Jimmy, Jing Lv <fi...@gmail.com>:
> >> >
> >> > Hi:
> >> >
> >> >     I find another platform-dependent operation
> >> > FileChannel.transforFrom(ReadableByteChannel src, long position, long
> >> > count) in java.nio.channels. RI behaves differently if the given
> count
> >> > is larger than Integer.MAX_VALUE: on windows, it throws an
> IOException;
> >> > on Linux, it return zero silently. It is clear that the difference is
> >> > caused by system call. Unfortunately Harmony fails to behave like RI
> as
> >> > its has the same native code using the port-lib.
> >> >     If it is necessary to make Harmony behaving exactly like RI, I
> >> > suggest writing native code for transforFrom. This may be a
> >> > waste-of-effect as it is nearly the same except for this little
> >> > difference.However, currently people have few chances to use a size
> >> > larger than Integer.MAX_VALUE(nearly 4G, is it?), and system call
> does
> >> > not support long value to pass in.
> >> >
> >> >     Another thing I'd like to mention is that it'll be great if we
> can
> >> > use testNG, or decide some other way to go. At least 2 testcases
> should
> >> > be written for different platform as I remember, including the one
> for
> >> > this problem. :)
> >> >
> >> > --
> >> >
> >> > Best Regards!
> >> >
> >> > Jimmy, Jing Lv
> >> > China Software Development Lab, IBM
> >> >
> >> > ---------------------------------------------------------------------
> >> > Terms of use : http://incubator.apache.org/harmony/mailing.html
> >> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> >> > For additional commands, e-mail:
> harmony-dev-help@incubator.apache.org
> >> >
> >> > Dear Jimmy:
> >>        As spec is not clear about how to deal with the argument greater
> >> than Integer.MAX_VALUE, maybe we shall look more closely at what RI
> >> does and
> >> how the system call behaves.
> >>         I think it will be a good idea to let native code or even
> system
> >> call itself treat with such affairs, provided that Harmony will
> >> support some
> >> 64-bit  platforms one day. Thus it may be not so wise to throw some
> >> exception in java code if encountering the data longer than 32-bits.
> >>        Besides, whether we should behaves the same as RI, even if it is
> >> different on different platforms? :)
> >>
> >>
> >>
> >> --
> >> Leo Li
> >> China Software Development Lab, IBM
> >
> >
>
>
> --
>
> Best Regards!
>
> Jimmy, Jing Lv
> China Software Development Lab, IBM
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
>


-- 
Mikhail Fursov

Re: [classLib]Given a long value, RI behaves differently on windows and linux (and TestNG?)

Posted by "Jimmy, Jing Lv" <fi...@gmail.com>.
Alexei Zakharov wrote:
> Hi,
> 
> Is there any known real applications that use NIO for reading stuff
> with 4GB blocks?
> 

I've never heard of that. However, I believe there may be some in the 
future, or the operation system may support this. That's the reason I 
suggest Harmony use system call to solve the problem, not cut long to a 
integer in Harmony's Java or native code.
Currently the problem is that the portlib has ignored the difference 
between Linux and windows, so we see no difference in Harmony, while RI 
behaves differently.

And again, any sounds for TestNG? :)

> 
> Regards,
> 
> 2006/7/25, Leo Li <li...@gmail.com>:
>> 2006/7/25, Jimmy, Jing Lv <fi...@gmail.com>:
>> >
>> > Hi:
>> >
>> >     I find another platform-dependent operation
>> > FileChannel.transforFrom(ReadableByteChannel src, long position, long
>> > count) in java.nio.channels. RI behaves differently if the given count
>> > is larger than Integer.MAX_VALUE: on windows, it throws an IOException;
>> > on Linux, it return zero silently. It is clear that the difference is
>> > caused by system call. Unfortunately Harmony fails to behave like RI as
>> > its has the same native code using the port-lib.
>> >     If it is necessary to make Harmony behaving exactly like RI, I
>> > suggest writing native code for transforFrom. This may be a
>> > waste-of-effect as it is nearly the same except for this little
>> > difference.However, currently people have few chances to use a size
>> > larger than Integer.MAX_VALUE(nearly 4G, is it?), and system call does
>> > not support long value to pass in.
>> >
>> >     Another thing I'd like to mention is that it'll be great if we can
>> > use testNG, or decide some other way to go. At least 2 testcases should
>> > be written for different platform as I remember, including the one for
>> > this problem. :)
>> >
>> > --
>> >
>> > Best Regards!
>> >
>> > Jimmy, Jing Lv
>> > China Software Development Lab, IBM
>> >
>> > ---------------------------------------------------------------------
>> > Terms of use : http://incubator.apache.org/harmony/mailing.html
>> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> > For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>> >
>> > Dear Jimmy:
>>        As spec is not clear about how to deal with the argument greater
>> than Integer.MAX_VALUE, maybe we shall look more closely at what RI 
>> does and
>> how the system call behaves.
>>         I think it will be a good idea to let native code or even system
>> call itself treat with such affairs, provided that Harmony will 
>> support some
>> 64-bit  platforms one day. Thus it may be not so wise to throw some
>> exception in java code if encountering the data longer than 32-bits.
>>        Besides, whether we should behaves the same as RI, even if it is
>> different on different platforms? :)
>>
>>
>>
>> -- 
>> Leo Li
>> China Software Development Lab, IBM
> 
> 


-- 

Best Regards!

Jimmy, Jing Lv
China Software Development Lab, IBM

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Re: [classLib]Given a long value, RI behaves differently on windows and linux (and TestNG?)

Posted by Alexei Zakharov <al...@gmail.com>.
Hi,

Is there any known real applications that use NIO for reading stuff
with 4GB blocks?


Regards,

2006/7/25, Leo Li <li...@gmail.com>:
> 2006/7/25, Jimmy, Jing Lv <fi...@gmail.com>:
> >
> > Hi:
> >
> >     I find another platform-dependent operation
> > FileChannel.transforFrom(ReadableByteChannel src, long position, long
> > count) in java.nio.channels. RI behaves differently if the given count
> > is larger than Integer.MAX_VALUE: on windows, it throws an IOException;
> > on Linux, it return zero silently. It is clear that the difference is
> > caused by system call. Unfortunately Harmony fails to behave like RI as
> > its has the same native code using the port-lib.
> >     If it is necessary to make Harmony behaving exactly like RI, I
> > suggest writing native code for transforFrom. This may be a
> > waste-of-effect as it is nearly the same except for this little
> > difference.However, currently people have few chances to use a size
> > larger than Integer.MAX_VALUE(nearly 4G, is it?), and system call does
> > not support long value to pass in.
> >
> >     Another thing I'd like to mention is that it'll be great if we can
> > use testNG, or decide some other way to go. At least 2 testcases should
> > be written for different platform as I remember, including the one for
> > this problem. :)
> >
> > --
> >
> > Best Regards!
> >
> > Jimmy, Jing Lv
> > China Software Development Lab, IBM
> >
> > ---------------------------------------------------------------------
> > Terms of use : http://incubator.apache.org/harmony/mailing.html
> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> > For additional commands, e-mail: harmony-dev-help@incubator.apache.org
> >
> > Dear Jimmy:
>        As spec is not clear about how to deal with the argument greater
> than Integer.MAX_VALUE, maybe we shall look more closely at what RI does and
> how the system call behaves.
>         I think it will be a good idea to let native code or even system
> call itself treat with such affairs, provided that Harmony will support some
> 64-bit  platforms one day. Thus it may be not so wise to throw some
> exception in java code if encountering the data longer than 32-bits.
>        Besides, whether we should behaves the same as RI, even if it is
> different on different platforms? :)
>
>
>
> --
> Leo Li
> China Software Development Lab, IBM


-- 
Alexei Zakharov,
Intel Middleware Product Division

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Re: [classLib]Given a long value, RI behaves differently on windows and linux (and TestNG?)

Posted by Leo Li <li...@gmail.com>.
2006/7/25, Jimmy, Jing Lv <fi...@gmail.com>:
>
> Hi:
>
>     I find another platform-dependent operation
> FileChannel.transforFrom(ReadableByteChannel src, long position, long
> count) in java.nio.channels. RI behaves differently if the given count
> is larger than Integer.MAX_VALUE: on windows, it throws an IOException;
> on Linux, it return zero silently. It is clear that the difference is
> caused by system call. Unfortunately Harmony fails to behave like RI as
> its has the same native code using the port-lib.
>     If it is necessary to make Harmony behaving exactly like RI, I
> suggest writing native code for transforFrom. This may be a
> waste-of-effect as it is nearly the same except for this little
> difference.However, currently people have few chances to use a size
> larger than Integer.MAX_VALUE(nearly 4G, is it?), and system call does
> not support long value to pass in.
>
>     Another thing I'd like to mention is that it'll be great if we can
> use testNG, or decide some other way to go. At least 2 testcases should
> be written for different platform as I remember, including the one for
> this problem. :)
>
> --
>
> Best Regards!
>
> Jimmy, Jing Lv
> China Software Development Lab, IBM
>
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>
> Dear Jimmy:
        As spec is not clear about how to deal with the argument greater
than Integer.MAX_VALUE, maybe we shall look more closely at what RI does and
how the system call behaves.
         I think it will be a good idea to let native code or even system
call itself treat with such affairs, provided that Harmony will support some
64-bit  platforms one day. Thus it may be not so wise to throw some
exception in java code if encountering the data longer than 32-bits.
        Besides, whether we should behaves the same as RI, even if it is
different on different platforms? :)



-- 
Leo Li
China Software Development Lab, IBM