Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx11.netapp.com ([216.240.18.76]:16269 "EHLO mx11.netapp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755695Ab3JQOSB convert rfc822-to-8bit (ORCPT ); Thu, 17 Oct 2013 10:18:01 -0400 From: Weston Andros Adamson To: Bohuslav Kabrda , Steve Dickson CC: linux-nfs list Subject: Re: [PATCH] Make mountstats and nfs-iostat Python 3 compatible Date: Thu, 17 Oct 2013 14:17:58 +0000 Message-ID: References: <1379409678-15730-1-git-send-email-bkabrda@redhat.com> <5239FBFB.8010300@RedHat.com> <863050D3-36C8-460D-9BF5-31237C51D4F4@netapp.com> <397459728.7504449.1381992772429.JavaMail.root@redhat.com> In-Reply-To: <397459728.7504449.1381992772429.JavaMail.root@redhat.com> Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org List-ID: On Oct 17, 2013, at 2:52 AM, Bohuslav Kabrda wrote: > ----- Original Message ----- >> This just made it into f19 and it doesn't work for me: >> >> $ mountstats /mnt >> File "/usr/sbin/mountstats", line 272 >> (count, ((count * 100) / sends)), end=' ') >> ^ >> SyntaxError: invalid syntax >> >> $ python >> Python 2.7.5 (default, Oct 8 2013, 12:19:40) >> [GCC 4.8.1 20130603 (Red Hat 4.8.1-1)] on linux2 >> >> >> I think mountstats needs this line at the top of the file: >> >> from __future__ import print_function >> > > True, sorry for the bug. > Slavek I just posted this fix to the list as a patch. -dros > >> At least until python3 is the default on fedora. >> >> -dros >> >> On Sep 18, 2013, at 3:16 PM, Steve Dickson wrote: >> >>> >>> >>> On 17/09/13 05:21, Bohuslav Kabrda wrote: >>>> This will make mountstat and nfs-iostat run on Python 2.6, 2.7 >>>> and >= 3.0 >>>> >>>> Signed-off-by: Bohuslav Kabrda >>> Committed! >>> >>> steved. >>> >>>> --- >>>> tools/mountstats/mountstats.py | 310 >>>> ++++++++++++++++++++--------------------- >>>> tools/nfs-iostat/nfs-iostat.py | 22 +-- >>>> 2 files changed, 166 insertions(+), 166 deletions(-) >>>> >>>> diff --git a/tools/mountstats/mountstats.py >>>> b/tools/mountstats/mountstats.py >>>> index b95b71d..3f5fea5 100644 >>>> --- a/tools/mountstats/mountstats.py >>>> +++ b/tools/mountstats/mountstats.py >>>> @@ -53,7 +53,7 @@ class DeviceData: >>>> if words[6].find('nfs') != -1: >>>> self.__nfs_data['statvers'] = words[7] >>>> elif words[0] == 'age:': >>>> - self.__nfs_data['age'] = long(words[1]) >>>> + self.__nfs_data['age'] = int(words[1]) >>>> elif words[0] == 'opts:': >>>> self.__nfs_data['mountoptions'] = >>>> ''.join(words[1:]).split(',') >>>> elif words[0] == 'caps:': >>>> @@ -91,12 +91,12 @@ class DeviceData: >>>> self.__nfs_data['shortwrites'] = int(words[22]) >>>> self.__nfs_data['delay'] = int(words[23]) >>>> elif words[0] == 'bytes:': >>>> - self.__nfs_data['normalreadbytes'] = long(words[1]) >>>> - self.__nfs_data['normalwritebytes'] = long(words[2]) >>>> - self.__nfs_data['directreadbytes'] = long(words[3]) >>>> - self.__nfs_data['directwritebytes'] = long(words[4]) >>>> - self.__nfs_data['serverreadbytes'] = long(words[5]) >>>> - self.__nfs_data['serverwritebytes'] = long(words[6]) >>>> + self.__nfs_data['normalreadbytes'] = int(words[1]) >>>> + self.__nfs_data['normalwritebytes'] = int(words[2]) >>>> + self.__nfs_data['directreadbytes'] = int(words[3]) >>>> + self.__nfs_data['directwritebytes'] = int(words[4]) >>>> + self.__nfs_data['serverreadbytes'] = int(words[5]) >>>> + self.__nfs_data['serverwritebytes'] = int(words[6]) >>>> >>>> def __parse_rpc_line(self, words): >>>> if words[0] == 'RPC': >>>> @@ -110,8 +110,8 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[4]) >>>> self.__rpc_data['rpcreceives'] = int(words[5]) >>>> self.__rpc_data['badxids'] = int(words[6]) >>>> - self.__rpc_data['inflightsends'] = long(words[7]) >>>> - self.__rpc_data['backlogutil'] = long(words[8]) >>>> + self.__rpc_data['inflightsends'] = int(words[7]) >>>> + self.__rpc_data['backlogutil'] = int(words[8]) >>>> elif words[1] == 'tcp': >>>> self.__rpc_data['port'] = words[2] >>>> self.__rpc_data['bind_count'] = int(words[3]) >>>> @@ -121,7 +121,7 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[7]) >>>> self.__rpc_data['rpcreceives'] = int(words[8]) >>>> self.__rpc_data['badxids'] = int(words[9]) >>>> - self.__rpc_data['inflightsends'] = long(words[10]) >>>> + self.__rpc_data['inflightsends'] = int(words[10]) >>>> self.__rpc_data['backlogutil'] = int(words[11]) >>>> elif words[1] == 'rdma': >>>> self.__rpc_data['port'] = words[2] >>>> @@ -148,7 +148,7 @@ class DeviceData: >>>> else: >>>> op = words[0][:-1] >>>> self.__rpc_data['ops'] += [op] >>>> - self.__rpc_data[op] = [long(word) for word in words[1:]] >>>> + self.__rpc_data[op] = [int(word) for word in words[1:]] >>>> >>>> def parse_stats(self, lines): >>>> """Turn a list of lines from a mount stat file into a >>>> @@ -179,81 +179,81 @@ class DeviceData: >>>> def display_nfs_options(self): >>>> """Pretty-print the NFS options >>>> """ >>>> - print 'Stats for %s mounted on %s:' % \ >>>> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) >>>> - >>>> - print ' NFS mount options: %s' % >>>> ','.join(self.__nfs_data['mountoptions']) >>>> - print ' NFS server capabilities: %s' % >>>> ','.join(self.__nfs_data['servercapabilities']) >>>> - if self.__nfs_data.has_key('nfsv4flags'): >>>> - print ' NFSv4 capability flags: %s' % >>>> ','.join(self.__nfs_data['nfsv4flags']) >>>> - if self.__nfs_data.has_key('pseudoflavor'): >>>> - print ' NFS security flavor: %d pseudoflavor: %d' % \ >>>> - (self.__nfs_data['flavor'], >>>> self.__nfs_data['pseudoflavor']) >>>> + print('Stats for %s mounted on %s:' % \ >>>> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) >>>> + >>>> + print(' NFS mount options: %s' % >>>> ','.join(self.__nfs_data['mountoptions'])) >>>> + print(' NFS server capabilities: %s' % >>>> ','.join(self.__nfs_data['servercapabilities'])) >>>> + if 'nfsv4flags' in self.__nfs_data: >>>> + print(' NFSv4 capability flags: %s' % >>>> ','.join(self.__nfs_data['nfsv4flags'])) >>>> + if 'pseudoflavor' in self.__nfs_data: >>>> + print(' NFS security flavor: %d pseudoflavor: %d' % \ >>>> + (self.__nfs_data['flavor'], >>>> self.__nfs_data['pseudoflavor'])) >>>> else: >>>> - print ' NFS security flavor: %d' % self.__nfs_data['flavor'] >>>> + print(' NFS security flavor: %d' % >>>> self.__nfs_data['flavor']) >>>> >>>> def display_nfs_events(self): >>>> """Pretty-print the NFS event counters >>>> """ >>>> - print >>>> - print 'Cache events:' >>>> - print ' data cache invalidated %d times' % >>>> self.__nfs_data['datainvalidates'] >>>> - print ' attribute cache invalidated %d times' % >>>> self.__nfs_data['attrinvalidates'] >>>> - print ' inodes synced %d times' % self.__nfs_data['syncinodes'] >>>> - print >>>> - print 'VFS calls:' >>>> - print ' VFS requested %d inode revalidations' % >>>> self.__nfs_data['inoderevalidates'] >>>> - print ' VFS requested %d dentry revalidations' % >>>> self.__nfs_data['dentryrevalidates'] >>>> - print >>>> - print ' VFS called nfs_readdir() %d times' % >>>> self.__nfs_data['vfsreaddir'] >>>> - print ' VFS called nfs_lookup() %d times' % >>>> self.__nfs_data['vfslookup'] >>>> - print ' VFS called nfs_permission() %d times' % >>>> self.__nfs_data['vfspermission'] >>>> - print ' VFS called nfs_file_open() %d times' % >>>> self.__nfs_data['vfsopen'] >>>> - print ' VFS called nfs_file_flush() %d times' % >>>> self.__nfs_data['vfsflush'] >>>> - print ' VFS called nfs_lock() %d times' % >>>> self.__nfs_data['vfslock'] >>>> - print ' VFS called nfs_fsync() %d times' % >>>> self.__nfs_data['vfsfsync'] >>>> - print ' VFS called nfs_file_release() %d times' % >>>> self.__nfs_data['vfsrelease'] >>>> - print >>>> - print 'VM calls:' >>>> - print ' VFS called nfs_readpage() %d times' % >>>> self.__nfs_data['vfsreadpage'] >>>> - print ' VFS called nfs_readpages() %d times' % >>>> self.__nfs_data['vfsreadpages'] >>>> - print ' VFS called nfs_writepage() %d times' % >>>> self.__nfs_data['vfswritepage'] >>>> - print ' VFS called nfs_writepages() %d times' % >>>> self.__nfs_data['vfswritepages'] >>>> - print >>>> - print 'Generic NFS counters:' >>>> - print ' File size changing operations:' >>>> - print ' truncating SETATTRs: %d extending WRITEs: %d' % \ >>>> - (self.__nfs_data['setattrtrunc'], >>>> self.__nfs_data['extendwrite']) >>>> - print ' %d silly renames' % self.__nfs_data['sillyrenames'] >>>> - print ' short reads: %d short writes: %d' % \ >>>> - (self.__nfs_data['shortreads'], >>>> self.__nfs_data['shortwrites']) >>>> - print ' NFSERR_DELAYs from server: %d' % >>>> self.__nfs_data['delay'] >>>> + print() >>>> + print('Cache events:') >>>> + print(' data cache invalidated %d times' % >>>> self.__nfs_data['datainvalidates']) >>>> + print(' attribute cache invalidated %d times' % >>>> self.__nfs_data['attrinvalidates']) >>>> + print(' inodes synced %d times' % self.__nfs_data['syncinodes']) >>>> + print() >>>> + print('VFS calls:') >>>> + print(' VFS requested %d inode revalidations' % >>>> self.__nfs_data['inoderevalidates']) >>>> + print(' VFS requested %d dentry revalidations' % >>>> self.__nfs_data['dentryrevalidates']) >>>> + print() >>>> + print(' VFS called nfs_readdir() %d times' % >>>> self.__nfs_data['vfsreaddir']) >>>> + print(' VFS called nfs_lookup() %d times' % >>>> self.__nfs_data['vfslookup']) >>>> + print(' VFS called nfs_permission() %d times' % >>>> self.__nfs_data['vfspermission']) >>>> + print(' VFS called nfs_file_open() %d times' % >>>> self.__nfs_data['vfsopen']) >>>> + print(' VFS called nfs_file_flush() %d times' % >>>> self.__nfs_data['vfsflush']) >>>> + print(' VFS called nfs_lock() %d times' % >>>> self.__nfs_data['vfslock']) >>>> + print(' VFS called nfs_fsync() %d times' % >>>> self.__nfs_data['vfsfsync']) >>>> + print(' VFS called nfs_file_release() %d times' % >>>> self.__nfs_data['vfsrelease']) >>>> + print() >>>> + print('VM calls:') >>>> + print(' VFS called nfs_readpage() %d times' % >>>> self.__nfs_data['vfsreadpage']) >>>> + print(' VFS called nfs_readpages() %d times' % >>>> self.__nfs_data['vfsreadpages']) >>>> + print(' VFS called nfs_writepage() %d times' % >>>> self.__nfs_data['vfswritepage']) >>>> + print(' VFS called nfs_writepages() %d times' % >>>> self.__nfs_data['vfswritepages']) >>>> + print() >>>> + print('Generic NFS counters:') >>>> + print(' File size changing operations:') >>>> + print(' truncating SETATTRs: %d extending WRITEs: %d' % \ >>>> + (self.__nfs_data['setattrtrunc'], >>>> self.__nfs_data['extendwrite'])) >>>> + print(' %d silly renames' % self.__nfs_data['sillyrenames']) >>>> + print(' short reads: %d short writes: %d' % \ >>>> + (self.__nfs_data['shortreads'], >>>> self.__nfs_data['shortwrites'])) >>>> + print(' NFSERR_DELAYs from server: %d' % >>>> self.__nfs_data['delay']) >>>> >>>> def display_nfs_bytes(self): >>>> """Pretty-print the NFS event counters >>>> """ >>>> - print >>>> - print 'NFS byte counts:' >>>> - print ' applications read %d bytes via read(2)' % >>>> self.__nfs_data['normalreadbytes'] >>>> - print ' applications wrote %d bytes via write(2)' % >>>> self.__nfs_data['normalwritebytes'] >>>> - print ' applications read %d bytes via O_DIRECT read(2)' % >>>> self.__nfs_data['directreadbytes'] >>>> - print ' applications wrote %d bytes via O_DIRECT write(2)' % >>>> self.__nfs_data['directwritebytes'] >>>> - print ' client read %d bytes via NFS READ' % >>>> self.__nfs_data['serverreadbytes'] >>>> - print ' client wrote %d bytes via NFS WRITE' % >>>> self.__nfs_data['serverwritebytes'] >>>> + print() >>>> + print('NFS byte counts:') >>>> + print(' applications read %d bytes via read(2)' % >>>> self.__nfs_data['normalreadbytes']) >>>> + print(' applications wrote %d bytes via write(2)' % >>>> self.__nfs_data['normalwritebytes']) >>>> + print(' applications read %d bytes via O_DIRECT read(2)' % >>>> self.__nfs_data['directreadbytes']) >>>> + print(' applications wrote %d bytes via O_DIRECT write(2)' % >>>> self.__nfs_data['directwritebytes']) >>>> + print(' client read %d bytes via NFS READ' % >>>> self.__nfs_data['serverreadbytes']) >>>> + print(' client wrote %d bytes via NFS WRITE' % >>>> self.__nfs_data['serverwritebytes']) >>>> >>>> def display_rpc_generic_stats(self): >>>> """Pretty-print the generic RPC stats >>>> """ >>>> sends = self.__rpc_data['rpcsends'] >>>> >>>> - print >>>> - print 'RPC statistics:' >>>> + print() >>>> + print('RPC statistics:') >>>> >>>> - print ' %d RPC requests sent, %d RPC replies received (%d XIDs >>>> not found)' % \ >>>> - (sends, self.__rpc_data['rpcreceives'], >>>> self.__rpc_data['badxids']) >>>> + print(' %d RPC requests sent, %d RPC replies received (%d XIDs >>>> not found)' % \ >>>> + (sends, self.__rpc_data['rpcreceives'], >>>> self.__rpc_data['badxids'])) >>>> if sends != 0: >>>> - print ' average backlog queue length: %d' % \ >>>> - (float(self.__rpc_data['backlogutil']) / sends) >>>> + print(' average backlog queue length: %d' % \ >>>> + (float(self.__rpc_data['backlogutil']) / sends)) >>>> >>>> def display_rpc_op_stats(self): >>>> """Pretty-print the per-op stats >>>> @@ -261,23 +261,23 @@ class DeviceData: >>>> sends = self.__rpc_data['rpcsends'] >>>> >>>> # XXX: these should be sorted by 'count' >>>> - print >>>> + print() >>>> for op in self.__rpc_data['ops']: >>>> stats = self.__rpc_data[op] >>>> count = stats[0] >>>> retrans = stats[1] - count >>>> if count != 0: >>>> - print '%s:' % op >>>> - print '\t%d ops (%d%%)' % \ >>>> - (count, ((count * 100) / sends)), >>>> - print '\t%d retrans (%d%%)' % (retrans, ((retrans * 100) >>>> / count)), >>>> - print '\t%d major timeouts' % stats[2] >>>> - print '\tavg bytes sent per op: %d\tavg bytes received >>>> per op: %d' % \ >>>> - (stats[3] / count, stats[4] / count) >>>> - print '\tbacklog wait: %f' % (float(stats[5]) / count), >>>> - print '\tRTT: %f' % (float(stats[6]) / count), >>>> - print '\ttotal execute time: %f (milliseconds)' % \ >>>> - (float(stats[7]) / count) >>>> + print('%s:' % op) >>>> + print('\t%d ops (%d%%)' % \ >>>> + (count, ((count * 100) / sends)), end=' ') >>>> + print('\t%d retrans (%d%%)' % (retrans, ((retrans * 100) >>>> / count)), end=' ') >>>> + print('\t%d major timeouts' % stats[2]) >>>> + print('\tavg bytes sent per op: %d\tavg bytes received >>>> per op: %d' % \ >>>> + (stats[3] / count, stats[4] / count)) >>>> + print('\tbacklog wait: %f' % (float(stats[5]) / count), >>>> end=' ') >>>> + print('\tRTT: %f' % (float(stats[6]) / count), end=' ') >>>> + print('\ttotal execute time: %f (milliseconds)' % \ >>>> + (float(stats[7]) / count)) >>>> >>>> def compare_iostats(self, old_stats): >>>> """Return the difference between two sets of stats >>>> @@ -285,9 +285,9 @@ class DeviceData: >>>> result = DeviceData() >>>> >>>> # copy self into result >>>> - for key, value in self.__nfs_data.iteritems(): >>>> + for key, value in self.__nfs_data.items(): >>>> result.__nfs_data[key] = value >>>> - for key, value in self.__rpc_data.iteritems(): >>>> + for key, value in self.__rpc_data.items(): >>>> result.__rpc_data[key] = value >>>> >>>> # compute the difference of each item in the list >>>> @@ -295,7 +295,7 @@ class DeviceData: >>>> # the reference to them. so we build new lists here >>>> # for the result object. >>>> for op in result.__rpc_data['ops']: >>>> - result.__rpc_data[op] = map(difference, self.__rpc_data[op], >>>> old_stats.__rpc_data[op]) >>>> + result.__rpc_data[op] = list(map(difference, >>>> self.__rpc_data[op], old_stats.__rpc_data[op])) >>>> >>>> # update the remaining keys we care about >>>> result.__rpc_data['rpcsends'] -= old_stats.__rpc_data['rpcsends'] >>>> @@ -312,17 +312,17 @@ class DeviceData: >>>> if sample_time == 0: >>>> sample_time = float(self.__nfs_data['age']) >>>> >>>> - print >>>> - print '%s mounted on %s:' % \ >>>> - (self.__nfs_data['export'], self.__nfs_data['mountpoint']) >>>> + print() >>>> + print('%s mounted on %s:' % \ >>>> + (self.__nfs_data['export'], self.__nfs_data['mountpoint'])) >>>> >>>> - print '\top/s\trpc bklog' >>>> - print '\t%.2f' % (sends / sample_time), >>>> + print('\top/s\trpc bklog') >>>> + print('\t%.2f' % (sends / sample_time), end=' ') >>>> if sends != 0: >>>> - print '\t%.2f' % \ >>>> - ((float(self.__rpc_data['backlogutil']) / sends) / >>>> sample_time) >>>> + print('\t%.2f' % \ >>>> + ((float(self.__rpc_data['backlogutil']) / sends) / >>>> sample_time)) >>>> else: >>>> - print '\t0.00' >>>> + print('\t0.00') >>>> >>>> # reads: ops/s, kB/s, avg rtt, and avg exe >>>> # XXX: include avg xfer size and retransmits? >>>> @@ -332,15 +332,15 @@ class DeviceData: >>>> rtt = float(read_rpc_stats[6]) >>>> exe = float(read_rpc_stats[7]) >>>> >>>> - print '\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)' >>>> - print '\t\t%.2f' % (ops / sample_time), >>>> - print '\t\t%.2f' % (kilobytes / sample_time), >>>> + print('\treads:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') >>>> + print('\t\t%.2f' % (ops / sample_time), end=' ') >>>> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') >>>> if ops != 0: >>>> - print '\t\t%.2f' % (rtt / ops), >>>> - print '\t\t%.2f' % (exe / ops) >>>> + print('\t\t%.2f' % (rtt / ops), end=' ') >>>> + print('\t\t%.2f' % (exe / ops)) >>>> else: >>>> - print '\t\t0.00', >>>> - print '\t\t0.00' >>>> + print('\t\t0.00', end=' ') >>>> + print('\t\t0.00') >>>> >>>> # writes: ops/s, kB/s, avg rtt, and avg exe >>>> # XXX: include avg xfer size and retransmits? >>>> @@ -350,15 +350,15 @@ class DeviceData: >>>> rtt = float(write_rpc_stats[6]) >>>> exe = float(write_rpc_stats[7]) >>>> >>>> - print '\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)' >>>> - print '\t\t%.2f' % (ops / sample_time), >>>> - print '\t\t%.2f' % (kilobytes / sample_time), >>>> + print('\twrites:\tops/s\t\tkB/s\t\tavg RTT (ms)\tavg exe (ms)') >>>> + print('\t\t%.2f' % (ops / sample_time), end=' ') >>>> + print('\t\t%.2f' % (kilobytes / sample_time), end=' ') >>>> if ops != 0: >>>> - print '\t\t%.2f' % (rtt / ops), >>>> - print '\t\t%.2f' % (exe / ops) >>>> + print('\t\t%.2f' % (rtt / ops), end=' ') >>>> + print('\t\t%.2f' % (exe / ops)) >>>> else: >>>> - print '\t\t0.00', >>>> - print '\t\t0.00' >>>> + print('\t\t0.00', end=' ') >>>> + print('\t\t0.00') >>>> >>>> def parse_stats_file(filename): >>>> """pop the contents of a mountstats file into a dictionary, >>>> @@ -388,18 +388,18 @@ def parse_stats_file(filename): >>>> return ms_dict >>>> >>>> def print_mountstats_help(name): >>>> - print 'usage: %s [ options ] ' % name >>>> - print >>>> - print ' Version %s' % Mountstats_version >>>> - print >>>> - print ' Display NFS client per-mount statistics.' >>>> - print >>>> - print ' --version display the version of this command' >>>> - print ' --nfs display only the NFS statistics' >>>> - print ' --rpc display only the RPC statistics' >>>> - print ' --start sample and save statistics' >>>> - print ' --end resample statistics and compare them with >>>> saved' >>>> - print >>>> + print('usage: %s [ options ] ' % name) >>>> + print() >>>> + print(' Version %s' % Mountstats_version) >>>> + print() >>>> + print(' Display NFS client per-mount statistics.') >>>> + print() >>>> + print(' --version display the version of this command') >>>> + print(' --nfs display only the NFS statistics') >>>> + print(' --rpc display only the RPC statistics') >>>> + print(' --start sample and save statistics') >>>> + print(' --end resample statistics and compare them with >>>> saved') >>>> + print() >>>> >>>> def mountstats_command(): >>>> """Mountstats command >>>> @@ -414,7 +414,7 @@ def mountstats_command(): >>>> return >>>> >>>> if arg in ['-v', '--version', 'version']: >>>> - print '%s version %s' % (sys.argv[0], Mountstats_version) >>>> + print('%s version %s' % (sys.argv[0], Mountstats_version)) >>>> sys.exit(0) >>>> >>>> if arg in ['-n', '--nfs']: >>>> @@ -426,10 +426,10 @@ def mountstats_command(): >>>> continue >>>> >>>> if arg in ['-s', '--start']: >>>> - raise Exception, 'Sampling is not yet implemented' >>>> + raise Exception('Sampling is not yet implemented') >>>> >>>> if arg in ['-e', '--end']: >>>> - raise Exception, 'Sampling is not yet implemented' >>>> + raise Exception('Sampling is not yet implemented') >>>> >>>> if arg == sys.argv[0]: >>>> continue >>>> @@ -448,14 +448,14 @@ def mountstats_command(): >>>> >>>> for mp in mountpoints: >>>> if mp not in mountstats: >>>> - print 'Statistics for mount point %s not found' % mp >>>> + print('Statistics for mount point %s not found' % mp) >>>> continue >>>> >>>> stats = DeviceData() >>>> stats.parse_stats(mountstats[mp]) >>>> >>>> if not stats.is_nfs_mountpoint(): >>>> - print 'Mount point %s exists but is not an NFS mount' % mp >>>> + print('Mount point %s exists but is not an NFS mount' % mp) >>>> continue >>>> >>>> if nfs_only: >>>> @@ -472,37 +472,37 @@ def mountstats_command(): >>>> stats.display_rpc_op_stats() >>>> >>>> def print_nfsstat_help(name): >>>> - print 'usage: %s [ options ]' % name >>>> - print >>>> - print ' Version %s' % Mountstats_version >>>> - print >>>> - print ' nfsstat-like program that uses NFS client per-mount >>>> statistics.' >>>> - print >>>> + print('usage: %s [ options ]' % name) >>>> + print() >>>> + print(' Version %s' % Mountstats_version) >>>> + print() >>>> + print(' nfsstat-like program that uses NFS client per-mount >>>> statistics.') >>>> + print() >>>> >>>> def nfsstat_command(): >>>> print_nfsstat_help(prog) >>>> >>>> def print_iostat_help(name): >>>> - print 'usage: %s [ [ ] ] [ ] ' % >>>> name >>>> - print >>>> - print ' Version %s' % Mountstats_version >>>> - print >>>> - print ' iostat-like program to display NFS client per-mount >>>> statistics.' >>>> - print >>>> - print ' The parameter specifies the amount of time in >>>> seconds between' >>>> - print ' each report. The first report contains statistics for the >>>> time since each' >>>> - print ' file system was mounted. Each subsequent report contains >>>> statistics' >>>> - print ' collected during the interval since the previous report.' >>>> - print >>>> - print ' If the parameter is specified, the value of >>>> determines the' >>>> - print ' number of reports generated at seconds apart. If >>>> the interval' >>>> - print ' parameter is specified without the parameter, the >>>> command generates' >>>> - print ' reports continuously.' >>>> - print >>>> - print ' If one or more names are specified, statistics >>>> for only these' >>>> - print ' mount points will be displayed. Otherwise, all NFS mount >>>> points on the' >>>> - print ' client are listed.' >>>> - print >>>> + print('usage: %s [ [ ] ] [ ] ' % >>>> name) >>>> + print() >>>> + print(' Version %s' % Mountstats_version) >>>> + print() >>>> + print(' iostat-like program to display NFS client per-mount >>>> statistics.') >>>> + print() >>>> + print(' The parameter specifies the amount of time in >>>> seconds between') >>>> + print(' each report. The first report contains statistics for the >>>> time since each') >>>> + print(' file system was mounted. Each subsequent report contains >>>> statistics') >>>> + print(' collected during the interval since the previous report.') >>>> + print() >>>> + print(' If the parameter is specified, the value of >>>> determines the') >>>> + print(' number of reports generated at seconds apart. If >>>> the interval') >>>> + print(' parameter is specified without the parameter, the >>>> command generates') >>>> + print(' reports continuously.') >>>> + print() >>>> + print(' If one or more names are specified, statistics >>>> for only these') >>>> + print(' mount points will be displayed. Otherwise, all NFS mount >>>> points on the') >>>> + print(' client are listed.') >>>> + print() >>>> >>>> def print_iostat_summary(old, new, devices, time): >>>> for device in devices: >>>> @@ -530,7 +530,7 @@ def iostat_command(): >>>> return >>>> >>>> if arg in ['-v', '--version', 'version']: >>>> - print '%s version %s' % (sys.argv[0], Mountstats_version) >>>> + print('%s version %s' % (sys.argv[0], Mountstats_version)) >>>> return >>>> >>>> if arg == sys.argv[0]: >>>> @@ -543,14 +543,14 @@ def iostat_command(): >>>> if interval > 0: >>>> interval_seen = True >>>> else: >>>> - print 'Illegal value' >>>> + print('Illegal value') >>>> return >>>> elif not count_seen: >>>> count = int(arg) >>>> if count > 0: >>>> count_seen = True >>>> else: >>>> - print 'Illegal value' >>>> + print('Illegal value') >>>> return >>>> >>>> # make certain devices contains only NFS mount points >>>> @@ -563,13 +563,13 @@ def iostat_command(): >>>> check += [device] >>>> devices = check >>>> else: >>>> - for device, descr in mountstats.iteritems(): >>>> + for device, descr in mountstats.items(): >>>> stats = DeviceData() >>>> stats.parse_stats(descr) >>>> if stats.is_nfs_mountpoint(): >>>> devices += [device] >>>> if len(devices) == 0: >>>> - print 'No NFS mount points were found' >>>> + print('No NFS mount points were found') >>>> return >>>> >>>> old_mountstats = None >>>> @@ -608,7 +608,7 @@ try: >>>> elif prog == 'ms-iostat': >>>> iostat_command() >>>> except KeyboardInterrupt: >>>> - print 'Caught ^C... exiting' >>>> + print('Caught ^C... exiting') >>>> sys.exit(1) >>>> >>>> sys.exit(0) >>>> diff --git a/tools/nfs-iostat/nfs-iostat.py >>>> b/tools/nfs-iostat/nfs-iostat.py >>>> index c035537..1c523f9 100644 >>>> --- a/tools/nfs-iostat/nfs-iostat.py >>>> +++ b/tools/nfs-iostat/nfs-iostat.py >>>> @@ -95,7 +95,7 @@ class DeviceData: >>>> if words[6] == 'nfs': >>>> self.__nfs_data['statvers'] = words[7] >>>> elif words[0] == 'age:': >>>> - self.__nfs_data['age'] = long(words[1]) >>>> + self.__nfs_data['age'] = int(words[1]) >>>> elif words[0] == 'opts:': >>>> self.__nfs_data['mountoptions'] = >>>> ''.join(words[1:]).split(',') >>>> elif words[0] == 'caps:': >>>> @@ -116,7 +116,7 @@ class DeviceData: >>>> elif words[0] == 'bytes:': >>>> i = 1 >>>> for key in NfsByteCounters: >>>> - self.__nfs_data[key] = long(words[i]) >>>> + self.__nfs_data[key] = int(words[i]) >>>> i += 1 >>>> >>>> def __parse_rpc_line(self, words): >>>> @@ -131,8 +131,8 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[4]) >>>> self.__rpc_data['rpcreceives'] = int(words[5]) >>>> self.__rpc_data['badxids'] = int(words[6]) >>>> - self.__rpc_data['inflightsends'] = long(words[7]) >>>> - self.__rpc_data['backlogutil'] = long(words[8]) >>>> + self.__rpc_data['inflightsends'] = int(words[7]) >>>> + self.__rpc_data['backlogutil'] = int(words[8]) >>>> elif words[1] == 'tcp': >>>> self.__rpc_data['port'] = words[2] >>>> self.__rpc_data['bind_count'] = int(words[3]) >>>> @@ -142,8 +142,8 @@ class DeviceData: >>>> self.__rpc_data['rpcsends'] = int(words[7]) >>>> self.__rpc_data['rpcreceives'] = int(words[8]) >>>> self.__rpc_data['badxids'] = int(words[9]) >>>> - self.__rpc_data['inflightsends'] = long(words[10]) >>>> - self.__rpc_data['backlogutil'] = long(words[11]) >>>> + self.__rpc_data['inflightsends'] = int(words[10]) >>>> + self.__rpc_data['backlogutil'] = int(words[11]) >>>> elif words[1] == 'rdma': >>>> self.__rpc_data['port'] = words[2] >>>> self.__rpc_data['bind_count'] = int(words[3]) >>>> @@ -169,7 +169,7 @@ class DeviceData: >>>> else: >>>> op = words[0][:-1] >>>> self.__rpc_data['ops'] += [op] >>>> - self.__rpc_data[op] = [long(word) for word in words[1:]] >>>> + self.__rpc_data[op] = [int(word) for word in words[1:]] >>>> >>>> def parse_stats(self, lines): >>>> """Turn a list of lines from a mount stat file into a >>>> @@ -271,7 +271,7 @@ class DeviceData: >>>> nfs_stats = self.__nfs_data >>>> lookup_ops = self.__rpc_data['LOOKUP'][0] >>>> readdir_ops = self.__rpc_data['READDIR'][0] >>>> - if self.__rpc_data.has_key('READDIRPLUS'): >>>> + if 'READDIRPLUS' in self.__rpc_data: >>>> readdir_ops += self.__rpc_data['READDIRPLUS'][0] >>>> >>>> dentry_revals = nfs_stats['dentryrevalidates'] >>>> @@ -330,7 +330,7 @@ class DeviceData: >>>> def __print_rpc_op_stats(self, op, sample_time): >>>> """Print generic stats for one RPC op >>>> """ >>>> - if not self.__rpc_data.has_key(op): >>>> + if op not in self.__rpc_data: >>>> return >>>> >>>> rpc_stats = self.__rpc_data[op] >>>> @@ -405,7 +405,7 @@ class DeviceData: >>>> elif which == 2: >>>> self.__print_rpc_op_stats('LOOKUP', sample_time) >>>> self.__print_rpc_op_stats('READDIR', sample_time) >>>> - if self.__rpc_data.has_key('READDIRPLUS'): >>>> + if 'READDIRPLUS' in self.__rpc_data: >>>> self.__print_rpc_op_stats('READDIRPLUS', sample_time) >>>> self.__print_dir_cache_stats(sample_time) >>>> elif which == 3: >>>> @@ -450,7 +450,7 @@ def print_iostat_summary(old, new, devices, time, >>>> options): >>>> if old: >>>> # Trim device list to only include intersection of old and new >>>> data, >>>> # this addresses umounts due to autofs mountpoints >>>> - devicelist = filter(lambda x:x in devices,old) >>>> + devicelist = [x for x in old if x in devices] >>>> else: >>>> devicelist = devices >>>> >>>> >>> -- >>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in >>> the body of a message to majordomo@vger.kernel.org >>> More majordomo info at http://vger.kernel.org/majordomo-info.html >> >> > > -- > Regards, > Bohuslav "Slavek" Kabrda.