CWE-ou & Minkata Road Map Planning

Discussions about the OpenUru.org Minkata test shard

Moderator: rarified

Christian Walther
Member
Posts: 317
Joined: Sat Dec 13, 2008 10:54 am

Re: CWE-ou & Minkata Road Map Planning

Post by Christian Walther »

I had done some experiments with the “continuous” (non-cyclic) process I described above and was planning to write a post about how they were successful and how I was proposing to switch to that process. While thinking about how to explain it, I identified another unwritten requirement, one that is trivially satisfied in the cyclic process, but not necessarily in a continuous process:
  • The file tree of the head of the OU branch should always (except temporarily while stuff is being committed to it) be identical (except for the sparse Minkata-specific customizations) to the file tree of some revision that exists on the Minkata branch and has been tested on the Minkata shard for some time.
In other words, only the exact state of things that we tested on the shard should be promoted to CWE-ou.

This turns out to be a harder nut to crack. Are we willing to relax this requirement? I’m having a hard time reconciling it with a continuous process, because it directly contradicts the main goal we are trying to achieve with the continuous process, namely that we don’t want incoming contributions to have to wait for the testing cycle to end before they can be integrated into the Minkata branch.

Example: Features A and B are merged into the Minkata branch and published to the shard for testing. A week later, features C and D are merged and published to Minkata. Another two weeks later, it is decided that A and B are now tested enough and are ready for promotion to the OU branch. However, now the state that is committed to the OU branch, namely one that contains A and B, but not C and D, is one that has only existed on the shard for one week – we thought we had tested A and B for three weeks, but two of those were in combination with C and D, which is a different state than the one we’re promoting, strictly speaking (1). The only way to get the exact state we’re going to promote tested for three weeks is to make C and D wait for two weeks, which is exactly the essence of the cyclic process and what we’re trying to avoid here. Even worse, if we decide that A and C have been sufficiently tested, then the state that the OU branch ends up in, namely one containing A and C, but not B and D, has never existed in the Minkata branch and been tested on the shard (even though we considered A as having been tested for three weeks and C for two weeks) (2).

My current opinion is that we probably shouldn’t do (2), i.e. merge contributions to OU in a different order than to Minkata, but that (1) is permissible as a compromise, in exchange for the advantages we get from the continuous process. It just needs to be done carefully: the features that are tested (partially) concurrently but promoted separately should be ones that are considered unlikely to interact.

With that out of the way, here’s what I wanted to say about my experiments and the proposed process in general:

These experiments consisted of replaying past (and some tentative near-future) history of CWE-ou-minkata and MOULSCRIPT-ou-minkata as if the continuous process had already been in place at that time. Everything worked well, and you can see the resulting repositories here: CWE-ou-minkata-continuous, MOULSCRIPT-ou-minkata-continuous. Revisions whose commit messages start with “*” are recreations of past revisions, those that start with “* let's pretend” are possible future continuations. (Just to be clear, I’m not proposing that we do this history-rewriting if we decide to switch to the new process. I just did it to get more real-life material to work with. In reality, we’d just apply the new process going forward.) The deviation from history as it really happened starts with revision 02e11c6f0c62 in CWE-, which starts the “minkata” branch by applying the Minkata-specific customizations, and cab8cea2fbeb in MOULSCRIPT- (where there are no Minkata-specific customizations). The revisions graphs get a bit crowded, but if you specifically highlight the “default” and “minkata” branches, I think it’s still manageable, and the advantages are worth it.

As alluded to several times above, there are two important branches here: the OU branch and the Minkata branch (both in the current and in the proposed model – the difference is that in the current model the Minkata branch is periodically restarted from the OU branch, while in the new model it is long-lived). In the past, OU has simply been the “default” branch of the *-ou repository, and Minkata the “default” branch of the *-ou-minkata repository. Going forward, I propose naming them differently to better keep the overview, since the *-ou-minkata repository contains both of these branches (both in the current process and in the proposed one). The *-ou repository only contains the OU branch. In my experiments, I named the Minkata branch “minkata” and kept the OU branch at “default”. That made sense to me because the latter is the main branch of the OU repository that we’re publishing to the outside world, while the Minkata branch is more of an internal thing that we can name as we like. I’m open to other schemes though. In that scheme, I would also propose requiring that contributions come on named feature branches, not “default”, to keep “default” reserved to the main OU branch (which is generally good practice anyway). Contributions should still, as before, branch off a revision on the OU branch, preferably the latest at the time (or possibly another feature branch if they depend on that feature). Since the Minkata branch is now long-lived and not periodically discarded, it could be published on Bitbucket too, and contributors could be given the choice of whether to make their pull requests against the OU or Minkata branch. That wouldn’t affect how we maintainers treat it, but it would affect when Bitbucket considers the pull request closed – either when it is merged to Minkata (earlier) or when it is merged to OU (later).

On the left side of the following figure, I schematically explain the proposed continuous process again (also refer to the description in my previous post):
Image

Contrast with the right side, which depicts the current cyclic process, and illustrates the main problem with it that we’re trying to overcome: In step 5, F3 cannot be accepted into the Minkata branch yet, but must wait for the testing cycle to complete. It can only be merged in step 8. This is because if we do accept it in step 5 (dotted), we have two choices, both of which are undesirable:
  • We declare it to be part of the current testing cycle, i.e. part of the contributions that will be promoted to the OU branch at the end of the cycle. This will delay the end of the cycle, because testing requires time. During that delay, new contributions will come in, and if we declare them part of the current cycle as well, they delay it even more, and so on, and the cycle never completes.
  • We declare it not part of the current testing cycle, as shown in the figure. Apart from (just like the continuous process) violating requirement 3, this means that it will be lost when the Minkata branch is restarted in step 7, and a new revision with the same file tree (thin gray line) will have to be recreated later (shown as part of step 8 here). This is unnecessary duplication of work and an opportunity for errors.
Question: In the continuous process, why do we need the merge in step 7 (revision e) at all? Answer: It is there to satisfy requirement 2 (“head of Minkata is always a descendant of the head of OU”). If we leave it away, then the merge to create revision g in step 8 has the two parents f and c. These two revisions have no unique newest common ancestor that can serve as a base for the three-way merge: Both b and a are common ancestors, and they are not ancestrally related (neither is newer than the other, in terms of the revision graph). This situation is known as a “criss-cross merge” and increases the risk of unnecessary merge conflicts in step 8. When step 7 (revision e) is included, on the other hand, g is a merge of f and e, which have a nice and recent unique newest common ancestor, d. Now, e is itself a merge of criss-cross-merged parents: d and c have unrelated common ancestors b and a (again). However, any possible conflicts caused by that are easy to resolve, because we know what the result should be: e should introduce no changes on the Minkata branch, its file tree should be identical to c, because anything that is in the OU branch in revision d must already be in the Minkata branch from before, since we only merge stuff to OU after it has been on Minkata. Compared to its other parent d, e should differ in the Minkata-specifics from step 1 as well as in contribution F3, which is in Minkata but not in OU yet.

(If you take a close look at the example OU-to-Minkata merge in CWE-ou-minkata-continuous, you will notice that it doesn’t quite match what I said above – it does introduce small changes to AllClient.sln into the Minkata branch. This is because the Minkata history leading up to it wasn’t constructed entirely by merging feature branches, as it should have been. Some contributions were instead rebased onto it, and mistakes happened in that rebasing that I didn’t consider worth fixing specifically at the time, because the Minkata branch was destined to be discarded anyway.)

Whew! :) Wall of text – I hope anyone has read this far… :? If so, any thoughts?
Christian Walther
Member
Posts: 317
Joined: Sat Dec 13, 2008 10:54 am

Re: CWE-ou & Minkata Road Map Planning

Post by Christian Walther »

It looks like I have either overwhelmed people, or there is nobody around with enough interest and time to have any opinion. If the former, please complain. If the latter, I propose that we just go ahead and try the new process. Tagging today’s Minkata shard update (which we haven’t done in the past but I think would be a useful thing to get in the habit of) could be a good opportunity to start the “minkata” branches. The Minkata-specific customizations to CWE could be committed before or after that.
User avatar
Mac_Fife
Member
Posts: 1239
Joined: Fri Dec 19, 2008 12:38 am
Location: Scotland
Contact:

Re: CWE-ou & Minkata Road Map Planning

Post by Mac_Fife »

OK, I'll confess to being in the "overwhelmed" category: I never really understood the finer points of distributed VCS having only ever worked with the simpler, centralized variety.

But, if we start with fundamental point you raised Christian: That the head of CWE-ou always needs to match some revision of CWE-ou-minkata that has completed testing and that presents a conflict with your continuous model. If I understand the gist of your post, the key issue you're raising is that the current implication is that there is expected to be an exact match between CWE-ou head and some version in CWE-ou-minkata in the cyclic model and you're proposing that individual features, once tested on Minkata, could be accepted to the head of CWE-ou, without necessarily waiting on any other features that might have gone into Minkata testing at the same time or earlier?

That doesn't seem to be an unreasonable proposition to me. We probably ought to consider that Minkata came along relatively late in the day as a test platform, so it was never part of the original concept of how code changes would propagate through the repos; the idea that there needs to be a "match" anywhere is possibly a local, artificial notion. The primary consideration is that the feature has been tested before reaching CWE-ou.

But that is where my one concern might lie: Provided that the changes within each feature are sufficiently isolated from the changes in any other feature then it all works. If there is any coupling between features then those features need to move together - that's mostly manageable, I think. But when it comes to moving CWE-ou to Cyan for MOULa updates, then we will still need to have that correlation between CWE-ou and a tested revision in CWE-ou-minkata, else you won't really have checked that particular mix of features together. That would imply the need for some form of regression test during the MOULa server update which is maybe a bit late in the day.

So, I'm all in favour of the continuous model, but I think we're still cyclic when it comes to CWE-ou-minkata -> CWE-ou -> MOULa -> CWE-ou update loop?
Mac_Fife
OpenUru.org wiki wrangler
User avatar
rarified
Member
Posts: 1061
Joined: Tue Dec 16, 2008 10:48 pm
Location: Colorado, US

Re: CWE-ou & Minkata Road Map Planning

Post by rarified »

I havn't been overwhelmed, just busy. I still have responding here on my to-do list ;)

_R
One of the OpenUru toolsmiths... a bookbinder.
Christian Walther
Member
Posts: 317
Joined: Sat Dec 13, 2008 10:54 am

Re: CWE-ou & Minkata Road Map Planning

Post by Christian Walther »

Mac_Fife wrote:If I understand the gist of your post, the key issue you're raising is that the current implication is that there is expected to be an exact match between CWE-ou head and some version in CWE-ou-minkata in the cyclic model
Correct, but it goes further than this. I think having a match is highly desirable, and we can keep adhering to that in the continuous model without incurring a significant loss in flexibility. The difference that’s up for discussion is in for how long the matching revision has been in testing on the Minkata shard. In the cyclic model, we have full control over that – that time span is still going on, and we simply don’t end the cycle until we deem it long enough. In the continuous model, it could be very short (the time span between two shard updates) or even zero if the revision in question is superseded before the next shard update, and we have little control over it because it’s already past at the time the OU branch is updated. As you say, this should be no problem in most cases, when features are sufficiently disjoint, but it should be kept in mind.

One possibility of keeping some kind of control over this could be to have an annotation in every commit message on the OU branch that lists two or three numbers of days:
  • How long has this feature been on the shard (possibly in varying combinations with other features)?
  • How long has this exact state been on the shard?
For features that went through several iterations of testing and amendments, the first number could be split in two:
  • How long has this feature been on the shard since its first version?
  • How long has this feature been on the shard in its latest version?
These numbers could also give some guidance to Cyan as to which revisions of CWE-ou are “safe” to pull. Any opinions on this?
Mac_Fife wrote:and you're proposing that individual features, once tested on Minkata, could be accepted to the head of CWE-ou, without necessarily waiting on any other features that might have gone into Minkata testing at the same time or earlier?
Not exactly. I’m proposing “…without necessarily waiting on any other features that might have gone into Minkata testing at the same time or later.” We should probably still wait for those that have gone into testing earlier, because otherwise we get into the situation of the OU tip not matching any existing Minkata state.
Mac_Fife wrote:That would imply the need for some form of regression test during the MOULa server update which is maybe a bit late in the day.
Maybe that regression testing could come in the form of, when Cyan announces that they are about to pull, taking the Minkata shard off the Minkata branch and putting it on the OU branch for a while, i.e. the state that Cyan is planning to pull? Not sure how eager testers would be to go back and test old stuff again though.
Mac_Fife wrote:So, I'm all in favour of the continuous model, but I think we're still cyclic when it comes to CWE-ou-minkata -> CWE-ou -> MOULa -> CWE-ou update loop?
I’m not sure what you mean by that, can you explain? I admit I haven’t spent any thought on it, but I’m imagining that the MOULa -> CWE-ou back-update would come in at any time, completely independently of what we do in CWE-ou and CWE-ou-minkata, and be merged to the OU branch (and then that to the Minkata branch) like any other update. Would there be any problems with that?
User avatar
JWPlatt
Member
Posts: 1137
Joined: Sun Dec 07, 2008 7:32 pm
Location: Everywhere, all at once

Re: CWE-ou & Minkata Road Map Planning

Post by JWPlatt »

More meaningful than feature age, but in combination with it, might be ticket to resolution ratio. If it's at 1 (or some acceptable level like .95) for some minimum time, that should provide good confidence. The case of zero tickets of a feature proved to be working that has required no tickets is either obvious or can be resolved with an auto-resolved ticket that claims no bugs found.
Perfect speed is being there.
User avatar
Mac_Fife
Member
Posts: 1239
Joined: Fri Dec 19, 2008 12:38 am
Location: Scotland
Contact:

Re: CWE-ou & Minkata Road Map Planning

Post by Mac_Fife »

Christian Walther wrote:
Mac_Fife wrote:So, I'm all in favour of the continuous model, but I think we're still cyclic when it comes to CWE-ou-minkata -> CWE-ou -> MOULa -> CWE-ou update loop?
I’m not sure what you mean by that, can you explain? I admit I haven’t spent any thought on it, but I’m imagining that the MOULa -> CWE-ou back-update would come in at any time, completely independently of what we do in CWE-ou and CWE-ou-minkata, and be merged to the OU branch (and then that to the Minkata branch) like any other update. Would there be any problems with that?
I'm not so sure I remember what I was thinking at the time I wrote that :roll: - I guess I was thinking that while we could run a system of continually integrating and approving new features within Minkata/OU when we got to the point that Cyan picked up an update we'd have to fall into stasis until they pushed the back-update so we could re-establish the working baseline. But reading your comments above I realise that we're probably not as tied to that as I was imagining. You're right - it'd be the same as any other update.
Mac_Fife
OpenUru.org wiki wrangler
Christian Walther
Member
Posts: 317
Joined: Sat Dec 13, 2008 10:54 am

Re: CWE-ou & Minkata Road Map Planning

Post by Christian Walther »

JWPlatt wrote:More meaningful than feature age, but in combination with it, might be ticket to resolution ratio. If it's at 1 (or some acceptable level like .95) for some minimum time, that should provide good confidence. The case of zero tickets of a feature proved to be working that has required no tickets is either obvious or can be resolved with an auto-resolved ticket that claims no bugs found.
Good idea. I can’t really judge its usefulness though because I’m somewhat out of touch with what happens in the ticket system. I’d have suspected that most features would get zero tickets, but maybe not. Is there a way of being notified of ticket activity by e-mail or RSS?
User avatar
Mac_Fife
Member
Posts: 1239
Joined: Fri Dec 19, 2008 12:38 am
Location: Scotland
Contact:

Re: CWE-ou & Minkata Road Map Planning

Post by Mac_Fife »

Christian Walther wrote:Is there a way of being notified of ticket activity by e-mail or RSS?
There's no built-in mechanism in the Hesk ticket system for that. E-mail notifications only go to the designated handler of the ticket - I don't believe there's a "global notify" setting, but it may possible to implement one.

But for the most part, your suspicion is correct: Most features that get added here generate no tickets. That's no doubt because they're already well tested before they even get here. There's also the fact that we don't enforce a single means of bug reporting and and let people use whatever they're most comfortable with, JIRA, Hesk or simply commenting on the forums - that makes it harder to have a consolidated "issue list". Hesk shold just be a buffer into JIRA, and JIRA may be able to generate some kind of report but maybe on demand rather than purely autonomously. Not everything that gets mentioned on the forums will find its way into JIRA unless someone chooses to take the time to do that but again there are, I think, very few "defects" pointed out.
Mac_Fife
OpenUru.org wiki wrangler
Christian Walther
Member
Posts: 317
Joined: Sat Dec 13, 2008 10:54 am

Re: CWE-ou & Minkata Road Map Planning

Post by Christian Walther »

It’s time to decide which pending contributions to take into the current Minkata testing cycle (and consequently the next MOULa update proposed to Cyan) and which to postpone to the next one. The focus in this cycle was Skoader’s physics updates, but there is more that may make sense to include.

What we have in the pipeline, as far as my sight goes (i.e. Bitbucket pull requests):
  • Avatar physics update by Skoader (CWE #20, #22, MOULSCRIPT #17) – already on Minkata, definitely part of this cycle
  • Fix pellet points stealing by D'Lanor (MOULSCRIPT #16) – already on Minkata, de facto part of this cycle
  • Fix remote code execution through Python.Cheat and Python.RunFile by Boq and Lyrositor (CWE #24) – I vote for inclusion in the MOULa update because it’s a somewhat urgent security fix
  • Free the cursor, update by Hoikas and CWalther (CWE #25) – I vote for inclusion in the MOULa update because it’s an amendment to something from the last cycle (that’s not on MOULa yet)
  • Fix KI chat scrolling issue when scrolled up by Lyrositor (CWE #26, MOULSCRIPT #18) – no opinion
Any opinions? JW, do you know of any preferences on Cyan’s side?

At the AGM today, there was mention of including more into the proposed MOULa update, e.g. a fix for disappearing login credentials, which as far as I can see hasn’t entered the pull request stage yet. That’s fine with me, but if we do that, should we conclude the current testing cycle first (i.e. merge stuff to CWE-ou) and plan for another one to be included in the MOULa update? That might affect the decision into which cycle to place the above things.

I’m currently doing a final review of Fix remote code execution (not anticipating any objections) and expect to take a look at Fix KI chat scrolling tomorrow, so we should be ready for a Minkata shard update soon.
Post Reply

Return to “OpenUru.org Minkata Test Shard”