Closed Bug 1464077 Opened 7 years ago Closed 7 years ago

Teach vcsreplicator about phase data exchange over bundle2

Categories

(Developer Services :: Mercurial: hg.mozilla.org, enhancement)

enhancement
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: sheehan, Assigned: gps)

References

Details

Attachments

(1 file)

From D1376: > Mercurial 4.4 supports exchanging phases data via bundle2. Before > 4.4, clients would send phases data via a "pushkey" wire protocol > command. > > As part of upgrading the SSH server to 4.4, phases exchange behavior > will change and this will throw off vcsreplicator. > > In order to smooth the transition to Mercurial 4.4, this change > disables the new 4.4 server behavior of allowing phases to be > exchanged via bundle2. In other words, it makes a 4.4+ server > behave like a 4.3 server. > > My intent is for this hack to be temporary. Once vcsreplicator is > taught about the new bundle2 capabilities, we should be able > to remove this hack." > Filing this bug to track that work.
I have a patch in progress.
Assignee: nobody → gps
Status: NEW → ASSIGNED
Mercurial 4.4 supports sending phases via bundle2. When we deployed 4.4 on hgssh, we disabled this feature because it confused the replication system. Specifically, when phases are updated via bundle2, Mercurial doesn't fire a pushkey hook indicating phases were updated. The replication mechanism wouldn't see any activity and wouldn't emit any messages to trigger replication. In other words, it looked like a no-op push. This commit teaches the replication system about phases pushed via bundle2. We monkeypatch the bundle2 part handler for phases data. When we process a phases part for a bundle2 that doesn't have a corresponding changegroup part, we record the phases changes and convert them to pushkey events. These get turned into pushkey messages, which result in the replication system running `hg debugpushkey` to apply them. The Ansible config disabling phases exchange has been removed, allowing new clients to opt in to the new mechanism. A test case where bundle2 phases exchange is disabled has been added. Test output doesn't change. This is good, as it means that the replication system preserves the current behavior. There were test output changes in test-push-basic.t, which resulted from clients pushing phases via bundle2 and the server not firing the pushkey hook. Since the vcsreplicator extensions should now be fully compatible with Mercurial 4.5, their version compatibility has been updated accordingly.
Comment on attachment 8982041 [details] vcsreplicator: handle phases exchange via bundle2 (bug 1464077); r?sheehan Connor Sheehan [:sheehan] has approved the revision. https://phabricator.services.mozilla.com/D1471
Attachment #8982041 - Flags: review+
Pushed by cosheehan@mozilla.com: https://hg.mozilla.org/hgcustom/version-control-tools/rev/7d11a3d11ba5 vcsreplicator: handle phases exchange via bundle2 ; r=sheehan
Status: ASSIGNED → RESOLVED
Closed: 7 years ago
Resolution: --- → FIXED
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Blocks: 1470606
Pushed by gszorc@mozilla.com: https://hg.mozilla.org/hgcustom/version-control-tools/rev/07a2dcbf8db4 vcsreplicator: handle phases exchange via bundle2 ; r=sheehan
Status: REOPENED → RESOLVED
Closed: 7 years ago7 years ago
Resolution: --- → FIXED
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: