From: Weston Andros Adamson <dros@primarydata.com>
To: bfields@fieldses.org
Cc: linux-nfs@vger.kernel.org, Weston Andros Adamson <dros@primarydata.com>
Subject: [PATCH pynfs 09/17] dataserver: make generic interface to ops
Date: Wed, 4 Jun 2014 17:01:57 -0400 [thread overview]
Message-ID: <1401915726-29092-10-git-send-email-dros@primarydata.com> (raw)
In-Reply-To: <1401915726-29092-1-git-send-email-dros@primarydata.com>
Hide the execute method to make DataServer objects more generic.
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
---
nfs4.1/dataserver.py | 41 ++++++++++++++++++++++++++++++++++-------
nfs4.1/fs.py | 24 ++++--------------------
2 files changed, 38 insertions(+), 27 deletions(-)
diff --git a/nfs4.1/dataserver.py b/nfs4.1/dataserver.py
index 9b0462d..5a3b851 100644
--- a/nfs4.1/dataserver.py
+++ b/nfs4.1/dataserver.py
@@ -63,7 +63,7 @@ class DataServer41(object):
def disconnect(self):
pass
- def execute(self, ops, exceptions=[], delay=5, maxretries=3):
+ def _execute(self, ops, exceptions=[], delay=5, maxretries=3):
""" execute the NFS call
If an error code is specified in the exceptions it means that the
caller wants to handle the error himself
@@ -117,16 +117,16 @@ class DataServer41(object):
kind = createtype4(NF4DIR)
for comp in self.path:
existing_path.append(comp)
- res = self.execute(nfs4lib.use_obj(existing_path),
+ res = self._execute(nfs4lib.use_obj(existing_path),
exceptions=[NFS4ERR_NOENT])
if res.status == NFS4ERR_NOENT:
cr_ops = nfs4lib.use_obj(existing_path[:-1]) + \
[op.create(kind, comp, attrs)]
- self.execute(cr_ops)
- res = self.execute(nfs4lib.use_obj(self.path) + [op.getfh()])
+ self._execute(cr_ops)
+ res = self._execute(nfs4lib.use_obj(self.path) + [op.getfh()])
self.path_fh = res.resarray[-1].object
need = ACCESS4_READ | ACCESS4_LOOKUP | ACCESS4_MODIFY | ACCESS4_EXTEND
- res = self.execute(nfs4lib.use_obj(self.path_fh) + [op.access(need)])
+ res = self._execute(nfs4lib.use_obj(self.path_fh) + [op.access(need)])
if res.resarray[-1].access != need:
raise RuntimeError
# XXX clean DS directory
@@ -146,7 +146,7 @@ class DataServer41(object):
open_op = op.open(seqid, access, deny,
open_owner4(self.sess.client.clientid, owner),
openflag, open_claim4(CLAIM_NULL, name))
- res = self.execute(nfs4lib.use_obj(self.path_fh) + [open_op, op.getfh()], exceptions=[NFS4ERR_EXIST])
+ res = self._execute(nfs4lib.use_obj(self.path_fh) + [open_op, op.getfh()], exceptions=[NFS4ERR_EXIST])
if res.status == NFS4_OK:
ds_fh = res.resarray[-1].opgetfh.resok4.object
ds_openstateid = stateid4(0, res.resarray[-2].stateid.other)
@@ -162,10 +162,37 @@ class DataServer41(object):
seqid=0 #FIXME: seqid must be !=0
fh, stateid = self.filehandles[mds_fh]
ops = [op.putfh(fh)] + [op.close(seqid, stateid)]
- res = self.execute(ops)
+ res = self._execute(ops)
# ignoring return
del self.filehandles[mds_fh]
+ def read(self, fh, pos, count):
+ ops = [op.putfh(fh),
+ op.read(nfs4lib.state00, pos, count)]
+ # There are all sorts of error handling issues here
+ res = self._execute(ops)
+ data = res.resarray[-1].data
+ return data
+
+ def write(self, fh, pos, data):
+ ops = [op.putfh(fh),
+ op.write(nfs4lib.state00, pos, FILE_SYNC4, data)]
+ # There are all sorts of error handling issues here
+ res = self._execute(ops)
+
+ def truncate(self, fh, size):
+ ops = [op.putfh(fh),
+ op.setattr(nfs4lib.state00, {FATTR4_SIZE: size})]
+ res = self._execute(ops)
+
+ def get_size(self, fh):
+ ops = [op.putfh(fh),
+ op.getattr(1L << FATTR4_SIZE)]
+ res = self._execute(ops)
+ attrdict = res.resarray[-1].obj_attributes
+ return attrdict.get(FATTR4_SIZE, 0)
+
+
class DSDevice(object):
def __init__(self, mdsds):
self.list = [] # list of DataServer instances
diff --git a/nfs4.1/fs.py b/nfs4.1/fs.py
index 6ef283b..8fc49ef 100644
--- a/nfs4.1/fs.py
+++ b/nfs4.1/fs.py
@@ -1567,12 +1567,7 @@ class FilelayoutVolWrapper(object):
self._pos = 0
def read(self, count):
- # STUB stateid0 is illegal to a ds
- ops = [op.putfh(self._fh),
- op.read(nfs4lib.state00, self._pos, count)]
- # There are all sorts of error handling issues here
- res = self._ds.execute(ops)
- data = res.resarray[-1].data
+ data = self._ds.read(self._fh, self._pos, count)
self._pos += len(data)
return data
@@ -1580,25 +1575,14 @@ class FilelayoutVolWrapper(object):
self._pos = offset
def write(self, data):
- ops = [op.putfh(self._fh),
- op.write(nfs4lib.state00, self._pos, FILE_SYNC4, data)]
- # There are all sorts of error handling issues here
- res = self._ds.execute(ops)
+ self._ds.write(self._fh, self._pos, data)
self._pos += len(data)
- return
def truncate(self, size):
- ops = [op.putfh(self._fh),
- op.setattr(nfs4lib.state00, {FATTR4_SIZE: size})]
- res = self._ds.execute(ops)
- return
+ self._ds.truncate(self._fh, size)
def get_size(self):
- ops = [op.putfh(self._fh),
- op.getattr(1L << FATTR4_SIZE)]
- res = self._ds.execute(ops)
- attrdict = res.resarray[-1].obj_attributes
- return attrdict.get(FATTR4_SIZE, 0)
+ return self._ds.get_size(self._fh)
################################################
--
1.8.5.2 (Apple Git-48)
next prev parent reply other threads:[~2014-06-04 21:02 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-04 21:01 [PATCH pynfs 00/17] prep for flex file layout server Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 01/17] 4.1 client: reclaim_complete after create_session Weston Andros Adamson
2014-06-05 2:26 ` J. Bruce Fields
2014-06-05 12:54 ` Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 02/17] 4.1 server: service RECLAIM_COMPLETE operations Weston Andros Adamson
2014-06-05 2:29 ` J. Bruce Fields
2014-06-05 12:22 ` Trond Myklebust
2014-06-05 12:58 ` Weston Andros Adamson
2014-06-05 13:06 ` J. Bruce Fields
2014-06-05 13:18 ` Weston Andros Adamson
2014-06-05 13:34 ` Weston Andros Adamson
2014-06-05 13:41 ` J. Bruce Fields
2014-06-05 13:49 ` Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 03/17] dataserver: only catch connection error Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 04/17] 4.1 server: avoid traceback in DS disconnect() Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 06/17] 4.1 client: remove unused imports Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 07/17] 4.1 server: add -v flag & silence random output Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 08/17] 4.1 server: add -s option to print summary of ops Weston Andros Adamson
2014-06-04 21:01 ` Weston Andros Adamson [this message]
2014-06-04 21:01 ` [PATCH pynfs 10/17] dataserver: don't import * from nfs4 specific mods Weston Andros Adamson
2014-06-04 21:01 ` [PATCH pynfs 11/17] 4.1 server: move nfs4_ops.py to nfs_ops.py Weston Andros Adamson
2014-06-04 21:02 ` [PATCH pynfs 12/17] add mntv3, portmapv2 and nfsv3 .x files Weston Andros Adamson
2014-06-05 2:34 ` J. Bruce Fields
2014-06-04 21:02 ` [PATCH pynfs 13/17] dataserver: separate generic and 4.1 code Weston Andros Adamson
2014-06-04 21:02 ` [PATCH pynfs 14/17] 4.1 server: add support for NFSv3 data servers Weston Andros Adamson
2014-06-04 21:02 ` [PATCH pynfs 15/17] 4.1 server: get rid of old op_getdeviceinfo Weston Andros Adamson
2014-06-04 21:02 ` [PATCH pynfs 15/17] nfs41 svr: " Weston Andros Adamson
2014-06-04 21:02 ` [PATCH pynfs 16/17] rpc: on socket error, close and mark pipe inactive Weston Andros Adamson
2014-06-04 21:02 ` [PATCH pynfs 17/17] nfs3clnt: reconnect when sending on inactive pipe Weston Andros Adamson
[not found] ` <1401915726-29092-6-git-send-email-dros@primarydata.com>
2014-06-05 2:31 ` [PATCH pynfs 05/17] move .x files to subdir 'xdrdef' J. Bruce Fields
2014-06-05 12:51 ` Weston Andros Adamson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1401915726-29092-10-git-send-email-dros@primarydata.com \
--to=dros@primarydata.com \
--cc=bfields@fieldses.org \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.