On Thu, Aug 8, 2013 at 3:40 PM, Benjamin Kaduk <ka...@mit.edu> wrote:
> Hi all, > > It looks like the last hurdle before a core rxgk spec gets through > afs3-stds is the description of the GSS negotiation loop. The right answer > there is well-known, though describing it is easy, so it should just be a > matter of time before it's done. > > With just the core rxgk spec done, we can still start adding rxgk to the > non-AFS3 protocol pieces in our tree, and I think the bosserver is the most > promising target. This allows us to get some code in the tree for the > security class and get some working experience, and reduces the burden for > developing additional code out-of-tree. > > However, the bosserver is currently using LWP for parallelism, and GSSAPI > libraries which are compatible with LWP are hard to come by; the obvious > solution is to convert the bosserver to pthreads. Chas Williams came up > with an implementation about 8 months ago, which is currently languishing > in gerrit (it just got a newly rebased version, the tip commit is gerrit > number 8794). I had a mostly complete independent implementation before I > learned about his work, unfortunately; mine is in gerrit with the tip > change 10130. Mine is still incomplete in that it needs some build > massaging on a few Unix platforms, and needs a bit of Windows attention. As > tempting as it may be, I seem to recall that we do not have critical mass > to drop server support for windows on master, so that would need to be > fixed for my code to move forward. > > There are a few general differences between the approaches in the two > patchsets, and I was hoping we could have an architectural discussion on > this list. > > First off: do we need to keep an LWP version of the bosserver around as > well as a pthreaded one? I don't think so, and I believe Simon agrees, but > it would be good to get consensus. > > It's just going to bitrot, so i think it's unwise to leave it. > Second, how strong of an integrity guarantee do we need for the bos > config? My understanding is that configuration changes (adding or removing > or en/disabling bnodes) are rare events, and it is highly unlikely that > multiple administrator connnections changing things will be made > concurrently. If this is true, then we can rely on time-domain "locking" > for synchronization and eliminate some aspects of code-level locking. For > example, a per-bnode lock acquired before writing any bnode state would not > be needed, and a single global lock would be sufficient. > > A global lock is probably sufficient, but this isn't performance-critical code. > Relatedly, is it okay to assume that shutdown/restart/etc. will not be > issued concurrently with config changes? A "fully correct" implementation > would seem to need to only shutdown/restart the bnodes which were > configured when the command was issued, and ignore any new nodes created > since then. Because the implementation of shutdown/restart must drop > locks, making this guarantee seems to require additional sychronization > effort, whether via a temporary queue to store the bnodes being acted upon, > or a higher-level lock. > > Then there's the question of signal handling. The discussion on > gerrit/6947 raises some potentially large spectres, in particular > LinuxThreads compatibility. Chas has dedicated pthreads for each child > process to listen for SIGCHLD, plus a global thread for SIGTERM/SIGQUIT > (hmm, SIGKILL is added to the set, too, but can't actually be blocked or > masked); my version just has a single signal handler routine that uses the > sigpipe trick to wake up the bproc thread and check the children. This > sigpipe trick doesn't work directly on Windows; I'll need to look more > carefully at how to workaround. I seem to recall that we hand-roll signal > compatibility bits for Windows anyway, so it would stay in-tree. I haven't > been able to convince myself that the additional complexity of the extra > watcher threads is necessary, but if someone else could convince me, that > would be good. > > Off the top of my head, those are the main structural differences between > the two existing implementations, I'd be interested to hear everyone's > opinions on the questions. I'm not tied to my code, but I did continue > with it after learning about Chas's work because I did have some questions > about these architectural questionss. If the consensus is that his stuff > is fine, we should go with that -- my main goal is just to get a pthreaded > bosserver in the tree so that we can build off of it with rxgk. > > > Thanks, > > Ben > ______________________________**_________________ > OpenAFS-devel mailing list > OpenAFS-devel@openafs.org > https://lists.openafs.org/**mailman/listinfo/openafs-devel<https://lists.openafs.org/mailman/listinfo/openafs-devel> > > -- Derrick