summaryrefslogtreecommitdiff
path: root/node.h
AgeCommit message (Collapse)Author
2013-02-11Fix build against libpthreadSamuel Thibault
* Makefile.am (nsmux_LDADD): Link against libpthread instead of libthreads. * nsmux.h: Include <pthread.h> instead of <cthreads.h> * lnode.h: Use pthread type instead of cthreads structure. * node.h: Likewise. * ncache.h: Likewise. * lnode.c: Use pthread functions instead of cthreads functions. * node.c: Likewise. * ncache.c: Likewise. * nsmux.c: Likewise.
2009-04-13nsmux can shutdown all dynamic translators on exitSergiu Ivanov
Now nsmux can shutdown all of its dynamic translators on exit, thus doing sufficient cleanup. One can tell nsmux to shutdown dynamic translators using the ``--recursive'' option to settrans. Note that because fsys_goaway returns immediately as the RPC is processed, while the receiver may still remain in memory, doing something like settrans -g --recursive foo where nsmux is sitting on foo will almost always result in a ``Server busy'' error message. The reason is that libnetfs counts how many open ports to its nodes there are at shutdown and in most cases it does the check *before* the dynamic translators manage to drop their references. Therefore, the aforementioned command gracefully kills all dynamic translators. Invoked the second time, this command will shutdown nsmux, too. Immediate shutdown with killing dynamic translators can be achieved via settrans -gf --recursive foo
2009-04-12Added dynamic translator tracking facilitiesSergiu Ivanov
nsmux cannot presently shut down gracefully (without the -f option) after having done a magic lookup, because the dynamic translators it starts hold ports (references) to its nodes and make the standard fsys_goaway handler return with EBUSY. To solve the problem, nsmux will need to keep track of dynamic translators and shut them down explicitly, not relying on standard mechanisms, which don't know that the translators might be stacked and might try stopping a translator in the middle of the dynamic stack, which will certainly result in EBUSY. (Note that this commit comes on top of an erroneous one and is meant to fix it. I could not revert the previous commit because of ``bad index'', so I hope this commit will solve the problem...)
2009-04-12Revert "Added dynamic translator tracking facilities"Sergiu Ivanov
This reverts commit 0ec50f8fb5ec477523571a9612cfb9f23a10de12.
2009-04-12Added dynamic translator tracking facilitiesSergiu Ivanov
nsmux cannot presently shut down gracefully (without the -f option) after having done a magic lookup, because the dynamic translators it starts hold ports (references) to its nodes and make the standard fsys_goaway handler return with EBUSY. To solve the problem, nsmux will need to keep track of dynamic translators and shut them down explicitly, not relying on standard mechanisms, which don't know that the translators might be stacked and might try stopping a translator in the middle of the dynamic stack, which will certainly result in EBUSY. # Please enter the commit message for your changes. # (Comment lines starting with '#' will not be included) # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: debug.h # modified: lib.c # modified: lib.h # modified: lnode.c # modified: lnode.h # modified: magic.c # modified: magic.h # modified: ncache.c # modified: ncache.h # modified: node.c # modified: node.h # modified: nsmux.c # modified: nsmux.h # modified: options.c # modified: options.h # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # my_S_dir_lookup.c # sav/ # update
2009-04-09Updated copyright yearsSergiu Ivanov
The copyright years were listed only up to 2008, so I added 2009. Also, some of the files I created from scratch used to list copyright years starting with 2001, which was wrong. This has also been corrected.
2009-03-06Added node typesSergiu Ivanov
Now inside each netnode (and, hence, inside each node) there is a field showing the type of the node. This is required because, at least in response to requests by the filter, proxy nodes and shadow nodes will have different jobs to do and the server-side implementation of filesystem RPCs in nsmux would need to know what actions they are expected to carry out.
2009-03-06Added proxy nodes in the dynamic translator stackSergiu Ivanov
When setting dynamic translators, nsmux used to offer the client a port to the dynamic translator directly. Now it gives off a proxy node, which contains a port to the translator. Also, proxy nodes are now included in dynamic translator stacks. Dynamic translator stacks now consist of the following interconnected conceptual blocks: -- shadow node -- translator -- proxy node --
2009-02-20Dynamic translator stacks are set in series of retriesSergiu Ivanov
When a client wants nsmux to set several translators on a node using a syntax like ``file,,x,,y'', nsmux sets the first translator on a shadow node mirroring ``file'' and punts a retry to the client. The client (commonly) does the retry and thus control comes back to nsmux, which creates another shadow node and sets the second translator on this node. At the moment translator stacks do not include proxy nodes, i.e. the structure of a dynamic translator stack is: ...---dynamic translator -- shadow node -- dynamic translator ---...
2009-01-29Added the function to create proxy nodes for portsSergiu Ivanov
Since we want netfs_S_dir_lookup to ask the client to do a retry when it sets a new dynamic translator, nsmux has to give the client a *proxy* of the port to the root of the current dynamic translator, so that the retry gets back in nsmux. For this we need to create proxy nodes for ports, which is precisely what node_create_from_port does.
2009-01-23Adapted node_set_translators to shadow nodesSergiu Ivanov
Now this function is called node_set_translator and sets only one translator on the supplied (shadow) node. This function has not yet been debugged.
2009-01-18Prepared struct node for stacks of shadow nodesSergiu Ivanov
So far dynamic translator stacks were created in the following fashion: nsmux created a shadow node on which the whole dynamic translator stack was built. This commit starts the transition to a different strategy: the new approach consists in setting *each* dynamic translator on its personal shadow node. To achieve such functionality the set of fiels of struct node was modified and the bits of code that manipulated these fields were stripped out. The code is not functional now. The coming commits will bring it back to life.
2008-12-12Ports in shadow nodes are opened by the translator starting routine now.Sergiu Ivanov
Before, netfs_S_dir_lookup used to open the ports in shadow, nodes. This could cause conflicts with the flags required by the translator starting up on the node. Now the port is opened only based on the flags requested by the translator being launched.
2008-11-21Moved the code to GCSSergiu Ivanov
Now the code is (hopefully) compliant with GNU Coding Standards.
2008-10-10Added the port to the untranslated version of the real node to the netnodeSergiu Ivanov
When 'file,,x' is requested, nsmux cannot tell whether 'x' is a filter or not and whether it will require the untranslated version of the file or not. However, when netfs_S_file_get_translator_cntl would like to show the translator stack on the *real* node, it will need the untranslated version of the node, which must be available by that time. The new field in netnode solves this issue.
2008-09-19Added the mechanism of maintaining shadow nodes alive.Sergiu Ivanov
I refactored the node cache in such a way that it now only maintains references to nodes (the reason is that only directory nodes and shadow nodes are created, therefore the existing node cache is very well suited for this purpose). It must be remarked that the node cache, borrowed from unionfs, has never actually been a *cache*, therefore this small change does not alter things badly. I also removed the command line option --ncache-size.
2008-09-07Added proxy nodes, optimized node management policySergiu Ivanov
Now, when 'file,,x' is requested, nsmux will create a proxy node and will set the translator 'x' on this node, not on the real filesystem node. Also, nsmux will not create nodes for simple file looks, instead it will simply return the port to the required file, thus avoiding the necessity to handle IO operations inside itself.
2008-07-22Added the possibility to propagate translators onto directories. Fixed bugs.Sergiu Ivanov
Now the user can enter directories using the following command: cd dir,,x All files in this directory will then be implicitly translated by translator 'x'; in other words, if there is a file 'file' in directory 'dir', after executing the command mentioned above, and after running cat file the user will obtain the content of 'file' translated by 'x'. Also fixed several rather serious bugs in lookup of file names of the type 'file,,x'.
2008-07-13Copied the skeleton for mirroring a directory from filterfs.Sergiu Ivanov
At the moment nsmux is only capable of creating a read-only mirror of the given directory.