Skip to content
Frank Filz edited this page Nov 8, 2023 · 20 revisions

Table of Contents

NFS-Ganesha Developer Area

This is where to go for developer information. Learn how to build, test, and contribute to the project here.


Development Cycle

The development cycle and its policies are found in Development Policies.

Commit Process

We use common git practices for our development. We also take advantage of Github and Gerrithub web based tools to ease our process.

This is an active project and we are feeling the growing pains of an expanding developer community. The server is also being embedded in commercial products. As a result, our process is becoming more formal.

  1. The submitter writes some new code or fix some old code...
  2. Submit the patch to gerrithub (see src/CONTRIBUTING_HOWTO.txt)
  3. The release manager (Frank Filz) and/or the subsystem maintainer(s) and/or other community members review the change.
    1. subsystem maintainers and other community members may give a +1 review
    2. The release manager will give a +2 review to indicate the patch has been accepted for merging
    3. The reviewers work with the submitter to get a correct and appropriate change.
  4. The release manager pulls the accumulated changes and merges an update to the source tree.
  5. The release manager pushes periodic updates to the next branch in the repository on Github.
    1. Every update push has a named, annotated tag which contains a comment describing the total merge.
    2. Both the branch and tag are pushed to the repository.
    3. An announcement containing the short log and annotation comment along with more detailed comments (as appropriate) is sent to the devel@lists.nfs-ganesha.org Mailing List
  6. Rinse and Repeat.
Consult Development Policies for the details.

Release Manager

The nfs-ganesha project titles the overall maintainer as release manager. The current release manager is Frank Filz (ffilzlnx at mindspring.com). In part, this title came about when the project was growing larger than Deniel Philippe's capacity to manage it, but we didn't want to usurp his position, so the title became release manager rather than maintainer.

Past release managers are: Jim Lieb (first to hold the title of release manager). Deniel Philippe (originator of the project)

Subsystem Maintainers

These people are experts in the various nfs-ganesha subsystems.

Maintainer List

The following table is the current list of subsystem maintainers. These folks were picked because they have contributed to the project the most in these particular areas. Their review and suggestions are important.

Subsystem Maintainer Email
MDCACHE Daniel Gryniewicz or Frank Filz dang1 at ibm.com or ffilzlnx at mindspring.com
CEPH FSAL Frank Filz ffilzlnx at mindspring.com
DRC/TIRPC Daniel Gryniewicz or Matt Benjamin dang at redhat.com or mbenjamin at redhat.com
RGW FSAL Matt Benjamin mbenjami at ibm.com
SAL/locks Frank Filz ffilzlnx at mindspring.com
VFS FSAL Frank Filz ffilzlnx at mindspring.com

Note that this is not exhaustive but highlights some of the major areas of contribution that have current acknowledged experts.

The people in this table have been chosen based on their past contributions in those particular areas. It is not a closed list. We also and always need reviewers and backup maintainers. Volunteers are encouraged.

Miscellaneous Details

Everything developer that does not fit a category all its own ends up here...

Phone Conferences's minutes

A weekly phone conference takes place every Tuesday at 7:00 AM Pacific Local time (15:00 UTC during the summer, 16:00 UTC during the winter).

Here are the call in details:

Developers involved in the Ganesha community meet at this time and discuss about development's status and futures features. Minutes to these phone call can be found here.

Testing

tests, criteria, results, etc.

LTTng

Using LTTng with Ganesha is fairly straight forward. First, build with LTTng enabled by adding this to your cmake:

 -DUSE_LTTNG=ON

Next, you need to set up LTTng before running Ganesha. LTTng aggregates tracepoints via a channel into a session. For Ganesha, we only need a single channel within the session. Set it up like this:

 lttng create <sessionname>
 lttng enable-channel -u --session=<sessionname> --subbuf=size="128k" channel0

Optionally, if you want trace lines to include thread IDs, you can have LTTng add them:

 lttng add-context -u -t pthread_id -v vtid

Next, you need to enable events from Ganesha. If no events are specifically enabled, then all events are enabled, so you only need this if you want a sub-set of events. In Ganesha, all logging is converted to events, so having logging on can send a lot of events. Events themselves are in src/include/gsh_lttng/* or in src/libntirpc/ntirpc/lttng/*. Events are in the form "provider:event", with * as a wildcard. So, "*:*" enables all events, "mdcache:*" enables all mdcache events, and "mdcache:mdc_lru_ref" enables the single event.

 lttng enable-event --channel=channel0 -u mdcache:mdc_lru_ref
 lttng enable-event --channel=channel0 -u mdcache:mdc_lru_unref

Finally, you need to start lttng

 lttng start

Next, run Ganesha like normal, preloading the Ganesha LTTng library:

 LD_PRELOAD=/path/to/libganesha_trace.so:/path/to/libntirpc_tracepoints.so ganesha.nfsd

Do your workload. When it's done, stop Ganesha. The results of tracing are in binary format in ~/lttng-traces and are processed into text with babeltrace:

 babeltrace ~/lttng-traces/<sessionname>-<timestamp> > trace.log

You can then look at trace.log with whatever tool you want.

Clone this wiki locally