i'm not going to argue these points any more. i have registered my
objections, and i don't want to block progress. if you still think it's
appropriate, please go ahead.
https://codereview.appspot.com/8748046/diff/1/cmd/juju/synctools.go#newcode150
cmd/juju/synctools.go:150: return fmt.Errorf("private tools present:
public tools would be ignored")
On 2013/04/16 10:58:58, fwereade wrote:
> On 2013/04/16 10:01:00, rog wrote:
> > On 2013/04/16 08:43:40, fwereade wrote:
> > > On 2013/04/15 13:48:21, rog wrote:
> > > > i think this should be just a warning, if anything.
> > > > just because we have private tools present in the current
environment
> > doesn't
> > > > mean we don't want to make tools available to others in the
public bucket.
> > >
> > > Honestly, I question the value of --public regardless. If I were
setting it
> up
> > > I'd have a shared-tools environ that I never actually used other
than to
> sync
> > > tools into, and use its control-bucket as my other environs'
public-bucket.
> > >
> > > Given the current fallback rules, a public sync-tools into an env
with
> private
> > > tools will fail to perform the purpose of sync-tools -- make them
> *available*
> > to
> > > the target env -- and so I think it's actually better to fail
before
> > performing
> > > a ineffectual copy of X MiB via one's local machine.
> >
> > i think if we're asking it to do something, it should darn well do
it.
> > the user may well know best.
> >
> > a warning would be fine, i think.
> A sync-tools into a public bucket being used by a running environ with
tools
> *will not work* from the POV of the user. They ask for the latest
tools, and
> juju does a bunch of work, and they don't get the latest tools.
If they specify --public, they're not asking for the latest tools.
They're asking them to be made available to the "public".
I can easily think of a situation where I'd want to use synctools
with an existing environment bootstrapped with --upload-tools;
in fact, that's quite possibly the way I'd *normally* use them
(juju bootstrap --upload-tools; check it works; juju sync-tools
--public)
The worst possible down side of letting the sync carry on is that it
spends
a while copying tools (and you'd get a warning). I can't see that as a
significant problem.
Aborting with an error seems to me to be patronising behaviour.
https://codereview.appspot.com/8748046/diff/1/cmd/juju/synctools.go#newcode161
cmd/juju/synctools.go:161: case nil, tools.ErrNoMatches,
tools.ErrNoTools:
On 2013/04/16 10:58:58, fwereade wrote:
> On 2013/04/16 10:01:00, rog wrote:
> > On 2013/04/16 08:43:40, fwereade wrote:
> > > On 2013/04/15 13:48:21, rog wrote:
> > > > still pained by this.
> > >
> > > Each non-test file that uses them together also needs to
differentiate
> between
> > > the two situations.
> >
> > the code above demonstrates that statement isn't actually true.
> ...it's the code above *that* that demonstrates that it in fact just
as I stated
> it.
> case tools.ErrNoTools:
> case nil, tools.ErrNoMatches:
> > taking a quick look through all the places that use the tools.Err*
values, i
> > don't see any where the errors are particularly useful, and
sometimes they
> make
> > things more obscure.
> AIUI, what we agreed in atlanta was that private tools would render
public ones
> inaccessible. I don't think that adding an exception to that rule
makes anything
> clearer...
i don't think i'm making an exception to that rule.
if anything i think it's making *less* exceptions.
the user-observable behaviour with my suggested changes
should be exactly the same as your branch is now
(with the exception that --all actually means "all")
> I haven't yet been convinced that it's sensible to discard the agreed
behaviour,
> but I am becoming convinced that I haven't done it properly and I
should get
> more hardline about copying *available* tools from x such that they
become
> *available* in Y. :)
that's leaning hard on your particular definition of "available",
meaning "available to this particular client". i'd prefer a more general
definition: "available to some client".
> > to try and check that i wasn't on crack, i rustled up a branch which
did what
> > i'm suggesting (lose the special errors and the major-version
argument to
> > ListTools). overall (not counting the tests, which i didn't touch)
it's 27
> less
> > lines of code and sync-tools will now work with all tools, not just
the same
> > major version.
> On first inspection that STM to discard bootstrap tools that should be
> considered valid (agent-version should beat dev)
yes, i missed a "return list, nil" in that if statement.
> ; it makes sync-tools somewhat
> unhelpful to anyone not using the most recent major version (because
they can't
> copy any useful tools without copying *all* tools)
true, but trivially addressed by adding to the filter above;
it adds 4 lines of code.
> ; and it makes the first
> major-version upgrade break upgrade-juju in approximately the same way
it breaks
> sync-tools.
only if the above point isn't addressed.
> We will surely reconsider the details when our minds are fully focused
on major
> version upgrades. But today? Let's stick with predictably conservative
> behaviour, please, and not casually duplicate code to do the same
thing in
> multiple places.
personally i prefer to have less code overall, even if there's some
duplication in it (not that i'm sure what "casually duplicated" code
you're referring to here).
i'm not going to argue these points any more. i have registered my
objections, and i don't want to block progress. if you still think it's
appropriate, please go ahead.
https:/ /codereview. appspot. com/8748046/ diff/1/ cmd/juju/ synctools. go synctools. go (right):
File cmd/juju/
https:/ /codereview. appspot. com/8748046/ diff/1/ cmd/juju/ synctools. go#newcode150 synctools. go:150: return fmt.Errorf("private tools present:
cmd/juju/
public tools would be ignored")
On 2013/04/16 10:58:58, fwereade wrote:
> On 2013/04/16 10:01:00, rog wrote:
> > On 2013/04/16 08:43:40, fwereade wrote:
> > > On 2013/04/15 13:48:21, rog wrote:
> > > > i think this should be just a warning, if anything.
> > > > just because we have private tools present in the current
environment
> > doesn't
> > > > mean we don't want to make tools available to others in the
public bucket.
> > >
> > > Honestly, I question the value of --public regardless. If I were
setting it
> up
> > > I'd have a shared-tools environ that I never actually used other
than to
> sync
> > > tools into, and use its control-bucket as my other environs'
public-bucket.
> > >
> > > Given the current fallback rules, a public sync-tools into an env
with
> private
> > > tools will fail to perform the purpose of sync-tools -- make them
> *available*
> > to
> > > the target env -- and so I think it's actually better to fail
before
> > performing
> > > a ineffectual copy of X MiB via one's local machine.
> >
> > i think if we're asking it to do something, it should darn well do
it.
> > the user may well know best.
> >
> > a warning would be fine, i think.
> A sync-tools into a public bucket being used by a running environ with
tools
> *will not work* from the POV of the user. They ask for the latest
tools, and
> juju does a bunch of work, and they don't get the latest tools.
If they specify --public, they're not asking for the latest tools.
They're asking them to be made available to the "public".
I can easily think of a situation where I'd want to use synctools
with an existing environment bootstrapped with --upload-tools;
in fact, that's quite possibly the way I'd *normally* use them
(juju bootstrap --upload-tools; check it works; juju sync-tools
--public)
The worst possible down side of letting the sync carry on is that it
spends
a while copying tools (and you'd get a warning). I can't see that as a
significant problem.
Aborting with an error seems to me to be patronising behaviour.
https:/ /codereview. appspot. com/8748046/ diff/1/ cmd/juju/ synctools. go#newcode161 synctools. go:161: case nil, tools.ErrNoMatches,
cmd/juju/
tools.ErrNoTools:
On 2013/04/16 10:58:58, fwereade wrote:
> On 2013/04/16 10:01:00, rog wrote:
> > On 2013/04/16 08:43:40, fwereade wrote:
> > > On 2013/04/15 13:48:21, rog wrote:
> > > > still pained by this.
> > >
> > > Each non-test file that uses them together also needs to
differentiate
> between
> > > the two situations.
> >
> > the code above demonstrates that statement isn't actually true.
> ...it's the code above *that* that demonstrates that it in fact just
as I stated
> it.
> case tools.ErrNoTools:
> case nil, tools.ErrNoMatches:
> > taking a quick look through all the places that use the tools.Err*
values, i
> > don't see any where the errors are particularly useful, and
sometimes they
> make
> > things more obscure.
> AIUI, what we agreed in atlanta was that private tools would render
public ones
> inaccessible. I don't think that adding an exception to that rule
makes anything
> clearer...
i don't think i'm making an exception to that rule.
if anything i think it's making *less* exceptions.
the user-observable behaviour with my suggested changes
should be exactly the same as your branch is now
(with the exception that --all actually means "all")
> I haven't yet been convinced that it's sensible to discard the agreed
behaviour,
> but I am becoming convinced that I haven't done it properly and I
should get
> more hardline about copying *available* tools from x such that they
become
> *available* in Y. :)
that's leaning hard on your particular definition of "available",
meaning "available to this particular client". i'd prefer a more general
definition: "available to some client".
> > to try and check that i wasn't on crack, i rustled up a branch which
did what
> > i'm suggesting (lose the special errors and the major-version
argument to
> > ListTools). overall (not counting the tests, which i didn't touch)
it's 27
> less
> > lines of code and sync-tools will now work with all tools, not just
the same
> > major version.
> On first inspection that STM to discard bootstrap tools that should be
> considered valid (agent-version should beat dev)
yes, i missed a "return list, nil" in that if statement.
> ; it makes sync-tools somewhat
> unhelpful to anyone not using the most recent major version (because
they can't
> copy any useful tools without copying *all* tools)
true, but trivially addressed by adding to the filter above;
it adds 4 lines of code.
> ; and it makes the first
> major-version upgrade break upgrade-juju in approximately the same way
it breaks
> sync-tools.
only if the above point isn't addressed.
> We will surely reconsider the details when our minds are fully focused
on major
> version upgrades. But today? Let's stick with predictably conservative
> behaviour, please, and not casually duplicate code to do the same
thing in
> multiple places.
personally i prefer to have less code overall, even if there's some
duplication in it (not that i'm sure what "casually duplicated" code
you're referring to here).
https:/ /codereview. appspot. com/8748046/