Hello Robert, On 24 November 2015 at 13:31:02, Robert M. Mather ([email protected]) wrote:
I’ve narrowed the problem down to the Gogo script I’ve been using for uploading bundles to the obr and linking them to a feature. I don’t know what’s wrong with the script and/or that method, but when I switched back to doing it manually in the web UI, things started working normally again. I created the script starting from an example given in a presentation on continuous deployment (https://www.youtube.com/watch?v=4S_zvgG_MLw). Conceptually, that script creates artifacts and links them all to a feature. When manually linking artifacts you need to make sure that you end up with only a single version of a bundle for each target. If you have more than one version linked, that won’t deploy as the Deployment Admin specfiication prohibits having more than one version in a deployment package. It’s hard for me to see if that is indeed what happens when you run your script, but it’s something worth looking out for. Here is the script, maybe there’s some mistake I’m missing… ``` sourceIndex = (repo:index /my/local/runbundle/directory) sourceRepo = (repo:repo OBR $sourceIndex) targetRepo = (repo:repo OBR "http://ace.server.url/obr/repository.xml") deployed = repo:cd $sourceRepo $sourceRepo $targetRepo workspace = (ace:cw) featureName = "myFeature|$(System:currentTimeMillis)" $workspace cf $featureName Since you create a new feature every time you run the script, you might end up with the situation described above if you link more than one feature to a target. If you’re running this in continuous deployment, I would consider adding some code to the script that first cleans up at least the feature and all associations (and possibly even the artifact definitions) before creating a new one. each $deployed { identity = $it getIdentity version = $it getVersion name = "$identity - $version" url = $it getUrl mimetype = $it getMimetype if { (coll:first ($workspace la "(&(Bundle-SymbolicName=$identity)(Bundle-Version=$version))")) } { echo "artifact $name already exists" } { $workspace ca [ artifactName="$name" url="$url" mimetype="$mimetype" Bundle-SymbolicName="$identity" Bundle-Version="$version" ] } $workspace ca2f "(&(Bundle-SymbolicName=$identity)(Bundle-Version=$version))" "(name=$featureName)" } $workspace commit exit 0 ``` On Sat, Nov 21, 2015 at 3:07 PM, Robert M. Mather < [email protected]> wrote: > I'm trying to deploy a set of bundles that resolves and runs fine inside > bndtools, but leads to errors on the (Felix) client. So far, I've seen: > > > 2015-11-21 11:39:50 | ERROR | ACE Agent Controller | > org.apache.ace.agent.1.0.1 - Could not delete temporary deployment package > from disk > > 2015-11-21 11:39:50 | ERROR | ACE Agent Controller | > org.apache.ace.agent.1.0.1 - Installation of deployment update failed: The > InputStream is not a jar! java.io.IOException: Unknown/unexpected status > code: 500 at > org.apache.ace.agent.impl.ContentRangeInputStream.getHttpContentRangeInfo(ContentRangeInputStream.java:341) > > ~[na:na] at > org.apache.ace.agent.impl.ContentRangeInputStream.getContentRangeInfo(ContentRangeInputStream.java:288) > > ~[na:na] at > org.apache.ace.agent.impl.ContentRangeInputStream.prepareNextChunk(ContentRangeInputStream.java:418) > > ~[na:na] at > org.apache.ace.agent.impl.ContentRangeInputStream.read(ContentRangeInputStream.java:188) > > ~[na:na] at > org.apache.felix.deploymentadmin.OutputtingInputStream.read(OutputtingInputStream.java:64) > > ~[na:na] at java.io.FilterInputStream.read(FilterInputStream.java:133) > ~[na:1.8.0_40] at > java.io.PushbackInputStream.read(PushbackInputStream.java:186) > ~[na:1.8.0_40] at > java.util.zip.ZipInputStream.readFully(ZipInputStream.java:403) > ~[na:1.8.0_40] at > java.util.zip.ZipInputStream.readLOC(ZipInputStream.java:278) > ~[na:1.8.0_40] at > java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:122) > ~[na:1.8.0_40] at > java.util.jar.JarInputStream.<init>(JarInputStream.java:83) ~[na:1.8.0_40] > at java.util.jar.JarInputStream.<init>(JarInputStream.java:62) > ~[na:1.8.0_40] at > org.apache.felix.deploymentadmin.DeploymentAdminImpl.installDeploymentPackage(DeploymentAdminImpl.java:174) > > ~[na:na] at > org.apache.ace.agent.impl.DeploymentHandlerImpl.install(DeploymentHandlerImpl.java:237) > > ~[na:na] at > org.apache.ace.agent.impl.DefaultController$StreamingUpdateInstaller.doInstallUpdate(DefaultController.java:162) > > ~[na:na] at > org.apache.ace.agent.impl.DefaultController$UpdateInstaller.installUpdate(DefaultController.java:253) > > ~[na:na] at > org.apache.ace.agent.impl.DefaultController.runDeploymentUpdate(DefaultController.java:610) > > ~[na:na] at > org.apache.ace.agent.impl.DefaultController.run(DefaultController.java:460) > ~[na:na] at > org.apache.ace.agent.impl.AgentContextImpl$1.run(AgentContextImpl.java:252) > ~[na:na] > > and also > > > 2015-11-21 11:39:50 | ERROR | ACE Agent Controller | > org.apache.ace.agent.1.0.1 - Stream does not contain a valid Jar > java.io.IOException: Unknown/unexpected status code: 500 at > org.apache.ace.agent.impl.ContentRangeInputStream.getHttpContentRangeInfo(ContentRangeInputStream.java:341) > > ~[na:na] at > (rest of trace same as above) > > and > > INFO|1428/0||15-11-21 05:22:51|[ERROR] 05:22:51 (controller) Installation > of deployment update failed: Expected more bundles in the stream: > [com.google.guava-18.0.0.jar, > ring.order.inject.micros-1.0.6.201511210151_v120-84-g2a514b1-dirty.jar, > ring.api.menu.upload-1.0.1.201511210011_v120-84-g2a514b1-dirty.jar, > org.apache.httpcomponents.httpcore-4.3.3.jar, > ring.ping-1.0.4.201511210011_v120-84-g2a514b1-dirty.jar, > ring.menu.upload-1.0.2.201511210022_v120-84-g2a514b1-dirty.jar, > ring.creditCard.decrypt-1.0.8.201511210022_v120-84-g2a514b1-dirty.jar, > log4j.over.slf4j-1.7.12.jar, > org.apache.servicemix.bundles.json-20140107.0.0.1.jar, > ch.qos.logback.core-1.1.3.jar, > ring.conf.micros-1.0.4.201511210022_v120-84-g2a514b1-dirty.jar, > org.apache.httpcomponents.httpclient-4.3.6.jar, > osgi.cmpn-5.0.0.201305092017.jar, bcprov-1.53.jar, > com.fasterxml.jackson.core.jackson-databind-2.5.1.jar, > com.fasterxml.jackson.core.jackson-core-2.5.1.jar, > ring.menu.process-1.0.6.201511210022_v120-84-g2a514b1-dirty.jar, > org.apache.commons.io-2.4.0.jar, ch.qos.logback.classic-1.1.3.jar, > ring.conf.cache-1.0.6.201511210022_v120-84-g2a514b1-dirty.jar, > patronpath.wrap.pubnub-1.0.4.201511210011_v120-84-g2a514b1-dirty.jar, > ring.menu.extract.micros-2.0.2.201511210011_v120-84-g2a514b1-dirty.jar, > ring.util.order-1.0.5.201511210011_v120-84-g2a514b1-dirty.jar, > ring.log.fetch-1.0.5.201511210022_v120-84-g2a514b1-dirty.jar, > org.slf4j.osgi-over-slf4j-1.7.12.jar, > ring.order.process-1.1.6.201511210011_v120-84-g2a514b1-dirty.jar, > ring.util.json-1.1.4.201511210011_v120-84-g2a514b1-dirty.jar, > ring.conf.prod-3.0.0.201511210048_v120-84-g2a514b1-dirty.jar, > org.functionaljava-4.3.jar, > com.fasterxml.jackson.core.jackson-annotations-2.5.1.jar, > org.apache.felix.scr-2.0.0.jar, jcl.over.slf4j-1.7.12.jar, > ring.channel.pubnub-1.0.8.201511210022_v120-84-g2a514b1-dirty.jar, > ring.conf.boot-1.0.5.201511210022_v120-84-g2a514b1-dirty.jar] (463)! To be honest, so far I don’t see any “duplicate” bundles in this list. Then again, the fact that some bundle in the stream appears to be “missing” does mean something is wrong. Deployment packages get created on the fly in ACE so when something goes wrong during that creation, that is usually only noticed when a target asks for such a deployment package. > I can't pin down whether the cause is the bundles themselves, or something > in the ace server/agent. The only things that have changed recently (as far > as I know) are upgrading to bndtools 3.0.0 and removing a set of > dependencies we no longer needed in our application. In theory you should also check to make sure if the MANIFEST.MF file is indeed the first entry in the bundle. According to the spec, it should, and most tools do respect that, but I’ve seen “bundles” in the past that were either hand-edited, or were processed with some more generic jar/zip tools that did not respect that. > Is it possible that bndtools is generating jars that are invalid based on > the agent's verification? Has anyone else seen errors like these? So far we have never seen bnd(tools) generate “invalid” bundles, but I would definitely also check my dependencies. Ending up with more than one version of a bundle for a target would be my next guess as explained above. If neither of those are the cause, the next step is probably to somehow create a scenario that I can reproduce, or to step through the code with a debugger to get a better feel for what goes wrong exactly. In any case, let us know if you need more help! Greetings, Marcel
