* [gentoo-commits] proj/tinderbox-cluster:master commit in: pym/tbc/, sql/
@ 2016-02-21 20:44 Magnus Granberg
0 siblings, 0 replies; only message in thread
From: Magnus Granberg @ 2016-02-21 20:44 UTC (permalink / raw
To: gentoo-commits
commit: cd2daee7c3a41d2e0dabceb63584b3fd98e25e94
Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
AuthorDate: Sun Feb 21 20:45:10 2016 +0000
Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
CommitDate: Sun Feb 21 20:45:10 2016 +0000
URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=cd2daee7
Add new host job remove old cpv to remove old cpv in the db
pym/tbc/db_mapping.py | 2 +-
pym/tbc/jobs.py | 9 +++
pym/tbc/old_cpv.py | 154 ++++++++++++++++++++-----------------------------
pym/tbc/sqlquerys.py | 41 +++++++++++++
sql/data_dump.sql | 5 +-
sql/structure_dump.sql | 60 ++++++++++++++++---
6 files changed, 170 insertions(+), 101 deletions(-)
diff --git a/pym/tbc/db_mapping.py b/pym/tbc/db_mapping.py
index 9be0d0a..86884bf 100644
--- a/pym/tbc/db_mapping.py
+++ b/pym/tbc/db_mapping.py
@@ -36,7 +36,7 @@ class Logs(Base):
class Jobs(Base):
JobId = Column('job_id', Integer, primary_key=True)
- JobType = Column('job_type', Enum('updatedb', 'esync', 'gsync'))
+ JobType = Column('job_type', Enum('updatedb', 'esync', 'removeold_cpv'))
Status = Column('status', Enum('Runing', 'Done', 'Waiting'))
User = Column('user', String(50))
ConfigId = Column('config_id', Integer, ForeignKey('configs.config_id'))
diff --git a/pym/tbc/jobs.py b/pym/tbc/jobs.py
index 5c136d2..efe8623 100644
--- a/pym/tbc/jobs.py
+++ b/pym/tbc/jobs.py
@@ -5,6 +5,7 @@ from __future__ import print_function
from tbc.sync import git_sync_main
#from tbc.buildquerydb import add_buildquery_main, del_buildquery_main
from tbc.updatedb import update_db_main
+from tbc.old_cpv import remove_old_cpv_main
from tbc.sqlquerys import get_config_id, get_jobs, update_job_list
from tbc.log import write_log
@@ -68,4 +69,12 @@ def jobs_main(session, config_id):
update_job_list(session, "Fail", job_id)
log_msg = "Job %s did fail." % (job_id,)
write_log(session, log_msg, "info", config_id, 'jobs_main')
+ elif job == "removeold_cpv":
+ update_job_list(session, "Runing", job_id)
+ log_msg = "Job %s is runing." % (job_id,)
+ write_log(session, log_msg, "info", config_id, 'jobs_main')
+ remove_old_cpv_main(session, config_id)
+ update_job_list(session, "Done", job_id)
+ log_msg = "Job %s is done.." % (job_id,)
+ write_log(session, log_msg, "info", config_id, 'jobs_main')
return
diff --git a/pym/tbc/old_cpv.py b/pym/tbc/old_cpv.py
index dbeba56..027f171 100644
--- a/pym/tbc/old_cpv.py
+++ b/pym/tbc/old_cpv.py
@@ -1,97 +1,69 @@
-# Copyright 1998-2015 Gentoo Foundation
+# Copyright 1998-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
from __future__ import print_function
-import logging
-from tbc.readconf import get_conf_settings
-reader=get_conf_settings()
-tbc_settings_dict=reader.read_tbc_settings_all()
-# make a CM
-from tbc.ConnectionManager import connectionManager
-CM=connectionManager(tbc_settings_dict)
-#selectively import the pgsql/mysql querys
-if CM.getName()=='pgsql':
- from tbc.pgsql_querys import *
+import multiprocessing
+from datetime import datetime
+from tbc.log import write_log
+from sqlalchemy.orm import scoped_session, sessionmaker
+from tbc.ConnectionManager import NewConnection
+from tbc.readconf import read_config_settings
+from tbc.sqlquerys import get_category_list_info, get_package_list_info, get_ebuild_list_info, \
+ get_build_job_all, del_old_build_jobs, del_old_ebuild, add_old_package, del_old_package, \
+ add_old_category
-class tbc_old_cpv(object):
-
- def __init__(self, myportdb, mysettings):
- self._mysettings = mysettings
- self._myportdb = myportdb
+def remove_old_ebuilds(package_id, config_id, tbc_settings, cp):
+ today = datetime.utcnow()
+ session_factory = sessionmaker(bind=NewConnection(tbc_settings))
+ Session = scoped_session(session_factory)
+ session2 = Session()
+ EbuildsInfo = get_ebuild_list_info(session2, package_id)
+ for EbuildInfo in EbuildsInfo:
+ cpv = cp + '-' + EbuildInfo.Version
+ log_msg = "Checking: %s" % (cpv,)
+ write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_ebuilds')
+ if not EbuildInfo.Active:
+ duration = today - EbuildInfo.TimeStamp
+ if duration.days > 30:
+ log_msg = "Removing: %s" % (cpv,)
+ write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_ebuilds')
+ build_job_id_list = get_build_job_all(session2, EbuildInfo.EbuildId)
+ if build_job_id_list != []:
+ for build_job in build_job_id_list:
+ del_old_build_jobs(session2, build_job.BuildJobId)
+ del_old_ebuild(session2, EbuildInfo.EbuildId)
+ if not get_ebuild_list_info(session2, package_id):
+ add_old_package(session2, package_id)
+ session2.close
+ Session.remove()
- def mark_old_ebuild_db(self, package_id):
- conn=CM.getConnection()
- # Get the ebuild list for cp
- cp, repo = get_cp_repo_from_package_id(conn, package_id)
- mytree = []
- mytree.append(self._myportdb.getRepositoryPath(repo))
- ebuild_list_tree = self._myportdb.cp_list(cp, use_cache=1, mytree=mytree)
- # Get ebuild list on categories, package in the db
- ebuild_list_db = cp_list_db(conn, package_id)
- # Check if don't have the ebuild in the tree
- # Add it to the no active list
- old_ebuild_list = []
- for ebuild_line in ebuild_list_db:
- cpv_db = cp + "-" + ebuild_line[0]
- if not cpv_db in ebuild_list_tree:
- old_ebuild_list.append(ebuild_line)
- # Set no active on ebuilds in the db that no longer in tree
- if old_ebuild_list != []:
- for old_ebuild in old_ebuild_list:
- logging.info("O %s/%s-%s", categories, package, old_ebuild[0])
- add_old_ebuild(conn,package_id, old_ebuild_list)
- # Check if we have older no activ ebuilds then 60 days
- ebuild_old_list_db = cp_list_old_db(conn,package_id)
- # Delete older ebuilds in the db
- if ebuild_old_list_db != []:
- for del_ebuild_old in ebuild_old_list_db:
- logging.info("D %s/%s-%s", categories, package, del_ebuild_old[1])
- del_old_ebuild(conn,ebuild_old_list_db)
- CM.putConnection(conn)
+def remove_old_cpv_main(session, config_id):
+ today = datetime.datetime.utcnow
+ tbc_settings = read_config_settings()
+ # Use all cores when multiprocessing
+ #pool_cores = multiprocessing.cpu_count()
+ #pool = multiprocessing.Pool(processes = pool_cores)
- def mark_old_package_db(self, package_id_list_tree):
- conn=CM.getConnection()
- # Get categories/package list from db
- package_list_db = cp_all_db(conn)
- old_package_id_list = []
- # Check if don't have the categories/package in the tree
- # Add it to the no active list
- for package_line in package_list_db:
- if not package_line in package_id_list_tree:
- old_package_id_list.append(package_line)
- # Set no active on categories/package and ebuilds in the db that no longer in tree
- if old_package_id_list != []:
- mark_old_list = add_old_package(conn,old_package_id_list)
- if mark_old_list != []:
- for x in mark_old_list:
- element = get_cp_from_package_id(conn,x)
- logging.info("O %s", element[0])
- # Check if we have older no activ categories/package then 60 days
- del_package_id_old_list = cp_all_old_db(conn,old_package_id_list)
- # Delete older categories/package and ebuilds in the db
- if del_package_id_old_list != []:
- for i in del_package_id_old_list:
- element = get_cp_from_package_id(conn,i)
- logging.info("D %s", element)
- del_old_package(conn,del_package_id_old_list)
- CM.putConnection(conn)
-
- def mark_old_categories_db(self):
- conn=CM.getConnection()
- # Get categories list from the tree and db
- categories_list_tree = self._mysettings.categories
- categories_list_db =get_categories_db(conn)
- categories_old_list = []
- # Check if don't have the categories in the tree
- # Add it to the no active list
- for categories_line in categories_list_db:
- if not categories_line[0] in categories_list_tree:
- old_c = get_old_categories(conn,categories_line[0])
- if old_c is not None:
- categories_old_list.append(categories_line)
- # Delete older categories in the db
- if categories_old_list != []:
- for real_old_categories in categories_old_list:
- del_old_categories(conn,real_old_categoriess)
- logging.info("D %s", real_old_categories)
- CM.putConnection(conn)
\ No newline at end of file
+ CategorysInfo = get_category_list_info(session)
+ for CategoryInfo in CategorysInfo:
+ log_msg = "Checking: %s" % (CategoryInfo.Category,)
+ write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_cpv_main')
+ PackagesInfo = get_package_list_info(session, CategoryInfo.CategoryId)
+ for PackageInfo in PackagesInfo:
+ cp = CategoryInfo.Category + '/' + PackageInfo.Package
+ if PackageInfo.Active:
+ # pool.apply_async( remove_old_ebuilds, (Package.PackageId, config_id, tbc_settings, cp,))
+ # use this when debuging
+ remove_old_ebuilds(PackageInfo.PackageId, config_id, tbc_settings, cp,)
+ else:
+ duration = today - PackageInfo.TimeStamp
+ if duration.days > 30:
+ log_msg = "Removing: %s" % (cp,)
+ write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_cpv_main')
+ del_old_package(session, PackageInfo.PackageId)
+
+ #close and join the multiprocessing pools
+ # pool.close()
+ # pool.join()
+ if not get_package_list_info(session, CategoryId = CategoryInfo.CategoryId):
+ add_old_category(session, category_id)
diff --git a/pym/tbc/sqlquerys.py b/pym/tbc/sqlquerys.py
index f9f14a2..75e3d30 100644
--- a/pym/tbc/sqlquerys.py
+++ b/pym/tbc/sqlquerys.py
@@ -583,3 +583,44 @@ def add_repoman_log(session, package_id, repoman_log, repoman_hash):
PackagesRepomanInfo.RepomanHash = repoman_hash
PackagesRepomanInfo.RepomanText = repoman_log
session.commit()
+
+def get_category_list_info(session):
+ try:
+ CategorysInfo = session.query(Categories).all()
+ except NoResultFound as e:
+ return False
+ return CategorysInfo
+
+def get_package_list_info(session, category_id):
+ try:
+ PackagesInfo = session.query(Packages).filter_by(CategoryId = category_id).all()
+ except NoResultFound as e:
+ return False
+ return PackagesInfo
+
+def get_ebuild_list_info(session, package_id):
+ try:
+ EbuildsInfo = session.query(Ebuilds).filter_by(PackageId = package_id).all()
+ except NoResultFound as e:
+ return False
+ return EbuildsInfo
+
+def del_old_ebuild(session, ebuild_id):
+ session.query(EbuildsRestrictions).filter(EbuildsRestrictions.EbuildId == ebuild_id).delete()
+ session.query(EbuildsIUse).filter(EbuildsIUse.EbuildId == ebuild_id).delete()
+ session.query(EbuildsKeywords).filter(EbuildsKeywords.EbuildId == ebuild_id).delete()
+ session.query(EbuildsMetadata).filter(EbuildsMetadata.EbuildId == ebuild_id).delete()
+ session.query(Ebuilds).filter(Ebuilds.EbuildId == ebuild_id).delete()
+ session.commit()
+
+def del_old_package(session, package_id):
+ session.query(PackagesRepoman).filter(PackagesRepoman.PackageId == package_id).delete()
+ session.query(PackagesEmails).filter(PackagesEmails.PackageId== package_id).delete()
+ session.query(PackagesMetadata).filter(PackagesMetadata.PackageId == package_id).delete()
+ session.query(Packages).filter(Packages.PackageId == package_id).delete()
+ session.commit()
+
+def add_old_category(session, category_id):
+ CategorysInfo = session.query(Categories).filter_by(CategoryId = category_id).one()
+ CategorysInfo.Active = False
+ session.commit()
diff --git a/sql/data_dump.sql b/sql/data_dump.sql
index c5e3a9c..c452356 100644
--- a/sql/data_dump.sql
+++ b/sql/data_dump.sql
@@ -168,8 +168,9 @@ INSERT INTO `hilight_css` (`hilight_css_id`, `hilight_css_name`, `hilight_css_co
--
INSERT INTO `jobs` (`job_id`, `job_type`, `status`, `user`, `config_id`, `run_config_id`, `time_stamp`) VALUES
-(1, 'updatedb', 'Done', 'cron', 1, 1, '2016-01-27 17:54:38'),
-(3, 'esync', 'Done', 'cron', 1, 1, '2016-02-13 14:35:58');
+(1, 'updatedb', 'Done', 'cron', 1, 1, '2016-02-20 14:13:32'),
+(2, 'esync', 'Done', 'cron', 1, 1, '2016-02-21 20:02:08'),
+(3, 'removeold_cpv', 'Done', 'cron', 1, 1, '2016-02-21 20:04:51');
--
-- Dumping data for table `setups`
diff --git a/sql/structure_dump.sql b/sql/structure_dump.sql
index 9c2f397..cf4bab7 100644
--- a/sql/structure_dump.sql
+++ b/sql/structure_dump.sql
@@ -3,9 +3,9 @@
-- http://www.phpmyadmin.net
--
-- Host: localhost
--- Generation Time: Jan 31, 2016 at 06:07 PM
+-- Generation Time: Feb 21, 2016 at 08:08 PM
-- Server version: 10.0.22-MariaDB-log
--- PHP Version: 5.6.16-pl0-gentoo
+-- PHP Version: 7.0.3-pl0-gentoo
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
@@ -31,9 +31,9 @@ BEGIN
DECLARE in_job_id INT;
SET in_config_id = (SELECT config_id
FROM configs WHERE default_config = True);
- SET in_job_id = (SELECT job_id FROM jobs
+ SET in_job_id = (SELECT job_id FROM jobs
WHERE job_type = 'esync'
- AND config_id = in_config_id
+ AND config_id = in_config_id
AND status = 'Done'
LIMIT 1);
IF in_job_id >= 1 THEN
@@ -43,6 +43,25 @@ BEGIN
END IF;
END$$
+CREATE DEFINER=`tbc`@`localhost` PROCEDURE `add_jobs_removeold_cpv`()
+ MODIFIES SQL DATA
+BEGIN
+ DECLARE in_config_id INT;
+ DECLARE in_job_id INT;
+ SET in_config_id = (SELECT config_id
+ FROM configs WHERE default_config = True);
+ SET in_job_id = (SELECT job_id FROM jobs
+ WHERE job_type = 'removeold_cpv'
+ AND config_id = in_config_id
+ AND status = 'Done'
+ LIMIT 1);
+ IF in_job_id >= 1 THEN
+ UPDATE jobs SET user = 'cron', status = 'Waiting' WHERE job_type = 'removeold_cpv';
+ ELSE
+ SET in_job_id = 0;
+ END IF;
+END$$
+
DELIMITER ;
-- --------------------------------------------------------
@@ -331,7 +350,7 @@ CREATE TABLE IF NOT EXISTS `ebuilds_metadata` (
`id` int(11) NOT NULL,
`ebuild_id` int(11) NOT NULL,
`commit` varchar(100) NOT NULL COMMENT 'Git commit',
- `New` tinyint(1) NOT NULL,
+ `new` tinyint(1) NOT NULL,
`descriptions` varchar(200) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
@@ -428,7 +447,7 @@ CREATE TABLE IF NOT EXISTS `hilight_css` (
CREATE TABLE IF NOT EXISTS `jobs` (
`job_id` int(11) NOT NULL,
- `job_type` enum('esync','updatedb') NOT NULL,
+ `job_type` enum('esync','updatedb','removeold_cpv') NOT NULL,
`status` enum('Runing','Done','Waiting') NOT NULL DEFAULT 'Waiting',
`user` varchar(20) NOT NULL,
`config_id` int(11) NOT NULL,
@@ -552,6 +571,18 @@ CREATE TABLE IF NOT EXISTS `setups` (
-- --------------------------------------------------------
--
+-- Table structure for table `tbc_config`
+--
+
+CREATE TABLE IF NOT EXISTS `tbc_config` (
+`id` int(11) NOT NULL,
+ `webinker` varchar(100) NOT NULL,
+ `webbug` varchar(100) NOT NULL
+) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
+-- --------------------------------------------------------
+
+--
-- Table structure for table `uses`
--
@@ -793,6 +824,12 @@ ALTER TABLE `setups`
ADD PRIMARY KEY (`setup_id`), ADD UNIQUE KEY `setup_id` (`setup_id`);
--
+-- Indexes for table `tbc_config`
+--
+ALTER TABLE `tbc_config`
+ ADD PRIMARY KEY (`id`);
+
+--
-- Indexes for table `uses`
--
ALTER TABLE `uses`
@@ -993,6 +1030,11 @@ MODIFY `restriction_id` int(11) NOT NULL AUTO_INCREMENT;
ALTER TABLE `setups`
MODIFY `setup_id` int(11) NOT NULL AUTO_INCREMENT;
--
+-- AUTO_INCREMENT for table `tbc_config`
+--
+ALTER TABLE `tbc_config`
+MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
+--
-- AUTO_INCREMENT for table `uses`
--
ALTER TABLE `uses`
@@ -1001,10 +1043,14 @@ DELIMITER $$
--
-- Events
--
-CREATE DEFINER=`tbc`@`localhost` EVENT `add_esync_jobs` ON SCHEDULE EVERY 30 MINUTE STARTS '2012-12-23 17:15:13' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
+CREATE DEFINER=`tbc`@`localhost` EVENT `add_esync_jobs` ON SCHEDULE EVERY 1 HOUR STARTS '2012-12-23 17:15:13' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
CALL add_jobs_esync();
END$$
+CREATE DEFINER=`tbc`@`localhost` EVENT `add_removeold_cpv_jobs` ON SCHEDULE EVERY 24 HOUR STARTS '2016-02-21 21:00:22' ON COMPLETION NOT PRESERVE ENABLE DO BEGIN
+ CALL add_jobs_removeold_cpv();
+END$$
+
DELIMITER ;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2016-02-21 20:44 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-21 20:44 [gentoo-commits] proj/tinderbox-cluster:master commit in: pym/tbc/, sql/ Magnus Granberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox