Return-Path: linux-nfs-owner@vger.kernel.org Received: from mx12.netapp.com ([216.240.18.77]:52805 "EHLO mx12.netapp.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753800Ab3JPWF5 convert rfc822-to-8bit (ORCPT ); Wed, 16 Oct 2013 18:05:57 -0400 From: Weston Andros Adamson To: Steve Dickson , Bohuslav Kabrda CC: linux-nfs list Subject: Re: [PATCH] Make mountstats and nfs-iostat Python 3 compatible Date: Wed, 16 Oct 2013 22:05:54 +0000 Message-ID: <863050D3-36C8-460D-9BF5-31237C51D4F4@netapp.com> References: <1379409678-15730-1-git-send-email-bkabrda@redhat.com> <5239FBFB.8010300@RedHat.com> In-Reply-To: <5239FBFB.8010300@RedHat.com> Content-Type: text/plain; charset=US-ASCII MIME-Version: 1.0 Sender: linux-nfs-owner@vger.kernel.org List-ID: 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 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