{"action":"opened","issue":{"url":"https://api.github.com/repos/plajjan/vrnetlab/issues/51","repository_url":"https://api.github.com/repos/plajjan/vrnetlab","labels_url":"https://api.github.com/repos/plajjan/vrnetlab/issues/51/labels{/name}","comments_url":"https://api.github.com/repos/plajjan/vrnetlab/issues/51/comments","events_url":"https://api.github.com/repos/plajjan/vrnetlab/issues/51/events","html_url":"https://github.com/plajjan/vrnetlab/issues/51","id":170126868,"number":51,"title":"Make topomachine output more deterministic","user":{"login":"plajjan","id":841628,"avatar_url":"https://avatars.githubusercontent.com/u/841628?v=3","gravatar_id":"","url":"https://api.github.com/users/plajjan","html_url":"https://github.com/plajjan","followers_url":"https://api.github.com/users/plajjan/followers","following_url":"https://api.github.com/users/plajjan/following{/other_user}","gists_url":"https://api.github.com/users/plajjan/gists{/gist_id}","starred_url":"https://api.github.com/users/plajjan/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/plajjan/subscriptions","organizations_url":"https://api.github.com/users/plajjan/orgs","repos_url":"https://api.github.com/users/plajjan/repos","events_url":"https://api.github.com/users/plajjan/events{/privacy}","received_events_url":"https://api.github.com/users/plajjan/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":0,"created_at":"2016-08-09T09:55:47Z","updated_at":"2016-08-09T09:55:47Z","closed_at":null,"body":"Due to the heavy use of dicts in topomachine the output is not deterministic and due to the inherent way it iterates over the data structures it will strive to \"compact\" everything. For example, if we have vr1, vr2 and vr2 and we specify we want these links:\r\n * vr1 <-> vr2\r\n * vr1 <-> vr3\r\n\r\ntopomachine will assign the first available interface on vr1, resulting in:\r\n * vr1/1 <-> vr2/1\r\n * vr1/2 <-> vr3/1\r\n\r\n(Do note however that the output is non-deterministic so it could be that vr1<->vr3 ends up being the first interface on vr1)\r\n\r\nIf we remove whichever link is first, the interface on vr1 to which the second link is attached will be moved to the first interface since it is now the first available interface. The slightest of change to a topology will very likely incur massive changes to the whole topology. If we could re-read a previously generated topology file we could try to keep as many interface assignments as possible and only allocate interfaces for new links or remove old unused ones. This would lead to \"holes\", i.e. unused interfaces but overall a more static topology.\r\n\r\nThus I see there are two parts to this:\r\n * [ ] generate same output for same input\r\n * [ ] generate minimal changes for small changes in input"}}
{"actor":{"display_login":"plajjan"}}