/srv/irclogs.ubuntu.com/2012/11/07/#juju-dev.txt

fwereadedavecheney, heyhey08:24
rogpeppefwereade, davecheney: morning'08:25
fwereadeand rogpeppe, also heyhey08:25
fwereadeand TheMue :)08:25
TheMuefwereade: morning, and who else? ;)08:26
fwereadeTheMue, dave and rogpeppe08:26
TheMuefwereade: ah08:26
rogpeppei have only just opened up the computer, to be fair :-)08:26
TheMuedavecheney: hello and rogpeppe: heya08:26
rogpeppeTheMue: yo@08:27
rogpeppe!08:27
* TheMue too08:27
rogpeppemy fingers still aren't working too well08:27
davecheneyhello08:28
fwereadedavecheney, and possibly rogpeppe, I was meaning to ask08:32
fwereadedavecheney, rogpeppe: is it just a tools problem that's blocking non-precise deploys?08:32
rogpeppefwereade: yes08:32
rogpeppefwereade: AFAIK08:32
davecheneyfwereade: i have a proposal for that08:32
fwereadedavecheney, rogpeppe: in that case ISTM that davecheney's approach is sane08:33
rogpeppefwereade: we just need to compile mongodb for quantal08:33
rogpeppefwereade: at least, that was the blocker i saw08:33
davecheneyrogpeppe: i'm only considering deploying from quantal -> LTS08:33
fwereaderogpeppe, ah, ok, makes sense08:33
davecheneywe can consider the other permutations another day08:33
rogpeppedavecheney: we want to be able to do LTS -> quantal too08:33
davecheneybut making a quantal/raring mongo will enable that08:33
davecheneyrogpeppe: we *might*08:33
davecheneyi haven't seen a request for that yet08:34
rogpeppedavecheney: so that we can run the builddb charm for quantal from precise08:34
davecheneyrogpeppe: what is the story with mongo08:34
fwereadedavecheney, we want to be able to deploy to and from anything basically08:34
davecheneyfwereade: sure, i agree, but i'm only focusing on things we *need* this week08:34
davecheneywants can come later :)08:34
rogpeppedavecheney: we just need to build a quantal version08:34
davecheneyrogpeppe: i thought we were screwed on licencing08:34
fwereadedavecheney, that's fine indeed :)08:34
rogpeppedavecheney: i haven't heard that - what's the story?08:35
davecheneyrogpeppe: mark saied we aren't allowed to distribute that binary08:35
rogpeppedavecheney: the mongo binary?08:35
davecheneyja08:35
rogpeppedavecheney: well we're fucked then08:35
davecheneyyes08:36
davecheneyis mark working this week ?08:36
davecheneyrogpeppe: ideally if we could get a 2.2 backport into the archive08:36
davecheneythat would solve our problem08:36
rogpeppedavecheney: how would that help?08:36
rogpeppedavecheney: and how come we're allowed to distribute the binary via apt-get ?08:37
davecheneyrogpeppe: as I understand it the current mongo in precise has TLS enabled08:37
davecheneyis that correct08:37
davecheney?08:37
rogpeppedavecheney: i dunno. i don't think so, but i'll check08:38
davecheneyrogpeppe: if so, the licencing issue becomes someone elses' problem08:38
davecheneywe just ride on the archives' coat tails08:38
rogpeppedavecheney: no the default version does not have tls enabled08:39
davecheneyrogpeppe: right, back to being screwed then08:39
rogpeppedavecheney: i thought AGPL allowed distribution in binary form08:40
davecheneyopenssl is not AGPL :(08:40
davecheneyand by linking statically to it08:40
davecheneywe polute the binary08:40
davecheneybut, we might get lucky as the source of the program that builds the binary is available08:41
* davecheney IANAL08:41
rogpeppedavecheney: we weren't planning to link to openssl, were we?08:42
rogpeppedavecheney: ah, of course08:42
rogpeppedavecheney: mongo itself08:42
rogpeppedoh!08:42
davecheneywelcome to open sores licencing shitfighting08:42
rogpeppedavecheney: openssl is so shit internally too. not worth fighting for.08:44
rogpeppedavecheney: the license doesn't seem too onerous actually: http://www.openssl.org/source/license.html08:45
rogpeppedavecheney: (either of them)08:45
rogpeppedavecheney: "08:45
rogpeppeActually both licenses are BSD-style08:45
rogpeppe  Open Source licenses.08:45
rogpeppe"08:45
davecheneyrogpeppe: I need mark to respond08:46
davecheneybut for the moment lets assume we're in the clear08:46
rogpeppedavecheney: it looks like we should be. those licenses don't seem to disallow anything other than redistributing without the license08:47
rogpeppedavecheney: oh, here's the issue: http://people.gnome.org/~markmc/openssl-and-the-gpl.html08:49
davecheneyright, openssl is bsd 3 clause08:50
davecheneyam i correct ?08:50
rogpeppedavecheney: yeah08:50
rogpeppedavecheney: so it imposes some restrictions (you must distribute acknowledgements) that GPL doesn't allow you08:51
rogpeppedavecheney: what a mess08:51
davecheneysounds like the Apache Harmony vs the Java TCK nonsense08:53
rogpeppedavecheney: i don't know about that08:57
* rogpeppe googles08:57
davecheneyrogpeppe: http://en.wikipedia.org/wiki/Apache_Harmony#Difficulties_to_obtain_a_TCK_license_from_Sun08:58
davecheneyalmost identical story to the one above08:58
davecheneyto do X, we need Y, but using Y implys we can't be X08:59
davecheneyerror: Failed to load data for project "juju-core": Get https://api.launchpad.net/devel/juju-core: EOF09:01
* davecheney shakes fist at LP09:01
rogpeppedavecheney: if either mongodb or openssl were reasonable pieces of code, it should not be hard to do a GPL-compatible replacement for the way that mongo uses it09:03
rogpeppedavecheney: sadly both are convoluted to hell09:03
davecheneyso i have heard09:05
rogpeppedavecheney: i spent a significant proportion of yesterday delving deeply into the openssl code09:05
rogpeppedavecheney: so i could find a particular constant09:05
rogpeppedavecheney: to implement x509.Encrypt09:06
rogpeppeoops09:06
rogpeppedavecheney: to implement x509.EncryptPEMBlock09:06
rogpeppedavecheney: because mongo does not support reading unencrypted PEM blocks09:06
rogpeppedavecheney: it epitomises everything that's wrong with C-as-it-has-turned-out09:07
* davecheney pats rogpeppe on the shoulder09:08
davecheneyi bet it's a rats nest of macros and #ifdefs09:08
rogpeppedavecheney: yup09:08
rogpeppedavecheney: and unnecessary layers of abstraction09:09
rogpeppedavecheney: so this issue means that none of the Go source code is GPL-compatible AFAICS09:12
rogpeppedavecheney: and i always thought the BSD license was the less restrictive one09:13
davecheneyrogpeppe: it is a modified 2 arg, right ?09:13
rogpeppedavecheney: well, i guess it is, but just an incompatible set of restrictions09:13
rogpeppedavecheney: "Redistributions in binary form must reproduce ..."09:14
* davecheney checks09:15
davecheneyi don't know enough about this stuff09:15
davecheneyi'm not sure i want to ,either09:15
rogpeppeGPL should allow components to add copyright notice distributions09:15
rogpeppei'm sure that this incompatibility is against its original aims09:15
davecheneyrogpeppe: i think go is ok in this respect09:16
davecheneythe wording in the 2nd clause in09:17
davecheneyhttp://golang.org/LICENSE09:17
davecheneydiffers from the complaint in http://people.gnome.org/~markmc/openssl-and-the-gpl.html09:17
rogpeppe"09:18
rogpeppeYou may not impose any further09:18
rogpeppe  restrictions on the recipients' exercise of the rights granted herein.09:18
rogpeppe"09:18
davecheneyoh for fucks sake09:18
rogpeppethe 2nd clause in the go license seems like it does that09:18
rogpeppeyeah09:18
davecheneymaybe this is an ordering issue09:18
davecheneythe order in which you stack licences would allow for some interesting permutations09:19
rogpeppedavecheney: so you can't distribute a Go program that links against a GPL program, but you can distribute a Go program as GPL09:21
rogpeppedavecheney: that kinda makes sense09:21
davecheneysounds like witchcraft09:22
rogpeppedavecheney: i see now how 10gen make money09:22
davecheneyyou can't sell wisky with water in it, but you can pour wisky over ice09:22
davecheneyor something09:22
davecheneyrogpeppe: for 10gen i imagine it is more about indemity09:22
davecheneyor providing indemnity to their customers09:22
davecheneywhich is a massive issue for the more regulated companies in our industry09:23
rogpeppedavecheney: i doubt it - why else would they sell the OpenSSL version separately?09:23
rogpeppedavecheney: well, i'm sure indemnity is part of it too09:23
davecheneyyou are probably right, heinoius money grabbing09:23
rogpeppedavecheney: actually, this just might be a good thing09:28
davecheneymmm09:30
rogpeppedavecheney: actually.... i think we're all ok09:30
rogpeppedavecheney: AGPL != GPL09:30
rogpeppedavecheney: see http://www.gnu.org/licenses/agpl-3.0.html section 709:30
rogpeppedavecheney: "you may [...] supplement the terms of this License with terms: [...] requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; "09:31
davecheneythe source of Juju is AGPL, i dunno if that applies to a file we reference in binary form09:32
rogpeppedavecheney: mongo license is AGPL09:32
davecheneyorly09:32
rogpeppedavecheney: which i'd always thought of as more restrictive than GPL, funnily09:33
davecheneyit's more free, which depends on your POV09:33
rogpeppedavecheney: anyway, by my reading of it, we *can* distribute mongodb binaries :-)09:34
rogpeppedavecheney: IANALBASOTI09:35
davecheneysounds good enough for now09:35
davecheneyyes, everyone in the chan who is a lawyer, raise your hand09:35
davecheneyrogpeppe: so, where does that leave us09:36
davecheneymongo == good09:36
rogpeppedavecheney: yeah09:36
rogpeppedavecheney: AGPL == good09:36
davecheneybut you're getting screwed over by certs09:36
rogpeppedavecheney: that's fine, go needs EncryptPEMBlock anyway09:36
rogpeppedavecheney: although it is annoying09:37
Aramhello.11:00
TheMueAram: hi11:01
=== mcclurmc is now known as mcclurmc_away
=== dimitern is now known as dimitern_lunch
hazmatrogpeppe, we do have lawyers avail12:53
hazmatmramm, was looking into it afaicr12:54
rogpeppehazmat: i just wanted to assure myself that all was not lost :-)12:54
mrammhazmat: rogpeppe: well we can move to encrypted channels in the rest API12:55
rogpeppemramm: what about the channels from the API servers to the mongodb servers?12:55
mrammthe thing there is that you could snoop data if you can snoop the network12:55
mrammright12:55
=== dimitern_lunch is now known as dimitern
mrammyou wouldn't have control, just access to data, which is not great, but probably not catastrophic12:56
rogpeppemramm: if you can change network packets, you have control12:56
mrammtrue12:56
rogpeppemramm: from my extremely crude reading of the AGPL, i don't *think* there should be a problem with us distributing the mongodb/openssl binaries.12:57
rogpeppemramm: but as hazmat says, we have lawyers. i'd like to know what they think.12:57
mrammyes12:58
mrammI think we might be able to get away with distributing under a modified AGPL that allows advertising12:59
mrammbut we might need to talk 10gen into doing the same12:59
mrammand elliot at 10gen seems to think he has a solution to the problem coming12:59
mrammbut I'm not in the loop on what that is13:00
=== mcclurmc_away is now known as mcclurmc
mrammand we can also just setup VPN of some sort to handle transport level security13:02
mrammso it's definitely true that "all is not lost"13:03
mrammwe will be able to route around the problem if we need to13:03
fwereadeAram, ping13:04
Aramyes13:04
Aramfwereade: ^13:04
fwereadeAram, I'm thinking about subordinates13:04
Aramwhat about them.13:05
fwereadeAram, and ISTM that what I need is basically precisely a machiner, but watching a slightly different set of units13:05
fwereadeAram, but I wanted you input on the current MachinePrincipalUnitsWatcher13:06
fwereadeAram, and whether or not you anticipate changes to API or semantics at any point13:06
Aramfwereade: so what set of units you want to watch?13:06
fwereadeAram, the subordinates of one specific unit13:07
AramI see.13:07
Aramwell.13:07
Aramhmm.13:07
Aramthere will be changes in the implementation that will make this easier, hopefully this week.13:07
Arambut in semantics or API, I don't think so.13:07
fwereadeAram, so it remains just Added/Removed with all other changes swallowed?13:08
Aram(actually the MachinePrincipalUnitsWatcher and the MachineUnitWatcher use a diferent API in my latest branches than in trunk).13:09
Arampersonally I would change it to return more events.13:09
Arambut I don't think niemeyer would approve.13:10
Aramfor the time being I suspect it's a safe bet that this behavior won't change.13:10
fwereadeAram, always a fine line to walk ;)13:10
Aramalthough it has disadvantages IMO.13:10
fwereadeAram, I'll go with the current behaviour for now then, see where it takes me; cheers13:11
Aramfwereade: it kind of bugs me that each collection watcher starts N individual watchers, but in some client of the collection watcher, like the firewaller or whatever, you start N individual watchers yourself anyway.13:12
fwereadeAram, yeah, I feel that it's undergone somewhat forced/accelerated evolution and it needs to settle a bit13:13
Aramfwereade: I'13:13
Aramfwereade: I'd either make collection watchers return everything (no filtering) OR make them report only new objects as they become alive and no other event.13:14
Aramfwereade: I did an experiment yesterday making the machine units watcher return everything with no filtering. the "problem" was that you got an event for the principal when you added a subordinate, because the principal is also modified in the process, but maybe that's ok.13:19
fwereadeAram, yeah, I don't see that as a major problem myself13:20
Aramfwereade: well, one issue might be that it essentially returns implementation details, right now the principal is modified in the process of adding a subordinate, but in the future it need not be.13:21
fwereadeAram, I guess it all comes back down to agreement on what changes it is guaranteed for and which it isn't13:22
AramTheMue: have any idea why a firewaller will pick a close port event, but it will not pick the same close port event if the firewaller was stopped, and then restarted?14:18
AramI have a mental idea of what kind of race is going on, but it's somewhat hard for me to debug it, probably because of the unfamiliarity of the code.14:19
AramTheMue_: have any idea why a firewaller will pick a close port event, but it will not pick the same close port event if the firewaller was stopped, and then restarted?14:19
AramI have a mental idea of what kind of race is going on, but it's somewhat hard for me to debug it, probably because of the unfamiliarity of the code.14:20
TheMue_Aaarg, disconnected just after the answer.14:20
TheMue_Aram: I will take a deeper look.14:20
TheMue_Aram: The last part that has been changed has been the adding of the global mode.14:21
=== TheMue_ is now known as TheMue
TheMueAram: Here the initial open ports are retrieved not by the watchers but by traversing the state.14:22
Aramhmm14:22
AramTheMue: basically this works, but if you uncomment those lines it will fail: http://paste.ubuntu.com/1339904/14:23
TheMueAram: Where exactly does it fail? Line?14:25
AramTheMue: http://paste.ubuntu.com/1339921/14:26
AramTheMue: you say that initial ports are retrieved from the environment, not from the watchers, then how can the firewaller determine if a close port on a unit should have any effect globally, since it doesn't know which units might use that port?14:32
AramTheMue: from what you are telling me, the failure seems expected, so how did it work before?14:32
TheMueAram: Just going through the code.14:32
TheMueAram: It worked.14:32
TheMueAram: The initial ports only in global mode are retrieved from the env.14:33
Aramyeah14:33
TheMueAram: But the watchers still work.14:33
Aramof course.14:33
TheMueAram: And this is collated with the already known global ports.14:33
Arambut when you get a close port event from a unit, how do you know if you should close the port globally?14:33
TheMueAram: One moment, will tell you the line number.14:34
TheMueAram: Line 228 and the function flushGlobalPorts()14:35
TheMueAram: Here is also the fw.globalPortRef[port] to cound the usage14:36
rogpeppelunch14:36
AramTheMue: who initializes fw.globalPortRef?14:36
TheMueAram: It's created in initGlobalMode() and the counters will be increased by flushGlobalPorts() (based on the watchers).14:38
TheMueAram: If they would already be counted in initGlobalMode() they would be counted twice.14:39
fwereadeTheMue, on a related note, if you have a mo: how do we handle units which are removed with opened ports? ISTM that they will keep those ports open, but I am also unfamiliar with the code14:39
TheMuefwereade: In global mode ports will be closed after the final unit using this port.14:40
TheMuefwereade: Otherwise directly.14:40
Aramfwereade: I think it's fine, removal of a unit event makes fw call flush machine which calls flushGLobalPorts and does the refcound decrement14:41
TheMuefwereade: If you change it to dying the firewaller gets notified by the watcher.14:42
fwereadeAram, ah! forgetUnit14:42
fwereadeTheMue, thanks14:42
TheMuefwereade: yw14:42
fwereadeTheMue, wait, when what becomes Dying?14:42
fwereadeTheMue, do we do something when the unit becomes Dying?14:42
AramTheMue: take a look at this, maybe you see an obvious flaw with it: https://codereview.appspot.com/682011214:43
TheMuefwereade: I would have to look more exactly.14:43
AramI'm not sure that the failure I see is due to my code, but rather to just enabling a race, but maybe my code sucks.14:43
TheMuefwereade: Will look at Arams review before.14:44
fwereadeTheMue, I just didn't unerstand what you meant by:14:44
fwereade<TheMue> fwereade: If you change it to dying...14:44
TheMuefwereade: Please later, I'm not working concurrent14:44
fwereadeTheMue, ok, I would appreciate a clarification when you have a mo :)14:45
TheMuefwereade: Yep, will do afterwards.14:45
fwereadeTheMue, cheers14:45
TheMuefwereade: Have to look the exact flow in the code14:46
fwereadeTheMue, I just want to know what you meant by "it" in "setit to dying" above... I don't think you need to look at the code...14:46
TheMuefwereade: Has just been a quick rememberance. The important part is that the watchers notify the fw and the fw combines these changes to get aware which ports it has to open/close.14:48
TheMueAram: Hmm, so far it looks good. The loops over the removed and added units are almost the same, only that you now have a list with names and a list with units. But I'll again check the part above.15:07
TheMueAram: The retrieval of the lifecycle state is now somewhat strange. Shall it be changed this way everywhere? I liked the fact that the watchers emit changes according to the state.15:08
AramTheMue: could you be more specific or rephrased that? I don't understand what you mean.15:08
TheMueAram: Sure, so far the change itself contained Added and Removed. Now you get all changes and have to check the state on you own. That looks strange.15:11
AramTheMue: well that's how the new style watchers are now.15:11
TheMueAram: I liked the old way, or a return of Alive, Dying, Dead to be more close to the states.15:11
Arameventually, all old style watcher will be like this.15:11
Aramwe took the decision of doing it this way at Lisbon.15:12
TheMueAram: OK, then I think it's well discussed. Forget my question.15:12
fwereadeTheMue, I'm looking at the firewaller again15:14
TheMuefwereade: Feel free15:14
fwereadeTheMue, in the watch loops for unitData and serviceData, you defer watcher.Stop()15:14
fwereadeTheMue, is that intentional15:15
fwereade?15:15
fwereadeTheMue, ie, doing so swallows errors, but I can see a fuzzy justification for why we might want to15:15
AramTheMue: so you don't see anything egregious about my code?15:16
fwereadeTheMue, but I need help clarifying what it is and whetherit exists ;)15:16
TheMueAram: So far not, it looks fine to me.15:16
Aramhmm.15:16
TheMuefwereade: Sorry, here I have to go into history when they wen in. Since the earliest steps the fw has had several changes.15:17
fwereadeTheMue, sure, this is pretty tightly focused though15:17
AramI think that there's a race in the firwaller, and my code helped bring it to the surface, but the actual fault is in the firewaller, not my code.15:17
fwereadeTheMue, why do we ignore errors in sd.watcher and ud.watcher?15:17
AramTheMue: btw, if I change the MachineUnitsWatcher to report everything, not only lifecycle changes, this test passes.15:18
TheMuefwereade: Please one after the other.15:18
fwereadeTheMue, I asked the same question in two different ways, I thought15:19
TheMueAnd btw, lunchtime. Today later, daughter came just back.15:19
fwereadeTheMue, ok, I'll see what happens if I get stricter :015:20
fwereaderogpeppe, Aram, TheMue: I have to go early today, but before I do... I just proposed https://codereview.appspot.com/6811091 ...15:40
fwereadewhich makes service and unit watchers just return ids instead of entities15:41
fwereadebut I now want to go a step further, and cause machine/unit/service watchers to just send `struct {}{}`15:41
Aramfwereade: heh, I already did that as well.15:41
fwereaderationale is that whoever started the watch should damn well know what enitity they mean15:42
AramI might have even proposed it about two weeks ago.15:42
Arambut gustavo didn't like a prereq15:42
fwereadeAram, crap, sorry, I never saw that15:42
Aramso he didn't even look over it15:42
fwereadeAram, ah hell15:42
Aramand never went in15:42
Aramanyway15:42
rogpeppefwereade: i totally agree, but i've said that a few times to gustavo and had no agreement15:56
TheMueback15:56
fwereaderogpeppe, hum, ok -- the issue is that it lets me dodge the damn-stupid-in-hindsight difference in type between unit and machine15:57
fwereadesorry, unit and machine *ids*15:58
rogpeppefwereade: i agree15:58
Aramfwereade: rogpeppe: one benefit of returning id is that a collection watcher can literally be constructed from N individual watchers muzed together on the same channel.15:58
Arams/muzed/muxed/15:58
Aramnot that we do that, just saying.15:58
rogpeppeAram: that would be an issue if you passed a channel into a watcher15:58
rogpeppeAram: as it is, it's not AFAICS15:58
rogpeppefwereade: if you can demonstrate a nice use case for struct{}, i think it would probably be fine15:59
AramTheMue: I think I know what the race is.15:59
* TheMue listens15:59
AramTheMue: individual machine and unit watchers are started as soon as possible, rather than waiting for the fw to finish reading the environment.15:59
fwereaderogpeppe, I think the putative deployer makes a nice one15:59
rogpeppefwereade: agreed15:59
fwereaderogpeppe, but maybe for now I'll ponder less-controversial prereqs for doing so -- I should at least fix up MachinePrincipalUnitsWatcher16:00
Aramrogpeppe: yeah, we don't currently make use of that feature, and the benefit of having watchers return the same type outweighs the potential benefit of muxing watchers in the future.16:00
fwereadeAram, +116:01
Aramfwereade: I have a fix for that as well16:01
AramI'm just blocked on debugging this stupid thing16:01
Aramthat's why is not up for review again16:01
fwereadeAram, ah ok! sorry, would you link me your branch for MPUW so I can see what I'll need to work with?16:01
TheMueAram: IMHO not. loop() starts with initGlobalMode() before entering the watchers. But let me have a deeper look.16:03
Aramfwereade: well, this one: https://codereview.appspot.com/6718052/ but I'll have to work on it some more to use more of the machine units watcher that has changed in the meantime and the prereq is bad as well.16:04
TheMueAram: Ah, no, WatchMachines() starts earlier, indeed.16:05
AramTheMue: yes, you're right, the environment is read before, but the behavior suggests otherwise. I've put debug prints inside the unit watcher loop, and globalPortRef is not good16:05
Arambasically empty16:05
Arammeh16:07
Aramfor whatever reason the unit loop doesn't run enought times.16:07
TheMueAram: Maybe the separation in added and removed should be done inside the unitd to avoid receiving from the watcher the next time. The slices of added and removed can then be sent to the main loop as before.16:12
AramTheMue: what do you mean?16:13
TheMueAram: I'm jist thinking loud, but I'm thinking it will show no effect. :|16:14
TheMueAram: It's the new new loop where you initially check if a units is added or removed before you later iterate over those slices to process the units like before.16:14
AramTheMue: you want to do it in a single loop?16:15
Aramwhy do you think it should make a difference?16:15
TheMueAram: No. During this "pre-processing" the unitd can receive the next change, maybe here's the race. So a solution can be to move the pre-processing into the unitd and then send the separated slices to the main loop.16:16
TheMueAram: But that's only guessing.16:17
AramTheMue: I don't know whay you mean by 'unitd'?16:17
Arams/whay/what/16:17
Aramwhat is unitd?16:17
TheMueunitData16:18
TheMueThey are managed as fw.unitds[]16:18
Arambut unitDatas are created inside the for _, unit := range added { by newUnitData, aren't they?16:20
Aramso they don't even exist in the preprocessing step\16:20
TheMueAram: Yes, those both loops (removed, added) can stay in the fw.loop(), as before. Only the first loop that's new now..16:21
AramTheMue: I don't understand what difference that makes, but maybe I am missing something basic.16:22
Aramoh16:22
Aramhmm16:22
Aramno16:22
AramI don't see it :).16:22
AramI mean that function is called synchronously, as if the code was pasted there.16:23
TheMueAram: Yes, you're right. *sigh*16:23
AramTheMue: on the other hand you might be right about the race, when that function is executing, more events could be queued for the watcher, and the fw would call that function again with the same units.16:24
Aramnot sure what difference that makes though.16:24
TheMueAram: Could be worth a test.16:24
AramTheMue: inlining that and doing it all in a single loop, without a preprocessing step, made no difference.16:36
TheMueAram: Sh...16:36
AramTheMue: I'm out of ideas to try.16:42
AramTheMue: the fact that it works if you don't restart the watcher suggests there's something wrong with watcher initialization.16:47
TheMueAram: Don't know. It worked so far. So the change seems to effect a different behavior inside the fw.16:52
AramTheMue: what about var ports []state.Port inside func (ud *unitData) watchLoop() {?16:59
Aramthis wil start fresh, from nil when watcher is restarted16:59
Arambut that function compares the new ports with old ports each run16:59
Aramso it will compare with nil when a watcher is started17:00
Aramso it won't ever close ports17:00
Aramyeah17:00
Aramthat's it.17:00
Aramit compares nil to 80, and can't realize it needs to close 808017:00
AramTheMue: does that make sense?17:01
TheMueAram: Sounds good, I'm only wondering why it worked before.17:02
TheMueAram: I'll go into the history there tomorrow to get  a feeling.17:04
AramTheMue: because the watcher delivered units as they were at that point, so you'd get one even with 80, 8080 and one with 80, but now you have to load the unit manually, and when you load it it's already only 8017:04
* TheMue leaves now, I've got a cold and almost had no sleep last night.17:04
TheMueAram: Ah, that sounds reasonable.17:05
AramTheMue: have a nice evening17:05
TheMueAram: Thx, cu tomorrow17:05
TheMueAram: And have a nice evening too17:05
=== mcclurmc is now known as mcclurmc_away
=== mcclurmc_away is now known as mcclurmc
=== rog is now known as Guest70098
=== mcclurmc is now known as mcclurmc_away
=== mcclurmc_away is now known as mcclurmc
=== mcclurmc is now known as mcclurmc_away

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!