On 9 Sep 2013 13:52, "Adam Murdoch" <adam.murd...@gradleware.com> wrote: > > > On 10/09/2013, at 5:32 AM, Daz DeBoer <darrell.deb...@gradleware.com> wrote: > >> On Sun, Sep 8, 2013 at 3:34 PM, Adam Murdoch <adam.murd...@gradleware.com> wrote: >>> >>> >>> On 09/09/2013, at 5:21 AM, Daz DeBoer <darrell.deb...@gradleware.com> wrote: >>> >>>> G'day >>>> Since we're currently changing the way we manage locks in the Gradle cache, it would be great if we could separate the 'filestore' part of the cache (that hasn't changed in structure since 1.0) from the binary metadata part (which changes quite frequently). >>>> >>>> What this means is that we'd have these in separate directories: >>>> ~/.gradle/caches/metadata-1 >>>> ~/.gradle/caches/filestore-1 >>>> >>>> The 'filestore' would simply contain the content that is currently in caches/artifacts-n/filestore. >>>> >>>> The benefit of this change is that the actual downloaded files would not need to be copied into a new location every time we change the metadata file format. >>>> >>>> The only complication I see is that we'd need a separate (cross-version) lock for the filestore since it would be shared by different Gradle versions. We'd need to bump the filestore version whenever the locking mechanism changes, rather than every time the metadata store format changes. >>> >>> >>> I think having two locks would make it easy to deadlock when there are 2 processes (or threads) resolving concurrently. We could address this by enforcing a certain lock order (eg always lock the files if you need to lock the metadata). >>> >>> Another option would be to have a single lock for both the files and metadata, versioned on the locking protocol, something like: >>> >>> ~/.gradle/caches/files-1 >>> ~/.gradle/caches/files-1/store-1 >>> ~/.gradle/caches/files-1/metadata-1 >>> >> >> It could even look at bit more intentional if we used eg: >> >> caches/modules-1 >> caches/modules-1/artifacts-1.0 >> caches/modules-1/metadata-1.3 > > > This isn't really going to work. If a format change is backwards compatible, then we should not change the directory name, otherwise we have two sets of processes that are using different stores even though they can share them. So we wouldn't use the minor version in file names, only major versions. >
I don't really understand how my proposal is any different, except in the actual numbers used. When the lock file format changes, we need to create a new top level directory with new file store and metadata. When the file store or metadata formats change we bump that version only. The actual numbers uses are arbitrary. Not at all important, though. >> >> This would be a cosmetic difference, but I think it would look clearer to users. >> >> Either way, any chance we can slip this into the cache locking changes that are currently in progress? Or add it as a story to be done soon? > > > It's a separate story, but we can try to do it soon. I was waiting for the next meta-data format change. > > > -- > Adam Murdoch > Gradle Co-founder > http://www.gradle.org > VP of Engineering, Gradleware Inc. - Gradle Training, Support, Consulting > http://www.gradleware.com > > Join us at the Gradle eXchange 2013, Oct 28th in London, UK: http://skillsmatter.com/event/java-jee/gradle-exchange-2013 > > >