Skip to content

Very slow updates when running community build locally #408

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
milessabin opened this issue Nov 28, 2016 · 50 comments
Closed

Very slow updates when running community build locally #408

milessabin opened this issue Nov 28, 2016 · 50 comments

Comments

@milessabin
Copy link

When running the community build locally I see very long (>= 10 mins) pauses coinciding with log output of the form,

[fs2] [info] Updating {file:/home/miles/projects/community-builds/target-0.9.5/project-builds/fs2-5a963db814460240b52e63b349e38ac1d658a6a7/project/}fs2-5a963db814460240b52e63b349

which I believe corresponds to an sbt update in the project about to be built. During these pauses I can see that the community build process is blocked on a socket read from,

java    7165 miles   70u  IPv4 4172377      0t0  TCP tarski.home:38968->ec2-54-67-111-226.us-west-1.compute.amazonaws.com:https (ESTABLISHED)

which corresponds to https://scala-ci.typesafe.com/. Is it possible that this machine is seriously overloaded? Or that it has limited connectivity with Europe?

@SethTisue
Copy link
Member

SethTisue commented Nov 28, 2016

Does the problem go away if you downgrade the sbt version in community.dbuild?

-  sbt-version: "0.13.13"
+  sbt-version: "0.13.12"

I was able to reproduce the problem locally on my laptop at Lightbend SF, and downgrading sbt fixes it, so I assume you'll see the same thing as well.

what's interesting also is that I see the same effect (slow with 0.13.13, fast with 0.13.12) even when running a local Artifactory. so apparently this has nothing to do with anything on scala-ci.typesafe.com

@eed3si9n @dwijnand @cunei can you think of a reason why sbt 0.13.13 would resolve things 100x slower than 0.13.12?

@dwijnand
Copy link
Member

I can't think or see anything obvious from the release notes. Would require more investigation.

@SethTisue SethTisue self-assigned this Nov 28, 2016
@SethTisue
Copy link
Member

is there a nightly build of sbt 0.13.14 I can try, on the off chance whatever's going on has already been fixed?

@dwijnand
Copy link
Member

SethTisue added a commit to SethTisue/community-build that referenced this issue Nov 28, 2016
because of the performance regression under investigation
at scala#408
@SethTisue
Copy link
Member

A mysterious thing about this is that it's fast on Jenkins. So there's one set of conditions under which performance is fine.

Until we have a fix or workaround, maybe we can just downgrade the whole community build to sbt 0.13.12. Test run of that: https://scala-ci.typesafe.com/job/scala-2.12.x-integrate-community-build/988/consoleFull

@milessabin
Copy link
Author

I've been working on (and this ticket is based on) the 2.12.0 branch which uses 0.13.12.

@SethTisue
Copy link
Member

Ugh, perhaps I've made a mistake here where I thought something was fast because I'd downgraded sbt, but it was actually fast for a different reason? Dammit.

@eed3si9n
Copy link
Member

Maybe Dbuild caches something under some circumstances and changing the parameter invalidates the cache?

@SethTisue
Copy link
Member

SethTisue commented Nov 29, 2016

The problem seems to be specific to running update on each project's build definition, to resolve plugins and their dependencies. Once the build definition has been compiled, doing update on the actual projects is pretty fast.

Taking browse as a sample project, if we clone the repo outside of dbuild and run sbt -Dsbt.log.noformat=true, we see:

[info] Resolving org.scala-sbt#global-plugins;0.0 ...
[info] Resolving org.scala-lang#scala-library;2.10.6 ...
[info] Resolving org.scala-sbt#sbt;0.13.13 ...
...

and so on, 43 lines total.

But in a dbuild context, dbuild injects stuff into the build definition, plus for some reason most lines are doubled, so (even with dbuild 0.9.7-RC1, which I tried to see if it helped, and it didn't) we see:

[browse] [info] Resolving com.typesafe.dbuild#plugin;0.9.7-RC1 ...
[browse] [info] Resolving com.typesafe.dbuild#plugin;0.9.7-RC1 ...
[browse] [info] Resolving com.typesafe.dbuild#adapter_2.10;0.9.7-RC1 ...
[browse] [info] Resolving com.typesafe.dbuild#adapter_2.10;0.9.7-RC1 ...
[browse] [info] Resolving org.scala-lang#scala-library;2.10.6 ...
[browse] [info] Resolving org.scala-lang#scala-library;2.10.6 ...
...

and so on, for a whopping 442 lines. each one takes time.

@cunei any insight into why the number of artifacts that need to be resolved would blow up tenfold like that...? is it just all of the transitive dependencies of the stuff that dbuild injects into every build? (but, what about the doubling aspect?)

Also, I'm still confused about whether there's been a regression here. I don't think I remember seeing 10-15 minute pauses before, but it's hard for me to be sure. Once a two-minute pause becomes normal, it becomes normal for me to turn my attention to something else, so then I'm not sure if I would notice that something took 10 minutes instead of two.

I don't think the tenfold increase in the amount of resolution is the only factor at work — it accounts for one order of magnitude of slowdown, but the slowdown here is on the order of 100x, not 10x. I haven't a clue where the other 10x is going.

Using a local Artifactory does help, but not as much you'd hope, since those 442 "Resolving..." lines still each take time.

A lot of my wordings here are pretty vague ("does help, but not as much you'd hope", talk about orders of magnitude) because even just gathering data on this, in the presence of different kinds of caching, isn't easy (as my mistake on the sbt version being responsible shows). Sorry for all the rambling, but I don't know what to do at this point besides ramble, hope somebody else has some insight, and/or give up.

@milessabin:

  • I'm reaching the limit of how much time I can spend on this. If you're normally able to do a local run overnight, that may have to be good enough. Unless @cunei has an idea for how this can be sped up, I'll probably have to throw up my hands. Or unless Eugene or Dale knows some magic switch in sbt I can flip to tell it not to go to the network for all this
  • The other possibility for you to do community build runs is to trigger them on Jenkins. I could decide to tackle add PR validation to https://github.com/scala/community-builds scala-jenkins-infra#92 so that anyone could trigger a run just by opening a PR. And/or, we could just give you access to our Jenkins to trigger runs directly.

@SethTisue
Copy link
Member

@cunei in the 442-line "Resolving..." list, a lot of the lines look funny to me:

[browse] [info] Resolving org.apache#apache;9 ...
[browse] [info] Resolving org.apache#apache;13 ...
[browse] [info] Resolving com.fasterxml#oss-parent;4 ...
...

those don't look like normal dependencies with normal version numbers, is it possible they're a sign of some bug in dbuild...?

@SethTisue
Copy link
Member

maybe #410 will help

@milessabin
Copy link
Author

Unfortunately I've not been able to do a full run overnight. My successful runs have taken a day and a half plus a ton of which is waiting on network IO.

@milessabin
Copy link
Author

I appreciate that you have limited time, but you shouldn't underestimate the benefits of people being able to run community builds without having to come through a central bottleneck ... I'd like to see community builds being used widely for releases of all sorts, not just scala/scala.

@eed3si9n
Copy link
Member

I just found a bug in sbt 0.13.13 that might explain this - sbt/sbt#2851

@milessabin
Copy link
Author

Would that also affect 0.13.12?

@eed3si9n
Copy link
Member

Looking at it bit more closely, since the sbt/sbt#2851 seems to break only the build level keys, it might not be the cause of this slowdown.

@cunei
Copy link

cunei commented Nov 29, 2016

@SethTisue I am looking into it. The versions for org.apache#apache seem correct, those are real version numbers: http://search.maven.org/#search%7Cgav%7C1%7Cg%3A%22org.apache%22%20AND%20a%3A%22apache%22

@SethTisue
Copy link
Member

@milessabin is it only the first project built where the update on the build definition takes so long...? or is it every project? (my current suspicion is that it's only actually slow once per dbuild run, in which case this might not be quite as bad a problem as we feared?)

@milessabin
Copy link
Author

It's every project, at least at the top level. So, 10+ min hang for each of the thirty odd projects.

@cunei
Copy link

cunei commented Nov 30, 2016

@milessabin I have a few suggestions.
The first would be to run dbuild with the "-d" flag; that will cause all ivy logs and other diagnostic information to appear, so that we can have a better idea of what it is doing during the pauses.
The second is that, if there is a socket open to scala-ci.typesafe.com during update, it probably means it is trying to resolve and download artifacts from the Artifactory instance that lives on the same VM, at scala-ci.typesafe.com/artifactory. Resolving and re-downloading from that VM will most likely take a long time: each project is built separately, and each is resolved using a fresh and private .ivy2 repository (there are valid reasons for such behavior), therefore the full set of dependencies ends up being downloaded each time. The best way (or possibly the only reasonable way) to use dbuild locally is having a local artifactory instance, ideally on the same machine (it is quite easy to install). There should be a ~/.sbt/resolvers file on the client that only lists local, artifactory-repo-as-maven, artifactory-repo-as-ivy, so that all resolutions go through that instance. For instance, on my machine I have:

  local
  rover: http://localhost:8088/artifactory/repo
  roverivy: http://localhost:8088/artifactory/repo, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]

All of the necessary remote repositories should be added as remotes within Artifactory, rather than being listed in the "resolvers" file. When that is done, dbuild can be called using the "- l" flag, which will cause the resolvers defined in the community build file to be ignored, and the ~/.sbt/resolvers ones to be used instead (try "dbuild --help" for additional details). At this point, dbuild will resolve everything from the local artifactory, which should be rather fast.
A further note is that Artifactory may expire cached artifacts every now and then; I have seen it being slow on a first resolution every 24 hours, after which it becomes quick again.
Please let me know whether these suggestions are of help; if we determine that the slowdowns are due to other factors, we will try and track them down!

@cunei
Copy link

cunei commented Nov 30, 2016

@SethTisue The duplicate lines during resolution appear during a stand-alone sbt resolution, so it is not something dbuild-specific. Concerning the large number of downloaded dependencies, I am currently checking whether that is due to the additional plugin injected by dbuild, or some other factors.

@dwijnand
Copy link
Member

dwijnand commented Nov 30, 2016

@cunei isn't that meant to be ~/.sbt/repositories (rather than ~/.sbt/resolvers), and include a [repositories] header:

[repositories]
  local
  my-ivy-proxy: http://localhost:8081/artifactory/ivy-proxy, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
  my-mvn-proxy: http://localhost:8081/artifactory/mvn-proxy

@milessabin
Copy link
Author

@cunei thanks for that, very helpful. I'll try setting up a local artifactory and report back.

You say,

each project is built separately, and each is resolved using a fresh and private .ivy2 reposity (there are valid reasons for such behavior), therefore the full set of dependencies ends up being downloaded each time.

Could shared vs. individual .ivy2 repositories be made a configurable option?

@cunei
Copy link

cunei commented Nov 30, 2016

@milessabin Unfortunately that would not work; within dbuild there may be bizarre situations in which you have identically named artifacts which are actually different; they are internally maintained by storing them into a specially built artifacts store, in order to keep them apart. They are then "rematerialized" in various directories during build as needed, in order to keep Ivy happy. So, a single cache won't work very well.

@cunei
Copy link

cunei commented Nov 30, 2016

@dwijnand Right on both counts. For me it's usually ``~/.sbt/re<TAB!>", so I got the name incorrectly. 👍

@SethTisue
Copy link
Member

At this point, dbuild will resolve everything from the local artifactory, which should be rather fast.

@cunei you would think so, but in my experience, it's still pathologically slow even with a local Artifactory

@SethTisue
Copy link
Member

I dunno, perhaps both the Artifactory on scala-ci.typesafe.com, and my local Artifactory, are misconfigured in the same way, and that's ruining performance in both scenarios?

I checked and my Artifactory has "Unused Artifacts Cleanup Period" set to empty, which should mean it never discards old artifacts.

What about "Metadata Retrieval Cache Period" — currently defaulted to 600 seconds. Maybe I should try setting that to a much longer value, like 24 hours or something?

@SethTisue
Copy link
Member

SethTisue commented Dec 1, 2016

It might also help to tell Artifactory which artifacts we expect to find on which remote resolvers. (A piece of advice I found online: "I highly recommend adding include/exclude rules on the remote repositories for the list of groupId/artifacts you are expecting. This will tell Artifactory to completely stop sending request outside for irrelevant artifacts")

I'm more and more convinced this must be an Artifactory config issue. Ivy is hanging on readSocket, so if that takes a long time, surely it's Artifactory's fault? It might be dbuild's fault that it's making 400+ requests, but surely a properly configured Artifactory would respond to each of those 400+ requests pretty much instantly, and the whole thing would only take a matter of seconds?

@retronym
Copy link
Member

retronym commented Dec 1, 2016

That seems unlikely to help (but you never know)

image

@SethTisue
Copy link
Member

SethTisue commented Dec 1, 2016

So, a single cache won't work very well

@cunei but is it possible to use a single cache only when resolving dependencies for build definitions? we don't build sbt plugins in the community build anymore, so these are all just normal Scala 2.10 (or plain old Java) binary artifacts. we don't need, or want, any special dbuild magic to happen with them.

@cunei
Copy link

cunei commented Dec 1, 2016

@SethTisue dbuild rewrites version numbers and artifact names as it works, and it starts with a fresh ivy2 cache per project. Once each project has been compiled, you would have to go hunting what the local build created, and in which way it polluted the ivy2 cache, in order to clean it and prepare it for a new project; it would be a bit tricky.
Besides, in theory dbuild has been designed to be able to build projects in parallel, which means having multiple separate work directories in any case. Support for parallel builds is 80% complete, but it was never finished since some additional locking would be needed, and active dbuild development had to be suspended in order to work on other projects. But most of the code is there, actually. I tried it a couple of times using "fingers crossed" locking (meaning none), and the community build time was drastically reduced (to about half, the last time I tried). So, I'd rather keep the current architecture, on the off chance that parallel building will ever be completed.
Concerning speed from Artifactory, I used a local Artifactory proxy extensively while working, and resolution seemed rather fast in my case. I will try to run a few extractions of the community build locally, to check again in case there are fresh regressions.

@cunei
Copy link

cunei commented Dec 1, 2016

On my system and my local Artifactory, using dbuild, I see resolutions like:

16:01:39.884692: [jackson-module-scala] [info] Resolving com.typesafe.sbt#sbt-osgi;0.7.0 ...
16:01:39.905195: [jackson-module-scala] [info] Resolving biz.aQute.bnd#bndlib;2.1.0 ...
16:01:39.924993: [jackson-module-scala] [info] Resolving org.osgi#org.osgi.core;4.2.0 ...
16:01:39.944396: [jackson-module-scala] [info] Resolving com.github.gseitz#sbt-release;1.0.3 ...
16:01:39.961741: [jackson-module-scala] [info] Resolving com.typesafe.sbt#sbt-pgp;0.8.2 ...
16:01:39.981527: [jackson-module-scala] [info] Resolving com.jsuereth#gpg-library_2.10;0.8.2 ...
16:01:40.002267: [jackson-module-scala] [info] Resolving org.scala-lang#scala-library;2.10.6 ...
16:01:40.021503: [jackson-module-scala] [info] Resolving org.bouncycastle#bcpg-jdk15on;1.49 ...
16:01:40.040836: [jackson-module-scala] [info] Resolving org.bouncycastle#bcprov-jdk15on;1.49 ...
16:01:40.059690: [jackson-module-scala] [info] Resolving net.databinder#dispatch-http_2.10;0.8.10 ...
16:01:40.079821: [jackson-module-scala] [info] Resolving net.databinder#dispatch-core_2.10;0.8.10 ...
16:01:40.104307: [jackson-module-scala] [info] Resolving org.apache.httpcomponents#httpclient;4.1.3 ...
16:01:40.126654: [jackson-module-scala] [info] Resolving org.apache.httpcomponents#httpcore;4.1.4 ...
16:01:40.146811: [jackson-module-scala] [info] Resolving commons-logging#commons-logging;1.1.1 ...
16:01:40.167372: [jackson-module-scala] [info] Resolving commons-codec#commons-codec;1.4 ...
16:01:40.188159: [jackson-module-scala] [info] Resolving net.databinder#dispatch-futures_2.10;0.8.10 ...
16:01:40.208236: [jackson-module-scala] [info] Resolving org.scala-lang#scala-actors;2.10.6 ...
16:01:40.234510: [jackson-module-scala] [info] Resolving com.typesafe.sbt#sbt-site;0.8.1 ...
16:01:40.248307: [jackson-module-scala] [info] Resolving net.databinder#unfiltered-jetty_2.10;0.6.8 ...
16:01:40.260173: [jackson-module-scala] [info] Resolving net.databinder#unfiltered-util_2.10;0.6.8 ...
16:01:40.274035: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-webapp;7.6.9.v20130131 ...
16:01:40.290293: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-xml;7.6.9.v20130131 ...
16:01:40.308394: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-util;7.6.9.v20130131 ...
16:01:40.322803: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-servlet;7.6.9.v20130131 ...
16:01:40.339436: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-security;7.6.9.v20130131 ...
16:01:40.354505: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-server;7.6.9.v20130131 ...
16:01:40.368862: [jackson-module-scala] [info] Resolving org.eclipse.jetty.orbit#javax.servlet;2.5.0.v201103041518 ...
16:01:40.382061: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-continuation;7.6.9.v20130131 ...
16:01:40.397868: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-http;7.6.9.v20130131 ...
16:01:40.412810: [jackson-module-scala] [info] Resolving org.eclipse.jetty#jetty-io;7.6.9.v20130131 ...
16:01:40.431988: [jackson-module-scala] [info] Resolving net.databinder#pamflet-library_2.10;0.6.0 ...
16:01:40.446821: [jackson-module-scala] [info] Resolving net.databinder#pamflet-knockoff_2.10;0.6.0 ...
16:01:40.460310: [jackson-module-scala] [info] Resolving com.tristanhunt#knockoff_2.10;0.8.1 ...
16:01:40.475121: [jackson-module-scala] [info] Resolving net.databinder#unfiltered-netty-server_2.10;0.7.0 ...
16:01:40.491130: [jackson-module-scala] [info] Resolving net.databinder#unfiltered-netty_2.10;0.7.0 ...
16:01:40.504225: [jackson-module-scala] [info] Resolving net.databinder#unfiltered_2.10;0.7.0 ...
16:01:40.517561: [jackson-module-scala] [info] Resolving net.databinder#unfiltered-util_2.10;0.7.0 ...
16:01:40.538066: [jackson-module-scala] [info] Resolving io.netty#netty;3.6.4.Final ...
16:01:40.553644: [jackson-module-scala] [info] Resolving org.antlr#stringtemplate;3.2.1 ...
16:01:40.568081: [jackson-module-scala] [info] Resolving antlr#antlr;2.7.7 ...
16:01:40.579223: [jackson-module-scala] [info] Resolving org.yaml#snakeyaml;1.13 ...
16:01:40.589765: [jackson-module-scala] [info] Resolving com.typesafe.sbteclipse#sbteclipse-plugin;4.0.0 ...
16:01:40.605056: [jackson-module-scala] [info] Resolving org.scalaz#scalaz-core_2.10;7.1.0 ...
16:01:40.619410: [jackson-module-scala] [info] Resolving org.scalaz#scalaz-effect_2.10;7.1.0 ...
16:01:40.634683: [jackson-module-scala] [info] Resolving com.typesafe.sbt#sbt-ghpages;0.5.3 ...
16:01:40.645658: [jackson-module-scala] [info] Resolving com.typesafe.sbt#sbt-git;0.6.4 ...
16:01:40.656891: [jackson-module-scala] [info] Resolving org.eclipse.jgit#org.eclipse.jgit.pgm;3.3.2.201404171909-r ...
16:01:40.678467: [jackson-module-scala] [info] Resolving args4j#args4j;2.0.12 ...

So, definitely fast.

@milessabin
Copy link
Author

I can confirm that a local Artifactory fixes this problem. I think it would be a good idea to guide people in that direction from the outset.

@SethTisue
Copy link
Member

I can confirm that a local Artifactory fixes this problem

hmm, not for me. can you attach your config? (Artifactory can dump it out as XML)

@cunei
Copy link

cunei commented Dec 5, 2016

@SethTisue On my instance, the values for "Metadata Retrieval Cache Period" all default to 43200 (12 hours). I suspect that may be related to the "slow-sometimes-then-fast-again" behavior that I sometimes observe, and to the fact that it's mostly slow in your case. Not sure that is the answer, but it seems worth trying. Also, I'm on Artifactory 4.x, in case that makes a difference.

@milessabin
Copy link
Author

My local Artifactory configuration is here ... suggestions for improvements most welcome.

@SethTisue SethTisue removed their assignment Dec 6, 2016
@SethTisue
Copy link
Member

I thiiiiiiiiink that jacking up retrievalCachePeriodSecs to a big number (I picked 86400 = 24 hours) may have solved my performance problems. As in the first project built during first run of the day is still slow (because expired metadata on everything), but then it gets faster from then on.

I'll keep observing the behavior to try to be more sure.

@milessabin
Copy link
Author

My first successful 2.12.x branch community build after setting up a local Artifactory (so, from cold) took about 3.5 hours. Is that comparable to the sort of times you're seeing?

@SethTisue
Copy link
Member

I haven't done a cold timing recently, but 3.5 hours sounds very good — faster than it runs on Jenkins.

I did some work on this over the weekend — starting with a fresh local Artifactory config with only Maven Central, and then:

  • only adding resolvers as needed to resolve specific artifacts
  • never adding a resolver without using Artifactory's "include filters" feature to ensure that the resolver is only used in specific situations
  • ordering resolvers so that specific, include-filtered resolvers come first and general resolvers come last

That, in combination with a nice long "Metadata Retrieval Cache Period" on all resolvers, seems to have fixed my own performance problems to my own satisfaction.

This is a little different than what Miles did, where his local Artifactory just retrieves everything from the Artifactory on scala-ci.

I took a different approach because my goal is for my new config to eventually replace the one on scala-ci, and hopefully that will result in improved performance for everybody, including our Jenkins runs, and people who are running locally using our Artifactory, and people like Miles who have a local Artifactory that points to ours.

But in order to make that happen, I'd have to upgrade the scala-ci Artifactory to a newer version, otherwise the XML config doesn't carry over (and I don't want to keep multiple versions in sync by hand). So, leaving this ticket open, but it is now fixed at least to the extent that:

  • Miles and I have satisfactory working configs
  • if anyone else wants to get up and running, I can give them good advice and not just flail or shrug

I plan to return to this in 2017.

@SethTisue
Copy link
Member

fwiw, locally I'm on Artifactory 4.14.3 now and my current config (which does not use the scala-ci Artifactory for anything) is https://gist.github.com/SethTisue/04dfcd01480882e4cf359d8e60e3f054

@milessabin
Copy link
Author

@SethTisue I'm tempted to go with your config. Is there any reason why I ought to prefer chaining off the scala-ci Artifactory rather than going direct to the upstream repos as you've done?

@SethTisue
Copy link
Member

@milessabin maintenance — chaining is set-and-forget, the real list of resolvers needs updating, roughly once/month

but having your own config gives you more control, which might matter to you if (as I do) you use it for everything you do, not just for the community build

@milessabin
Copy link
Author

That sounds reasonable.

However I'm not convinced my current set up makes that as smooth as it might be. I ended up chaining several repos from the scala-ci Artifactory and then adding a couple more direct ones. Presumably I could chain them all from scala-ci. But then I need to know which scala-ci repos I ought to be chaining.

Would it be possible to have scala-ci advertise a single (virtual?) repository which would do the whole job?

@SethTisue
Copy link
Member

Would it be possible to have scala-ci advertise a single (virtual?) repository which would do the whole job?

Probably, since that's what I have in my local config — a single virtual repository, with two entries in my ~/.sbt/repositories, one for Maven-style access and one for Ivy-style access. So I assume the scala-ci Artifactory could be set up the same way. I'd have to ask Adriaan if there were specific reasons he set it up the way he did, or if he was just fumbling around. ("Fumbling around" is how I would describe my own engagement with this, I have little real understanding of what I'm doing.)

@milessabin
Copy link
Author

Yeah, fumbling around here too :-)

@SethTisue
Copy link
Member

TIL about the "Eagerly Fetch Jars" option. it isn't on by default, and I didn't have it on in my local config (I do now). it seems plausible that turning it on for all of the remote repos could help. (we already have it enabled in the scala-ci Artifactory)

@SethTisue
Copy link
Member

I've added my local config to the repo: https://github.com/scala/community-builds/blob/2.12.x/artifactory.xml

@SethTisue
Copy link
Member

seems unlikely anyone will pursue this further. having an Artifactory config in the repo for people to use is fine. not that many people want to do local runs; it's fine to use Jenkins most of the time.

@SethTisue
Copy link
Member

I think scala/scala-dev#720 and 0a06655 may be some help here... don't know how much

@SethTisue
Copy link
Member

SethTisue commented Sep 2, 2020

Probably, since that's what I have in my local config — a single virtual repository, with two entries in my ~/.sbt/repositories, one for Maven-style access and one for Ivy-style access. So I assume the scala-ci Artifactory could be set up the same way. I'd have to ask Adriaan if there were specific reasons he set it up the way he did, or if he was just fumbling around.

(scala/scala-dev#720 cut the number of virtual repos from 3 to 2, by eliminating dbuild-unchecked, but I didn't try to go all the way to 1 in this round)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants