Hi guys. After a couple of efforts from Martin Dias and I, we have a "working" Fuel serializer for Squeak. I used the quotes because all I could do is to run tests. Fuel is a binary serializer and you can find all the information in http://rmod.lille.inria.fr/web/pier/software/Fuel This is a project sponsored by ESUG SummerTalk and mainly developed by Martin Dias.
I only tried in a Squeak 4.2 image. To install it:
(Installer monticello http: 'http://ss3.gemstone.com/ss') project: 'Fuel'; install: 'ConfigurationOfFuel'.
((Smalltalk at: #ConfigurationOfFuel) project version: '1.8-baseline') load.
Most tests are green. There are only 2 categories of tests failing: 1) those under the category 'FuelTests-InternalMetalevel'. This is because Squeak has removed the traits there are in Pharo and hence most tests fails. However, this stuff of "InternalMetalevel" is only used if you want to serialize classes/traits completely. Most of the cases, the user just wants to serialize a class/trait as global (just serialize its name) and then during materialization it just searches the class. Of course, in the image where you materialize, such classes have to be present.
2) some tests that are long and it seems in squeak there is a timeout that make those tests to fail.
As always, we appreciate any feedback.
Cheers
On Sat, Nov 26, 2011 at 05:06:17PM -0300, Mariano Martinez Peck wrote:
Hi guys. After a couple of efforts from Martin Dias and I, we have a "working" Fuel serializer for Squeak. I used the quotes because all I could do is to run tests.
Cool!
As always, we appreciate any feedback.
Hi Mariano,
I loaded Fuel into my working Squeak image, which is an older image kept up to date with trunk via the update stream (i.e. it is "bleeding edge" with various additional packages loaded).
I had to implement SystemVersion>>major and SystemVersion>>minor to complete the installation (these are Pharo idioms, so I just implemented them to answer 0 on Squeak).
I did not encounter the timeout problem, but if you have a long running test, just add a pragma like <timeout: 30> to set the timeout to 30 seconds. This will increase the timeout when running on Squeak, and should not affect Pharo.
Below are some notes that I took while running the tests. The most important issue would be the tests that fail in CompiledMethod comparison. I cannot say if this is a Fuel issue or just something about the way the tests are written, but I note significant differences in the implementation of CompiledMethod>>= between Squeak and Pharo, so it is definitely something worth checking.
Notes on test issues in FuelTests:
FLSequencedSerializationTest>>assertSequencedSerializationEqualityOf: is failing due to difference in CompiledMethod>>= between Pharo and Squeak. Not sure if this is a Fuel issue.
FLBasicSerializationTest>>testGradientFillStyle fails because GradientFillStyle>>= is an identity test, whereas in Pharo it has been added from package '*PolyMorph-Widgets' (i.e. not part of base Pharo either).
FLBasicSerializationTest>>testMethodDictionary fails due to compiled method #= (same issue as FLSequencedSerializationTest>>assertSequencedSerializationEqualityOf:)
In FLBlockClosureSerializationTest, all tests fail with an assertion failure in MethodContext
FLFullBasicSerializationTest>>testMethodDictionaries fails due to the compiled method equality check problem.
FLMethodContextSerializationTest tests fail with assertion failure in MethodContext
FLSortedCollectionSerializationTest tests fail with assertion failure in MethodContext
FLCreateClassSerializationTest has errors due to DNU from ClassForTestToBeDeleted1 class>>basicLocalSelectors
FLCompiledMethodSerializationTest>>testTwoCompiledMethodsReferencingSameClassVariable fails due to the compiled method equality check problem.
FLCreateTraitSerializationTest>>testCreateBasic fails with DNU on Trait>>basicLocalSelectors
Hi Mariano,
I loaded Fuel into my working Squeak image, which is an older image kept up to date with trunk via the update stream (i.e. it is "bleeding edge" with various additional packages loaded).
Excellent :) Where can I get a "bleeding edge" Squeak image?
I had to implement SystemVersion>>major and SystemVersion>>minor to complete the installation (these are Pharo idioms, so I just implemented them to answer 0 on Squeak).
To complete the instalation?? Can you remember why (the sender) it is needing #mayor and #minor? As far as I remember, it is only used by Fuel in FLBasicSerializationTest
expectedFailures
but that is not the installation, but running tests.
I did not encounter the timeout problem, but if you have a long running test, just add a pragma like <timeout: 30> to set the timeout to 30 seconds. This will increase the timeout when running on Squeak, and should not affect Pharo.
Thanks, I didn't know. Is there a way to run the tests in the test runner so that it doesn't take into account such timeouts? or can I change the global preference? I ask so that to avoid changing tests code (even if they would work for Pharo).
Below are some notes that I took while running the tests. The most important issue would be the tests that fail in CompiledMethod comparison. I cannot say if this is a Fuel issue or just something about the way the tests are written, but I note significant differences in the implementation of CompiledMethod>>= between Squeak and Pharo, so it is definitely something worth checking.
That's a good point. There must be something there for sure.
Notes on test issues in FuelTests:
FLSequencedSerializationTest>>assertSequencedSerializationEqualityOf: is failing due to difference in CompiledMethod>>= between Pharo and Squeak. Not sure if this is a Fuel issue.
FLBasicSerializationTest>>testGradientFillStyle fails because GradientFillStyle>>= is an identity test, whereas in Pharo it has been added from package '*PolyMorph-Widgets' (i.e. not part of base Pharo either).
FLBasicSerializationTest>>testMethodDictionary fails due to compiled method #= (same issue as FLSequencedSerializationTest>>assertSequencedSerializationEqualityOf:)
In FLBlockClosureSerializationTest, all tests fail with an assertion failure in MethodContext
FLFullBasicSerializationTest>>testMethodDictionaries fails due to the compiled method equality check problem.
FLMethodContextSerializationTest tests fail with assertion failure in MethodContext
FLSortedCollectionSerializationTest tests fail with assertion failure in MethodContext
FLCreateClassSerializationTest has errors due to DNU from ClassForTestToBeDeleted1 class>>basicLocalSelectors
FLCompiledMethodSerializationTest>>testTwoCompiledMethodsReferencingSameClassVariable fails due to the compiled method equality check problem.
FLCreateTraitSerializationTest>>testCreateBasic fails with DNU on Trait>>basicLocalSelectors
Thanks for the detailed answer. From what I can see, even if those tests are wrong, "most cases" should work fine.
Cheers
On Sun, Nov 27, 2011 at 03:34:27PM -0300, Mariano Martinez Peck wrote:
Hi Mariano,
I loaded Fuel into my working Squeak image, which is an older image kept up to date with trunk via the update stream (i.e. it is "bleeding edge" with various additional packages loaded).
Excellent :) Where can I get a "bleeding edge" Squeak image?
The most recent update on the ftp server is ftp://ftp.squeak.org/4.3alpha/Squeak4.3gamma-11793.zip
Run that image, then from the world menu (left click anywhere), select help... -> update code from server
When the update is complete, you have a fully updated image.
I had to implement SystemVersion>>major and SystemVersion>>minor to complete the installation (these are Pharo idioms, so I just implemented them to answer 0 on Squeak).
To complete the instalation?? Can you remember why (the sender) it is needing #mayor and #minor? As far as I remember, it is only used by Fuel in FLBasicSerializationTest
expectedFailures
but that is not the installation, but running tests.
I'm not sure, but for whatever reason it popped up as an error while I was installing.
I did not encounter the timeout problem, but if you have a long running test, just add a pragma like <timeout: 30> to set the timeout to 30 seconds. This will increase the timeout when running on Squeak, and should not affect Pharo.
Thanks, I didn't know. Is there a way to run the tests in the test runner so that it doesn't take into account such timeouts? or can I change the global preference? I ask so that to avoid changing tests code (even if they would work for Pharo).
I don't think that there is a preference for this. It's probably best to just provide the pragma for the specific tests, since this will not affect the tests themselves.
Thanks for the detailed answer. From what I can see, even if those tests are wrong, "most cases" should work fine.
Yes, it is working fine for me. I just changed RemoteTask to make use of Fuel for serializing objects between images, and it seems to work very well.
Dave
On Sat, Nov 26, 2011 at 05:06:17PM -0300, Mariano Martinez Peck wrote:
Hi guys. After a couple of efforts from Martin Dias and I, we have a "working" Fuel serializer for Squeak. I used the quotes because all I could do is to run tests. Fuel is a binary serializer and you can find all the information in http://rmod.lille.inria.fr/web/pier/software/Fuel This is a project sponsored by ESUG SummerTalk and mainly developed by Martin Dias.
Fuel seems to work fine in Squeak (despite some issues in the tests), so I updated RemoteTask http://wiki.squeak.org:8080/squeak/6176 to use Fuel rather than ReferenceStream for returning the results of a remote task to the supervisor image. If Fuel is not present in the image, ReferenceStream will be used by default. This update is included in the latest CommandShell on SqueakSource.
Fuel provides provides a noticable performance improvement when returning a large result data set, and also avoids a problem in serializing large integers http://bugs.squeak.org/view.php?id=7679 .
Pharo users should beware of this bug when running the RemoteTask examples https://code.google.com/p/pharo/issues/detail?id=4997, because the examples perform prime number searches in the remote tasks.
Dave
On Sun, Nov 27, 2011 at 3:25 PM, David T. Lewis lewis@mail.msen.com wrote:
On Sat, Nov 26, 2011 at 05:06:17PM -0300, Mariano Martinez Peck wrote:
Hi guys. After a couple of efforts from Martin Dias and I, we have a "working" Fuel serializer for Squeak. I used the quotes because all I
could
do is to run tests. Fuel is a binary serializer and you can find all the information in http://rmod.lille.inria.fr/web/pier/software/Fuel This is a project sponsored by ESUG SummerTalk and mainly developed by Martin Dias.
Fuel seems to work fine in Squeak (despite some issues in the tests), so I updated RemoteTask http://wiki.squeak.org:8080/squeak/6176 to use Fuel rather than ReferenceStream for returning the results of a remote task to the supervisor image. If Fuel is not present in the image, ReferenceStream will be used by default. This update is included in the latest CommandShell on SqueakSource.
Excellent. I am glad to hear that. Let us know if there are problems.
Fuel provides provides a noticable performance improvement when returning a large result data set, and also avoids a problem in serializing large integers http://bugs.squeak.org/view.php?id=7679 .
Thanks. Indeed, the performance is one of the most important characteristic of Fuel.
Pharo users should beware of this bug when running the RemoteTask examples https://code.google.com/p/pharo/issues/detail?id=4997, because the examples perform prime number searches in the remote tasks.
Ok, it seems the issue is being discussed.
Cheers
Dave
squeak-dev@lists.squeakfoundation.org