Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [cross-project-issues-dev] Notice of change to batch "signing service"

> So things are back now that i added a dummy class to
> javax.annotation.jre! I have no freaking idea why this should make a
> difference but I've now at least a working build!

Not sure how much you want to pursue this, but ... a few old memories are coming back to me.

First, remember that Tycho doesn't use the "batch signing service", per se, but does their own re-pack, and "pack200" ... I've always assumed they use the VM you are running your build with, but, do not know for sure.

One reason they do this, is that bundles with no .class files do not profit from re-pack/pack200 (but still profit from gzip). I am not sure of the implementation details, but this includes at least features.jars and source*.jars. I am not sure if they literally "look in" other bundles to see if "resources only" (no .class files) or what. (Buckminster does something similar, but again, do not know implantation).

I see your bundle has a BREE of 1.8 . Did your empty bundle also contain a BREE? Or was that added when the dummy .class added? ... wouldn't it be interesting (i.e. a "bug", sort of, in your code :) if Tycho use the presence of a BREE to decide if "class files or not"?

Ok, you deserve it now, having read this far ... the old memory is ...  when moving from Java 5 to Java 6, we learned that if a bundle contained  .class files, at the 1.5 level, then the 1.6 pack200 tools would make one set of assumptions, so that unpacking the bundle would be compatible with either 1.5 or 1.6. BUT, if the bundle had no class files, then the pack200 tools would make another set of assumptions, and could no longer be unpacked with Java 1.5. (Yeah, silly, eh?)  I've looked for the original bug, but can't find it, so might have just been a mailing list discussion? I believe the work around was just to "pack" with Java 5, even if using Java 6 to run the rest of the build. (I do not know when the infrastructure changed to use Java 6).

Your case sounds similar, in some ways, though not exactly the same.

Just thought you might find it comforting that similarly strange, freaky  things have happened before.

Old statistic of the day: By coincidence, I ran across this old bug, from way way back in "Callisto days" where I did a little analysis on "savings" (Bug 145685) and found:
"It is very interesting that on a jar by jar basis, the reduced size varied everywhere from 20% to 90% of the original jar (with the 44% being a real-life-in-practice average)."
I suspect we are doing even better than that now ... but hope that 44% (56% savings in bandwidth) helps explain why its important to have these pack.gz files in the first place, and, of course, they must be able to be unpacked reliably by our users, or it ends up making things worse, since then the jar has to be downloaded (too), for an overall increase in bandwidth!

New tip of the day:  I've not tried it yet, but I see in the pack200 spec there is a ---pass-file option, so if your "unpack200/verify" is failing due to one class, you can tell the pack200 processor to not monkey with that one class file, but still pack200 the rest. I suspect, in practice, this only effects Orbit, or others using PDE build, where they have a high degree of control over the process and parameters of pack200 (via eclipse.inf, if nothing else, which is not (fully) supported by Tycho ... but Buckminster does, I believe support that part of eclipse.inf files. [And to be clear, I am not suggesting everyone "jump through hoops" here ... I personally was worried about one case, ICU4J, which is a huge jar file, and seemed to be having trouble being packed by Java 8, due to one class, but, like I said, I have not tried it yet to see if it solves the problem. Tracking in Bug 464100  if anyone is that interested.].

Thanks for reading a yet another long and extra wordy note!





 

Back to the top