# RFC Failover url for fetches?

4 messages from 2016-10-21 to 2016-10-24. Participants: Stefan Beller, Junio C Hamano, Jakub Narębski.
Thread: https://gitlist.dev/t/44352

## Stefan Beller, 2016-10-21 18:19

Subject: RFC Failover url for fetches?
Message-ID: <CAGZ79kaPdSfY_DXL6BDQ9pAma8p61r4m1n81VTxPHYi8zQuZfA@mail.gmail.com>
URL: https://gitlist.dev/e/CAGZ79kaPdSfY_DXL6BDQ9pAma8p61r4m1n81VTxPHYi8zQuZfA%40mail.gmail.com

```
So when pushing it is possible to have multiple urls
(remote.<name>.url) configured.

When fetching only the first configured url is considered.
Would it make sense to allow multiple urls and
try them one by one until one works?

Background:
http://www.businessinsider.com/amazon-spotify-twitter-github-and-etsy-down-in-apparent-dns-attack-2016-10

I wanted to fetch and had to fix a url of a repo
to point to a working mirror.

Thanks,
Stefan

```

## Junio C Hamano, 2016-10-21 19:03

Subject: Re: RFC Failover url for fetches?
Message-ID: <xmqqeg39bk40.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqqeg39bk40.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <CAGZ79kaPdSfY_DXL6BDQ9pAma8p61r4m1n81VTxPHYi8zQuZfA@mail.gmail.com>

```
Stefan Beller <sbeller@google.com> writes:

> So when pushing it is possible to have multiple urls
> (remote.<name>.url) configured.
>
> When fetching only the first configured url is considered.
> Would it make sense to allow multiple urls and
> try them one by one until one works?

I do not think the two are related.  Pushing to multiple is not "I
want to update at least one of them" in the first place.

As to fetching from two or more places as "fallback", I am
moderately negative to add it as a dumb feature that does nothing
more than "My fetch from A failed, so let's blindly try it from B".
I'd prefer to keep the "My fetch from A is failing" knowledge near
the surface of end user's consciousness as a mechanism to pressure A
to fix it--that way everybody who is fetching from A benefits.
After all, doing "git remote add B" once (you'd need to tell the URL
for B anyway to Git) and issuing "git fetch B" after seeing your
regular "git fetch" fails once in a blue moon is not all that
cumbersome, I would think.

Some people _may_ have objection based on A and B going out of sync,
especially B may fall behind even yourself and cause non-ff errors,
but I personally am not worried about that, because when somebody
configures B as a fallback for A, there is an expectation that B is
kept reasonably up to date.  It would be a problem if some refs are
expected to be constantly rewound at A (e.g. 'pu' in my tree) and
configured to always force-fetch, though.  A stale B would silently
set such a branch in your repository back without failing.




```

## Jakub Narębski, 2016-10-23 17:40

Subject: Re: RFC Failover url for fetches?
Message-ID: <7fdaa160-9262-5d52-7035-8362ca94beea@gmail.com>
URL: https://gitlist.dev/e/7fdaa160-9262-5d52-7035-8362ca94beea%40gmail.com
In-Reply-To: <xmqqeg39bk40.fsf@gitster.mtv.corp.google.com>

```
W dniu 21.10.2016 o 21:03, Junio C Hamano pisze:
> Stefan Beller <sbeller@google.com> writes:
> 
>> So when pushing it is possible to have multiple urls
>> (remote.<name>.url) configured.
>>
>> When fetching only the first configured url is considered.
>> Would it make sense to allow multiple urls and
>> try them one by one until one works?
> 
> I do not think the two are related.  Pushing to multiple is not "I
> want to update at least one of them" in the first place.

Push is/should be 'update all', fetch is/should be 'fetch any'.
I thought that multiple remote.<name>.url values provide this
fallback for fetch, but it looks like it isn't so...

> 
> As to fetching from two or more places as "fallback", I am
> moderately negative to add it as a dumb feature that does nothing
> more than "My fetch from A failed, so let's blindly try it from B".
> I'd prefer to keep the "My fetch from A is failing" knowledge near
> the surface of end user's consciousness as a mechanism to pressure A
> to fix it--that way everybody who is fetching from A benefits.
> After all, doing "git remote add B" once (you'd need to tell the URL
> for B anyway to Git) and issuing "git fetch B" after seeing your
> regular "git fetch" fails once in a blue moon is not all that
> cumbersome, I would think.

One would need to configure fallback B remote to use the same
remote-branch namespace as remote A, if it is to be used as fallback,
I would think.

> 
> Some people _may_ have objection based on A and B going out of sync,
> especially B may fall behind even yourself and cause non-ff errors,
> but I personally am not worried about that, because when somebody
> configures B as a fallback for A, there is an expectation that B is
> kept reasonably up to date.  It would be a problem if some refs are
> expected to be constantly rewound at A (e.g. 'pu' in my tree) and
> configured to always force-fetch, though.  A stale B would silently
> set such a branch in your repository back without failing.

Nb. there is also http-alternates mechanism... which nowadays doesn't
matter anyway, I would think.

-- 
Jakub Narębski


```

## Junio C Hamano, 2016-10-24 16:54

Subject: Re: RFC Failover url for fetches?
Message-ID: <xmqq1sz58z74.fsf@gitster.mtv.corp.google.com>
URL: https://gitlist.dev/e/xmqq1sz58z74.fsf%40gitster.mtv.corp.google.com
In-Reply-To: <7fdaa160-9262-5d52-7035-8362ca94beea@gmail.com>

```
Jakub Narębski <jnareb@gmail.com> writes:

>> As to fetching from two or more places as "fallback", I am
>> moderately negative to add it as a dumb feature that does nothing
>> more than "My fetch from A failed, so let's blindly try it from B".
>> I'd prefer to keep the "My fetch from A is failing" knowledge near
>> the surface of end user's consciousness as a mechanism to pressure A
>> to fix it--that way everybody who is fetching from A benefits.
>> After all, doing "git remote add B" once (you'd need to tell the URL
>> for B anyway to Git) and issuing "git fetch B" after seeing your
>> regular "git fetch" fails once in a blue moon is not all that
>> cumbersome, I would think.
>
> One would need to configure fallback B remote to use the same
> remote-branch namespace as remote A, if it is to be used as fallback,
> I would think.

Yeah, I left it out because I thought that was obvious, but spelling
it out explicitly may have helped those who weren't reading carefully.

Thanks

```
