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 v2 12/16] dataserver: separate generic and 4.1 code
Date: Thu, 5 Jun 2014 09:55:40 -0400 [thread overview]
Message-ID: <1401976544-36374-13-git-send-email-dros@primarydata.com> (raw)
In-Reply-To: <1401976544-36374-1-git-send-email-dros@primarydata.com>
Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
---
nfs4.1/dataserver.py | 102 ++++++++++++++++++++++++++++-----------------------
1 file changed, 57 insertions(+), 45 deletions(-)
diff --git a/nfs4.1/dataserver.py b/nfs4.1/dataserver.py
index d092cf7..5c604dc 100644
--- a/nfs4.1/dataserver.py
+++ b/nfs4.1/dataserver.py
@@ -15,7 +15,7 @@ log = logging.getLogger("Dataserver Manager")
op4 = nfs_ops.NFS4ops()
-class DataServer41(object):
+class DataServer(object):
def __init__(self, server, port, path, flavor=rpc.AUTH_SYS, active=True, mdsds=True, multipath_servers=None, summary=None):
self.mdsds = mdsds
self.server = server
@@ -43,29 +43,47 @@ class DataServer41(object):
self.active = True
if not self.mdsds:
self.connect()
+ self.make_root()
def down(self):
+ self.disconnect()
self.active = False
+ def reset(self):
+ self.down()
+ self.up()
+
+ def get_netaddr4(self):
+ # STUB server multipathing not supported yet
+ uaddr = '.'.join([self.server,
+ str(self.port >> 8),
+ str(self.port & 0xff)])
+ return type4.netaddr4(self.proto, uaddr)
+
+ def get_multipath_netaddr4s(self):
+ netaddr4s = []
+ for addr in self.multipath_servers:
+ server, port = addr
+ uaddr = '.'.join([server,
+ str(port >> 8),
+ str(port & 0xff)])
+ proto = "tcp"
+ if server.find(':') >= 0:
+ proto = "tcp6"
+
+ netaddr4s.append(type4.netaddr4(proto, uaddr))
+ return netaddr4s
+
+ def fh_to_name(self, mds_fh):
+ return hashlib.sha1("%r" % mds_fh).hexdigest()
+
def connect(self):
- # only support root with AUTH_SYS for now
- s1 = rpc.security.instance(rpc.AUTH_SYS)
- self.cred1 = s1.init_cred(uid=0, gid=0)
- self.c1 = nfs4client.NFS4Client(self.server, self.port,
- summary=self.summary)
- self.c1.set_cred(self.cred1)
- self.c1.null()
- c = self.c1.new_client("DS.init_%s" % self.server)
- # This is a hack to ensure MDS/DS communication path is at least
- # as wide as the client/MDS channel (at least for linux client)
- fore_attrs = type4.channel_attrs4(0, 16384, 16384, 2868, 8, 8, [])
- self.sess = c.create_session(fore_attrs=fore_attrs)
- sess.compound([op.reclaim_complete(FALSE)])
- self.make_root()
+ raise NotImplemented
def disconnect(self):
pass
+class DataServer41(DataServer):
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
@@ -86,36 +104,29 @@ class DataServer41(object):
log.error("Too many retries with DS %s" % self.server)
raise Exception("Dataserver communication retry error")
elif res.status in state_errors:
- self.disconnect()
- self.connect()
+ self.reset()
else:
log.error("Unhandled status %s from DS %s" %
(nfsstat4[res.status], self.server))
raise Exception("Dataserver communication error")
- def get_netaddr4(self):
- # STUB server multipathing not supported yet
- uaddr = '.'.join([self.server,
- str(self.port >> 8),
- str(self.port & 0xff)])
- return type4.netaddr4(self.proto, uaddr)
-
- def get_multipath_netaddr4s(self):
- netaddr4s = []
- for addr in self.multipath_servers:
- server, port = addr
- uaddr = '.'.join([server,
- str(port >> 8),
- str(port & 0xff)])
- proto = "tcp"
- if server.find(':') >= 0:
- proto = "tcp6"
-
- netaddr4s.append(type4.netaddr4(proto, uaddr))
- return netaddr4s
-
+ def connect(self):
+ # only support root with AUTH_SYS for now
+ s1 = rpc.security.instance(rpc.AUTH_SYS)
+ self.cred1 = s1.init_cred(uid=0, gid=0)
+ self.c1 = nfs4client.NFS4Client(self.server, self.port,
+ summary=self.summary)
+ self.c1.set_cred(self.cred1)
+ self.c1.null()
+ c = self.c1.new_client("DS.init_%s" % self.server)
+ # This is a hack to ensure MDS/DS communication path is at least
+ # as wide as the client/MDS channel (at least for linux client)
+ fore_attrs = type4.channel_attrs4(0, 16384, 16384, 2868, 8, 8, [])
+ self.sess = c.create_session(fore_attrs=fore_attrs)
+ self.sess.compound([op4.reclaim_complete(const4.FALSE)])
- def make_root(self, attrs={const4.FATTR4_MODE:0777}):
+ def make_root(self):
+ attrs = {const4.FATTR4_MODE:0777}
existing_path = []
kind = type4.createtype4(const4.NF4DIR)
for comp in self.path:
@@ -134,12 +145,13 @@ class DataServer41(object):
raise RuntimeError
# XXX clean DS directory
- def fh_to_name(self, mds_fh):
- return hashlib.sha1("%r" % mds_fh).hexdigest()
-
- def open_file(self, mds_fh, seqid=0,
- access=const4.OPEN4_SHARE_ACCESS_BOTH, deny=const4.OPEN4_SHARE_DENY_NONE,
- attrs={const4.FATTR4_MODE: 0777}, owner = "mds", mode=const4.GUARDED4):
+ def open_file(self, mds_fh):
+ seqid=0
+ access = const4.OPEN4_SHARE_ACCESS_BOTH
+ deny = const4.OPEN4_SHARE_DENY_NONE
+ attrs = {const4.FATTR4_MODE: 0777}
+ owner = "mds"
+ mode = const4.GUARDED4
verifier = self.sess.c.verifier
openflag = type4.openflag4(const4.OPEN4_CREATE, type4.createhow4(mode, attrs, verifier))
name = self.fh_to_name(mds_fh)
--
1.8.5.2 (Apple Git-48)
next prev parent reply other threads:[~2014-06-05 13:56 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-05 13:55 [PATCH pynfs v2 00/16] prep for flex file layout server Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 01/16] dataserver: reclaim_complete after create_session Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 02/16] dataserver: only catch connection error Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 03/16] 4.1 server: avoid traceback in DS disconnect() Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 04/16] move .x files to subdir 'xdrdef' Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 05/16] 4.1 client: remove unused imports Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 06/16] 4.1 server: add -v flag & silence random output Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 07/16] 4.1 server: add -s option to print summary of ops Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 08/16] dataserver: make generic interface to ops Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 09/16] dataserver: don't import * from nfs4 specific mods Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 10/16] 4.1 server: move nfs4_ops.py to nfs_ops.py Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 11/16] add mntv3, portmapv2 and nfsv3 .x files Weston Andros Adamson
2014-06-05 13:55 ` Weston Andros Adamson [this message]
2014-06-05 13:55 ` [PATCH pynfs v2 13/16] 4.1 server: add support for NFSv3 data servers Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 14/16] 4.1 server: get rid of old op_getdeviceinfo Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 15/16] rpc: on socket error, close and mark pipe inactive Weston Andros Adamson
2014-06-05 13:55 ` [PATCH pynfs v2 16/16] nfs3clnt: reconnect when sending on inactive pipe Weston Andros Adamson
2014-06-05 14:19 ` [PATCH pynfs v2 00/16] prep for flex file layout server J. Bruce Fields
2014-06-05 14:22 ` Weston Andros Adamson
2014-06-05 14:24 ` J. Bruce Fields
2014-06-09 21:25 ` J. Bruce Fields
2014-06-10 1:41 ` 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=1401976544-36374-13-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.