[Gug-cvs] gug/fuse gugfs.py,1.3,1.4 gugprocfs.py,1.1,1.2
Status: Planning
Brought to you by:
szferi
From: Gergo C. <cs...@us...> - 2007-05-24 07:14:00
|
Update of /cvsroot/gug/gug/fuse In directory sc8-pr-cvs2.sourceforge.net:/tmp/cvs-serv8186 Modified Files: gugfs.py gugprocfs.py Log Message: clean ups, cluster manager support for gugprocfs Index: gugprocfs.py =================================================================== RCS file: /cvsroot/gug/gug/fuse/gugprocfs.py,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** gugprocfs.py 17 May 2007 09:35:59 -0000 1.1 --- gugprocfs.py 24 May 2007 07:13:56 -0000 1.2 *************** *** 7,12 **** from gug.common.share import random_name from urllib import URLopener ! import os, stat, errno # some spaghetti to make it usable without fuse-py being installed for i in True, False: --- 7,13 ---- from gug.common.share import random_name from urllib import URLopener + from gug.common.ogsa_bes import overall_states ! import os, stat, errno, time # some spaghetti to make it usable without fuse-py being installed for i in True, False: *************** *** 63,103 **** st = MyStat() ! if path == '/' or path == '/gis': st.st_mode = stat.S_IFDIR | 0755 st.st_nlink = 2 return st ! if path[:5] != '/gis/': return -errno.ENOENT ! fpath = path[5:] ! lfpath = len(fpath) ! client = get_client(self.gis_peers[0]) ! services = client.get() ! for service in services: ! servsid = service[0]['sid'] ! if servsid == fpath: ! st.st_mode = stat.S_IFDIR | 0755 ! st.st_nlink = 2 ! return st ! else: ! lservsid = len(servsid) ! if servsid + "/" == fpath[:lservsid+1]: ! st.st_mode = stat.S_IFREG | 0444 ! st.st_nlink = 1 ! fname = fpath[lservsid+1:] ! if fname == 'description': ! st.st_size = len(service[1]) ! elif fname == 'urls': ! urls = '' ! for url in service[0]['urls']: ! urls += url + "\n" ! st.st_size = len(urls) ! else: ! st.st_size = len(service[0][fname]) ! return st return None - def readdir(self, path, offset): #file("/tmp/gugfsreaddir","a").write("%i %s\n" % (self.ncount, path)) --- 64,146 ---- st = MyStat() ! if path == '/' or path == '/gis' or path == '/cm': st.st_mode = stat.S_IFDIR | 0755 st.st_nlink = 2 return st ! if path[:5] != '/gis/' and path[:4] != '/cm/': return -errno.ENOENT ! if path[:5] == '/gis/': ! fpath = path[5:] ! lfpath = len(fpath) ! try: ! gis = find_working_service(self.gis_peers, 'InformationSystem') ! except: ! return -errno.EIO ! services = gis.get() ! for service in services: ! servsid = service[0]['sid'] ! if servsid == fpath: ! st.st_mode = stat.S_IFDIR | 0755 ! st.st_nlink = 2 ! return st ! else: ! lservsid = len(servsid) ! if servsid + "/" == fpath[:lservsid+1]: ! st.st_mode = stat.S_IFREG | 0444 ! st.st_nlink = 1 ! fname = fpath[lservsid+1:] ! if fname == 'description': ! st.st_size = len(service[1]) ! elif fname == 'urls': ! urls = '' ! for url in service[0]['urls']: ! urls += url + "\n" ! st.st_size = len(urls) ! elif fname == 'resourcetype': ! restype = '' ! for res in service[0]['resourcetype']: ! restype += res + "\n" ! st.st_size = len(res) ! else: ! st.st_size = len(service[0][fname]) ! return st ! if path[:4] == '/cm/': ! fpath = path[4:] ! lfpath = len(fpath) ! try: ! cm = find_working_service(self.gis_peers, 'ClusterManager') ! except: ! return -errno.EIO ! jobs = cm.status('') ! for job in jobs: ! jobid = job[0] ! if jobid == fpath: ! st.st_mode = stat.S_IFDIR | 0755 ! st.st_nlink = 2 ! return st ! else: ! ljobid = len(jobid) ! if jobid + "/" == fpath[:ljobid+1]: ! st.st_mode = stat.S_IFREG | 0444 ! st.st_nlink = 1 ! fname = fpath[ljobid+1:] ! if fname == 'last_check_time' or fname == 'submit_time': ! ss = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(job[1][fname])) ! st.st_size = len(ss) ! elif fname == 'status': ! ss = overall_states[job[1][fname]] ! st.st_size = len(ss) ! elif fname == 'exit_code': ! if job[1][fname]: ! st.st_size = len(str(job[1][fname])) ! else: ! st.st_size = 0 ! elif job[1].has_key(fname): ! st.st_size = len(job[1][fname]) ! return st return None def readdir(self, path, offset): #file("/tmp/gugfsreaddir","a").write("%i %s\n" % (self.ncount, path)) *************** *** 106,140 **** yield fuse.Direntry("..") if path == '/': ! yield fuse.Direntry("gis") return ! if path[:5] != '/gis/' and path != '/gis': return #file("/tmp/gugfsreaddir","a").write("%i 2: proc dir, gis_peers[0]: %s\n" % (self.ncount, self.gis_peers[0])) ! client = get_client(self.gis_peers[0]) ! print "client: " + str(client) ! services = client.get() ! if path == "/gis": ! #file("/tmp/gugfsreaddir","a").write("%i 3: proc dir, list services: %i\n" % (self.ncount, len(services))) for service in services: ! yield fuse.Direntry(str(service[0]['sid'])) ! return ! for service in services: ! if path == "/gis/" + service[0]['sid']: ! yield fuse.Direntry('description') ! yield fuse.Direntry('origin') ! yield fuse.Direntry('type') ! yield fuse.Direntry('urls') ! yield fuse.Direntry('timelife') ! yield fuse.Direntry('ttl') return def unlink(self, path): - #file("/tmp/gugfsunlink", "a").write("%i %s\n" % (self.ncount, path)) return -errno.EACCES def rmdir(self, path): ! #file("/tmp/gugfsrmdir", "a").write("%i %s\n" % (self.ncount, path)) return -errno.EACCES --- 149,225 ---- yield fuse.Direntry("..") if path == '/': ! try: ! gis = find_working_service(self.gis_peers, 'InformationSystem') ! yield fuse.Direntry("gis") ! except: ! pass ! try: ! cm = find_working_service(self.gis_peers, 'ClusterManager') ! yield fuse.Direntry("cm") ! except: ! pass return ! if path[:5] != '/gis/' and \ ! path != '/gis' and \ ! path[:4] != '/cm/' and \ ! path != '/cm': return #file("/tmp/gugfsreaddir","a").write("%i 2: proc dir, gis_peers[0]: %s\n" % (self.ncount, self.gis_peers[0])) ! if path[:4] == '/gis': ! try: ! gis = find_working_service(self.gis_peers, 'InformationSystem') ! except: ! return ! services = gis.get() ! if path == "/gis": ! #file("/tmp/gugfsreaddir","a").write("%i 3: proc dir, list services: %i\n" % (self.ncount, len(services))) ! for service in services: ! yield fuse.Direntry(str(service[0]['sid'])) ! return for service in services: ! if path == "/gis/" + service[0]['sid']: ! yield fuse.Direntry('description') ! yield fuse.Direntry('origin') ! yield fuse.Direntry('type') ! yield fuse.Direntry('urls') ! yield fuse.Direntry('timelife') ! yield fuse.Direntry('ttl') ! yield fuse.Direntry('resourcetype') ! return ! ! if path[:3] == '/cm': ! try: ! cm = find_working_service(self.gis_peers, 'ClusterManager') ! except: return + jobs = cm.status('') + if path == "/cm": + #file("/tmp/gugfsreaddir","a").write("%i 3: proc dir, list services: %i\n" % (self.ncount, len(services))) + for job in jobs: + yield fuse.Direntry(str(job[0])) + return + for job in jobs: + if path == '/cm/' + job[0]: + for fname in job[1].keys(): + yield fuse.Direntry(fname) def unlink(self, path): return -errno.EACCES def rmdir(self, path): ! if path[:4] != '/cm/': ! return -errno.EACCES ! fpath = path[4:] ! try: ! cm = find_working_service(self.gis_peers, 'ClusterManager') ! except: ! return -errno.EIO ! jobs = cm.status('') ! for job in jobs: ! if job[0] == fpath: ! cm.delete([fpath]) ! return 0 return -errno.EACCES *************** *** 150,189 **** def open(self, path, flags): accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR ! if path[:5] != "/gis/": return -errno.EACCES if (flags & accmode) != os.O_RDONLY: return -errno.EACCES ! client = get_client(self.gis_peers[0]) ! services = client.get() ! for service in services: ! for fname in ['description', 'origin', 'type', 'urls', 'timelife', 'ttl']: ! if path == "/gis/" + service[0]['sid'] + "/" + fname: ! if self.openfiles.has_key(path): ! self.openfiles[path] += 1 ! else: ! self.openfiles[path] = 1 ! return 0 return -errno.ENOENT def read(self, path, size, offset): ! #file("/tmp/gugfsread", "a").write("%i, 0: %s, offset: %i, size: %i\n" % (self.ncount, path, offset, size)) ! if path[:5] != '/gis/': return -errno.EACCES fcontent = '' ! client = get_client(self.gis_peers[0]) ! services = client.get() ! for service in services: ! for fname in ['description', 'origin', 'type', 'urls', 'timelife', 'ttl']: ! if path == "/gis/" + service[0]['sid'] + "/" + fname: ! #file("/tmp/gugfsread", "a").write("%i, 1: %s\n" % (self.ncount, fname)) if fname == 'description': ! fcontent = service[1] + "\n" elif fname == 'urls': for url in service[0]['urls']: fcontent += url + "\n" else: ! fcontent = service[0][fname] + "\n" ! ! #file("/tmp/gugfsread", "a").write("%i, 2: %s\n" % (self.ncount, fcontent)) slen = len(fcontent) if offset < slen: --- 235,339 ---- def open(self, path, flags): accmode = os.O_RDONLY | os.O_WRONLY | os.O_RDWR ! if path[:5] != "/gis/" and path[:4] != '/cm/': return -errno.EACCES if (flags & accmode) != os.O_RDONLY: return -errno.EACCES ! ! if path[:5] == '/gis/': ! fpath = path[5:] ! lfpath = len(fpath) ! try: ! gis = find_working_service(self.gis_peers, 'InformationSystem') ! except: ! return -errno.EIO ! services = gis.get() ! for service in services: ! servsid = service[0]['sid'] ! lservsid = len(servsid) ! if servsid + "/" == fpath[:lservsid+1]: ! fname = fpath[lservsid+1:] ! if service[0].has_key(fname): ! if self.openfiles.has_key(path): ! self.openfiles[path] += 1 ! else: ! self.openfiles[path] = 1 ! return 0 ! ! if path[:4] == '/cm/': ! fpath = path[4:] ! lfpath = len(fpath) ! try: ! cm = find_working_service(self.gis_peers, 'ClusterManager') ! except: ! return -errno.EIO ! jobs = cm.status('') ! for job in jobs: ! jobid = job[0] ! ljobid = len(jobid) ! if jobid + "/" == fpath[:ljobid+1]: ! fname = fpath[ljobid+1:] ! if job[1].has_key(fname): ! if self.openfiles.has_key(path): ! self.openfiles[path] += 1 ! else: ! self.openfiles[path] = 1 ! return 0 return -errno.ENOENT def read(self, path, size, offset): ! if path[:5] != '/gis/' and path[:4] != '/cm/': return -errno.EACCES fcontent = '' ! ! if path[:5] == '/gis/': ! fpath = path[5:] ! lfpath = len(fpath) ! try: ! gis = find_working_service(self.gis_peers, 'InformationSystem') ! except: ! return -errno.EIO ! services = gis.get() ! for service in services: ! servsid = service[0]['sid'] ! lservsid = len(servsid) ! if servsid + "/" == fpath[:lservsid+1]: ! fname = fpath[lservsid+1:] if fname == 'description': ! fcontent = service[1] elif fname == 'urls': + fcontent = '' for url in service[0]['urls']: fcontent += url + "\n" + elif fname == 'resourcetype': + fcontent = '' + for res in service[0]['resourcetype']: + fcontent += res + "\n" else: ! fcontent = service[0][fname] ! elif path[:4] == '/cm/': ! fpath = path[4:] ! lfpath = len(fpath) ! try: ! cm = find_working_service(self.gis_peers, 'ClusterManager') ! except: ! return -errno.EIO ! jobs = cm.status('') ! for job in jobs: ! jobid = job[0] ! ljobid = len(jobid) ! if jobid + "/" == fpath[:ljobid+1]: ! fname = fpath[ljobid+1:] ! if fname == 'last_check_time' or fname == 'submit_time': ! fcontent = time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.localtime(job[1][fname])) ! elif fname == 'status': ! fcontent = overall_states[job[1][fname]] ! elif fname == 'exit_code': ! if job[1][fname]: ! fcontent = str(job[1][fname]) ! elif job[1].has_key(fname): ! fcontent = str(job[1][fname]) ! else: ! return -errno.ENOENT ! slen = len(fcontent) if offset < slen: *************** *** 193,197 **** else: buf = '' - #file("/tmp/gugfsread", "a").write("%i, 3: %s\n" % (self.ncount, buf)) return buf --- 343,346 ---- *************** *** 200,208 **** def create(self, path, flags, xflags): - #file("/tmp/gugfscreate", "a").write("%i, 0: %s, flags: %s, puff: %s\n" % (self.ncount, path, str(flags), str(xflags))) return -errno.EACCES def flush(self, path): - #file("/tmp/gugfsflush", "a").write("%i, 0: %s\n" % (self.ncount, path)) self.ncount += 1 if self.openfiles.has_key(path): --- 349,355 ---- *************** *** 211,215 **** def release(self, path, flags): - #file("/tmp/gugfsrelease", "a").write("%i, 0: %s, flags: %s\n" % (self.ncount, path, str(flags))) self.ncount += 1 if self.openfiles.has_key(path): --- 358,361 ---- Index: gugfs.py =================================================================== RCS file: /cvsroot/gug/gug/fuse/gugfs.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** gugfs.py 22 May 2007 07:14:04 -0000 1.3 --- gugfs.py 24 May 2007 07:13:56 -0000 1.4 *************** *** 8,12 **** from urllib import URLopener ! import os, stat, errno # some spaghetti to make it usable without fuse-py being installed for i in True, False: --- 8,12 ---- from urllib import URLopener ! import os, stat, errno, os.path # some spaghetti to make it usable without fuse-py being installed for i in True, False: *************** *** 62,67 **** self.tempdir += "/" self.tempdir += ".gugfs" ! if not os.access(self.tempdir, 1): ! os.mkdir(self.tempdir, 0700) def getattr(self, path): --- 62,67 ---- self.tempdir += "/" self.tempdir += ".gugfs" ! if not os.path.exists(self.tempdir + "/"): ! os.makedirs(self.tempdir, 0700) def getattr(self, path): |