X-Git-Url: http://git.pjr.cc/?p=nodejs-repoproxy.git;a=blobdiff_plain;f=lib%2Frepo-yum.js;h=57741ba2d283ef07cb0e3ae233449c46e10c7886;hp=cc588e1a8bcd57ccb9b21d188eb034f16c59b668;hb=d1bf8734f65364457e522c74fb3615d5f017874c;hpb=3933776341028e83d89e0f888fff3e6319230abf diff --git a/lib/repo-yum.js b/lib/repo-yum.js index cc588e1..57741ba 100644 --- a/lib/repo-yum.js +++ b/lib/repo-yum.js @@ -13,66 +13,107 @@ function maintain(name, repoinfo, files) { var metaAge = 24*3600*1000*(repoinfo.updateinterval); var expireAge = 24*3600*1000*(repoinfo.expiretime); + function fileCheck(i) { + var wasExpired = false; + var inDownload = false; + log.debug("checking file: ", files[i]); + log.debug("checking if file is in download mode"); + + // need to check global.repoproxy.downloads + if(typeof global.repoproxy.downloads[files[i]] != "undefined") { + if(global.repoproxy.downloads[files[i]] == 1) { + inDownload=true; + } + } + + // we look for repodata/repomd.xml file, if this is past maturity, we clean that whole directory - if(files[i].match(/.*repodata\/repomd\.xml$/)) { - log.debug("Found repomd.xml file: ", files[i]); + if(!inDownload) { - // strip the repomd file to get the dir - var repomddir = files[i].replace(/repomd\.xml$/, ""); - log.debug("repomd dir is:", repomddir); + var metafile = files[i].replace(/(.*)\/(.[^\/]+$)/, "$1/.meta.$2.filesize"); - - // do the file stat - fs.stat(files[i], function(err, stats) { - log.debug("stats for file was: ", stats); - var curtime = new Date().getTime(); - var ctime = stats.ctime.getTime(); - log.debug("curtime is ", curtime); - log.debug("ctime is ", ctime); + if(files[i].match(/.*repodata\/repomd\.xml$/)) { + log.debug("Found repomd.xml file: ", files[i]); - var age = curtime - ctime; - log.debug("age is (%d) for (%d)", age, metaAge); - if(age > metaAge) { - // TODO: cleanup repomd directory - cache.moveToCleanup(repomddir); - log.info("Sending repomd directory to trash for cleanup (%s)", repomddir); - } - }) + // strip the repomd file to get the dir + var repomddir = files[i].replace(/repomd\.xml$/, ""); + log.debug("repomd dir is:", repomddir); + + + // do the file stat + fs.stat(files[i], function(err, stats) { + log.debug("stats for file was: ", stats); + var curtime = new Date().getTime(); + var ctime = stats.ctime.getTime(); + log.debug("curtime is ", curtime); + log.debug("ctime is ", ctime); + + var age = curtime - ctime; + log.debug("age is (%d) for (%d)", age, metaAge); + if(age > metaAge) { + cache.moveToCleanup(repomddir); + log.info("Sending repomd directory to trash for cleanup (%s)", repomddir); + wasExpired = true; + } + }) + + } else { + // STUFF!!! + fs.stat(files[i], function(err, stats) { + log.debug("stats for file was: ", stats); + var curtime = new Date().getTime(); + var atime = stats.atime.getTime(); + log.debug("curtime is ", curtime); + log.debug("ctime is ", atime); + + var age = curtime - atime; + //log.debug("age is (%d) for (%d)", age, expireAge); + if(age > expireAge) { + // TODO: cleanup singular file + // TODO: cleanup meta too, fuck me + //log.debug("clean up file \n", files[i]); + //log.debug("meta for this file is \n", nfile); + cache.moveToCleanup(files[i]); + cache.moveToCleanup(metafile); + log.info("Sending expired file to trash for cleanup (%s)", files[i]); + wasExpired = true; + } + }) + } - } else { - // STUFF!!! + // check meta data fs.stat(files[i], function(err, stats) { - log.debug("stats for file was: ", stats); - var curtime = new Date().getTime(); - var atime = stats.atime.getTime(); - log.debug("curtime is ", curtime); - log.debug("ctime is ", atime); + var fsize = stats.size; + var mfile = fs.createReadStream(metafile); + var expSize = ""; + mfile.on("data", function(data) { + expSize += data; + }); - var age = curtime - atime; - //log.debug("age is (%d) for (%d)", age, expireAge); - if(age > expireAge) { - // TODO: cleanup singular file - // TODO: cleanup meta too, fuck me - //log.debug("clean up file \n", files[i]); - var metafile = files[i].replace(/(.*)\/(.[^\/]+$)/, "$1/.meta.$2.filesize"); - //log.debug("meta for this file is \n", nfile); - cache.moveToCleanup(files[i]); - cache.moveToCleanup(metafile); - log.info("Sending expired file to trash for cleanup (%s)", files[i]); - } + mfile.on("end", function(closed) { + if(fsize != parseInt(expSize)) { + log.debug("possible metadata clash for (%s) - (%d),(%s), removing file", files[i], fsize, expSize); + cache.moveToCleanup(files[i]); + cache.moveToCleanup(metafile); + } else { + log.debug("metadata good for (%s) - (%d),(%s)", files[i], fsize, expSize); + } + }); + }) + } else { + log.debug("file %s was ignored as its in download", files[i]); } - if(typeof files[i+1] != "undefined") fileCheck(i+1); + if(typeof files[i+1] != "undefined") fileCheck(i+1); } if(typeof files[0] != 'undefined') fileCheck(0) else log.info("Skipping (yum) file check as there are none... apprently?"); - } exports.maintain = maintain; \ No newline at end of file