On Thu, Jan 26, 2012 at 10:00:57AM -0500, Saggi Mizrahi wrote: > <snip> > Again trying to sum up and address all comments > > Clear all: > ========== > My opinions is still to not implement it. > Even though it might generate a bit more traffic premature optimization is > bad and there are other reasons we can improve VDSM command overhead without > doing this. > > In any case this argument is redundant because my intention is (as Litke > pointed out) is to have a lean API. > and API call is something you have to support across versions, this call > implemented in the engine is something that no one has to support and can > change\evolve easily. > > As a rule, if an API call C and be implemented by doing A + B then C is > redundant. > > List of connections as args: > ============================ > Sorry I forgot to respond about that. I'm not as strongly opposed to the idea > as the other things you suggested. It'll just make implementing the > persistence logic in VDSM significantly more complicated as I will have to > commit multiple connection information to disk in an all or nothing mode. I > can create a small sqlitedb to do that or do some directory tricks and > exploit FS rename atomicity but I'd rather not.
I would be strongly opposed to introducing a sqlite database into vdsm just to enable "convenience mode" for this API. Does the operation really need to be atomic? Why not just perform each connection sequentially and return a list of statuses? Is the only motivation for allowing a list of parameters to reduce the number of API calls between engine and vdsm)? If so, the same argument Saggi makes above applies here. > The demands are not without base. I would like to keep the code simple under > the hood in the price of a few more calls. You would like to make less calls > and keep the code simpler on your side. There isn't a real way to settle this. > If anyone on the list as pros and cons for either way I'd be happy to hear > them. > If no compelling arguments arise I will let Ayal call this one. > > Transient connections: > ====================== > The problem you are describing as I understand it is that VDSM did not > respond and not that the API client did not respond. > Again, this can happen for a number of reason, most of which VDSM might not > be aware that there is actually a problem (network issues). > > This relates to the EOL policy. I agree we have to find a good way to define > an automatic EOL for resources. I have made my suggestion. Out of the scope > of the API. > > In the meantime cleaning stale connections is trivial and I have made it > clear a previous email about how to go about it in a simple non intrusive > way. Clean hosts on host connect, and on every poll if you find connections > that you don't like. This should keep things squeaky clean. > > ----- Original Message ----- > > From: "Livnat Peer" <lp...@redhat.com> > > To: "Saggi Mizrahi" <smizr...@redhat.com> > > Cc: vdsm-devel@lists.fedorahosted.org, engine-de...@ovirt.org > > Sent: Thursday, January 26, 2012 5:22:42 AM > > Subject: Re: [Engine-devel] [RFC] New Connection Management API > > > > On 25/01/12 23:35, Saggi Mizrahi wrote: > > > <SNIP> > > > This is mail was getting way too long. > > > > > > About the clear all verb. > > > No. > > > Just loop, find the connections YOU OWN and clean them. Even though > > > you don't want to support multiple clients to VDSM API doesn't > > > mean the engine shouldn't behave like a proper citizen. > > > It's the same reason why VDSM tries and not mess system resources > > > it didn't initiate. > > > > > > There is a big difference, VDSM living in hybrid mode with other > > workload on the host is a valid use case, having more than one > > concurrent manager for VDSM is not. > > Generating a disconnect request for each connection does not seem > > like > > the right API to me, again think on the simple flow of moving host > > from > > one data center to another, the engine needs to disconnect tall > > storage > > domains (each domain can have couple of connections associated with > > it). > > > > I am giving example from the engine use cases as it is the main user > > of > > VDSM ATM but I am sure it will be relevant to any other user of VDSM. > > > > > > > > ------------------------ > > > > > > As I see it the only point of conflict is the so called > > > non-peristed connections. > > > I will call them transient connections from now on. > > > > > > There are 2 user cases being discussed > > > 1. Wait until a connection is made, if it fails don't retry and > > > automatically unmanage. > > > 2. If the called of the API forgets or fails to unmanage a > > > connection. > > > > > > > Actually I was not discussing #2 at all. > > > > > Your suggestion as I understand it: > > > Transient connections are: > > > - Connection that VDSM will only try to connect to once and > > > will not reconnect to in case of disconnect. > > > > yes > > > > > > > > My problem with this definition that it does not specify the "end > > > of life" of the connection. > > > Meaning it solves only use case 1. > > > > since this is the only use case i had in mind, it is what i was > > looking for. > > > > > If all is well, and it usually is, VDSM will not invoke a > > > disconnect. > > > So the caller would have to call unmanage if the connection > > > succeeded at the end of the flow. > > > > agree. > > > > > Now, if you are already calling unmanage if connection succeeded > > > you can just call it anyway. > > > > not exactly, an example I gave earlier on the thread was that VSDM > > hangs > > or have other error and the engine can not initiate unmanaged, > > instead > > let's assume the host is fenced (self-fence or external fence does > > not > > matter), in this scenario the engine will not issue unmanage. > > > > > > > > instead of doing: (with your suggestion) > > > ---------------- > > > manage > > > wait until succeeds or lastError has value > > > try: > > > do stuff > > > finally: > > > unmanage > > > > > > do: (with the canonical flow) > > > --- > > > manage > > > try: > > > wait until succeeds or lastError has value > > > do stuff > > > finally: > > > unmanage > > > > > > This is simpler to do than having another connection type. > > > > You are assuming the engine can communicate with VDSM and there are > > scenarios where it is not feasible. > > > > > > > > Now that we got that out of the way lets talk about the 2nd use > > > case. > > > > Since I did not ask VDSM to clean after the (engine) user and you > > don't > > want to do it I am not sure we need to discuss this. > > > > If you insist we can start the discussion on who should implement the > > cleanup mechanism but I'm afraid I have no strong arguments for VDSM > > to > > do it, so I rather not go there ;) > > > > > > You dropped from the discussion my request for supporting list of > > connections for manage and unmanage verbs. > > > > > API client died in the middle of the operation and unmanage was > > > never called. > > > > > > Your suggested definition means that unless there was a problem > > > with the connection VDSM will still have this connection active. > > > The engine will have to clean it anyway. > > > > > > The problem is, VDSM has no way of knowing that a client died, > > > forgot or is thinking really hard and will continue on in about 2 > > > minutes. > > > > > > > > Connections that live until they die is a hard to define and work > > > with lifecycle. Solving this problem is theoretically simple. > > > > > > Have clients hold some sort of session token and force the client > > > to update it at a specified interval. You could bind resources > > > (like domains, VMs, connections) to that session token so when it > > > expires VDSM auto cleans the resources. > > > > > > This kind of mechanism is out of the scope of this API change. > > > Further more I think that this mechanism should sit in the engine > > > since the session might actually contain resources from multiple > > > hosts and resources that are not managed by VDSM. > > > > > > In GUI flows specifically the user might do actions that don't even > > > touch the engine and forcing it to refresh the engine token is > > > simpler then having it refresh the VDSM token. > > > > > > I understand that engine currently has no way of tracking a user > > > session. This, as I said, is also true in the case of VDSM. We can > > > start and argue about which project should implement the session > > > semantics. But as I see it it's not relevant to the connection > > > management API. > > > > > _______________________________________________ > vdsm-devel mailing list > vdsm-devel@lists.fedorahosted.org > https://fedorahosted.org/mailman/listinfo/vdsm-devel -- Adam Litke <a...@us.ibm.com> IBM Linux Technology Center _______________________________________________ vdsm-devel mailing list vdsm-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/vdsm-devel