Gentoo Archives: gentoo-commits

From: Magnus Granberg <zorry@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/tinderbox-cluster:master commit in: pym/tbc/, sql/
Date: Sun, 21 Feb 2016 20:44:42
Message-Id: 1456087510.cd2daee7c3a41d2e0dabceb63584b3fd98e25e94.zorry@gentoo
1 commit: cd2daee7c3a41d2e0dabceb63584b3fd98e25e94
2 Author: Magnus Granberg <zorry <AT> gentoo <DOT> org>
3 AuthorDate: Sun Feb 21 20:45:10 2016 +0000
4 Commit: Magnus Granberg <zorry <AT> gentoo <DOT> org>
5 CommitDate: Sun Feb 21 20:45:10 2016 +0000
6 URL: https://gitweb.gentoo.org/proj/tinderbox-cluster.git/commit/?id=cd2daee7
7
8 Add new host job remove old cpv to remove old cpv in the db
9
10 pym/tbc/db_mapping.py | 2 +-
11 pym/tbc/jobs.py | 9 +++
12 pym/tbc/old_cpv.py | 154 ++++++++++++++++++++-----------------------------
13 pym/tbc/sqlquerys.py | 41 +++++++++++++
14 sql/data_dump.sql | 5 +-
15 sql/structure_dump.sql | 60 ++++++++++++++++---
16 6 files changed, 170 insertions(+), 101 deletions(-)
17
18 diff --git a/pym/tbc/db_mapping.py b/pym/tbc/db_mapping.py
19 index 9be0d0a..86884bf 100644
20 --- a/pym/tbc/db_mapping.py
21 +++ b/pym/tbc/db_mapping.py
22 @@ -36,7 +36,7 @@ class Logs(Base):
23
24 class Jobs(Base):
25 JobId = Column('job_id', Integer, primary_key=True)
26 - JobType = Column('job_type', Enum('updatedb', 'esync', 'gsync'))
27 + JobType = Column('job_type', Enum('updatedb', 'esync', 'removeold_cpv'))
28 Status = Column('status', Enum('Runing', 'Done', 'Waiting'))
29 User = Column('user', String(50))
30 ConfigId = Column('config_id', Integer, ForeignKey('configs.config_id'))
31
32 diff --git a/pym/tbc/jobs.py b/pym/tbc/jobs.py
33 index 5c136d2..efe8623 100644
34 --- a/pym/tbc/jobs.py
35 +++ b/pym/tbc/jobs.py
36 @@ -5,6 +5,7 @@ from __future__ import print_function
37 from tbc.sync import git_sync_main
38 #from tbc.buildquerydb import add_buildquery_main, del_buildquery_main
39 from tbc.updatedb import update_db_main
40 +from tbc.old_cpv import remove_old_cpv_main
41 from tbc.sqlquerys import get_config_id, get_jobs, update_job_list
42 from tbc.log import write_log
43
44 @@ -68,4 +69,12 @@ def jobs_main(session, config_id):
45 update_job_list(session, "Fail", job_id)
46 log_msg = "Job %s did fail." % (job_id,)
47 write_log(session, log_msg, "info", config_id, 'jobs_main')
48 + elif job == "removeold_cpv":
49 + update_job_list(session, "Runing", job_id)
50 + log_msg = "Job %s is runing." % (job_id,)
51 + write_log(session, log_msg, "info", config_id, 'jobs_main')
52 + remove_old_cpv_main(session, config_id)
53 + update_job_list(session, "Done", job_id)
54 + log_msg = "Job %s is done.." % (job_id,)
55 + write_log(session, log_msg, "info", config_id, 'jobs_main')
56 return
57
58 diff --git a/pym/tbc/old_cpv.py b/pym/tbc/old_cpv.py
59 index dbeba56..027f171 100644
60 --- a/pym/tbc/old_cpv.py
61 +++ b/pym/tbc/old_cpv.py
62 @@ -1,97 +1,69 @@
63 -# Copyright 1998-2015 Gentoo Foundation
64 +# Copyright 1998-2016 Gentoo Foundation
65 # Distributed under the terms of the GNU General Public License v2
66
67 from __future__ import print_function
68 -import logging
69 -from tbc.readconf import get_conf_settings
70 -reader=get_conf_settings()
71 -tbc_settings_dict=reader.read_tbc_settings_all()
72 -# make a CM
73 -from tbc.ConnectionManager import connectionManager
74 -CM=connectionManager(tbc_settings_dict)
75 -#selectively import the pgsql/mysql querys
76 -if CM.getName()=='pgsql':
77 - from tbc.pgsql_querys import *
78 +import multiprocessing
79 +from datetime import datetime
80 +from tbc.log import write_log
81 +from sqlalchemy.orm import scoped_session, sessionmaker
82 +from tbc.ConnectionManager import NewConnection
83 +from tbc.readconf import read_config_settings
84 +from tbc.sqlquerys import get_category_list_info, get_package_list_info, get_ebuild_list_info, \
85 + get_build_job_all, del_old_build_jobs, del_old_ebuild, add_old_package, del_old_package, \
86 + add_old_category
87
88 -class tbc_old_cpv(object):
89 -
90 - def __init__(self, myportdb, mysettings):
91 - self._mysettings = mysettings
92 - self._myportdb = myportdb
93 +def remove_old_ebuilds(package_id, config_id, tbc_settings, cp):
94 + today = datetime.utcnow()
95 + session_factory = sessionmaker(bind=NewConnection(tbc_settings))
96 + Session = scoped_session(session_factory)
97 + session2 = Session()
98 + EbuildsInfo = get_ebuild_list_info(session2, package_id)
99 + for EbuildInfo in EbuildsInfo:
100 + cpv = cp + '-' + EbuildInfo.Version
101 + log_msg = "Checking: %s" % (cpv,)
102 + write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_ebuilds')
103 + if not EbuildInfo.Active:
104 + duration = today - EbuildInfo.TimeStamp
105 + if duration.days > 30:
106 + log_msg = "Removing: %s" % (cpv,)
107 + write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_ebuilds')
108 + build_job_id_list = get_build_job_all(session2, EbuildInfo.EbuildId)
109 + if build_job_id_list != []:
110 + for build_job in build_job_id_list:
111 + del_old_build_jobs(session2, build_job.BuildJobId)
112 + del_old_ebuild(session2, EbuildInfo.EbuildId)
113 + if not get_ebuild_list_info(session2, package_id):
114 + add_old_package(session2, package_id)
115 + session2.close
116 + Session.remove()
117
118 - def mark_old_ebuild_db(self, package_id):
119 - conn=CM.getConnection()
120 - # Get the ebuild list for cp
121 - cp, repo = get_cp_repo_from_package_id(conn, package_id)
122 - mytree = []
123 - mytree.append(self._myportdb.getRepositoryPath(repo))
124 - ebuild_list_tree = self._myportdb.cp_list(cp, use_cache=1, mytree=mytree)
125 - # Get ebuild list on categories, package in the db
126 - ebuild_list_db = cp_list_db(conn, package_id)
127 - # Check if don't have the ebuild in the tree
128 - # Add it to the no active list
129 - old_ebuild_list = []
130 - for ebuild_line in ebuild_list_db:
131 - cpv_db = cp + "-" + ebuild_line[0]
132 - if not cpv_db in ebuild_list_tree:
133 - old_ebuild_list.append(ebuild_line)
134 - # Set no active on ebuilds in the db that no longer in tree
135 - if old_ebuild_list != []:
136 - for old_ebuild in old_ebuild_list:
137 - logging.info("O %s/%s-%s", categories, package, old_ebuild[0])
138 - add_old_ebuild(conn,package_id, old_ebuild_list)
139 - # Check if we have older no activ ebuilds then 60 days
140 - ebuild_old_list_db = cp_list_old_db(conn,package_id)
141 - # Delete older ebuilds in the db
142 - if ebuild_old_list_db != []:
143 - for del_ebuild_old in ebuild_old_list_db:
144 - logging.info("D %s/%s-%s", categories, package, del_ebuild_old[1])
145 - del_old_ebuild(conn,ebuild_old_list_db)
146 - CM.putConnection(conn)
147 +def remove_old_cpv_main(session, config_id):
148 + today = datetime.datetime.utcnow
149 + tbc_settings = read_config_settings()
150 + # Use all cores when multiprocessing
151 + #pool_cores = multiprocessing.cpu_count()
152 + #pool = multiprocessing.Pool(processes = pool_cores)
153
154 - def mark_old_package_db(self, package_id_list_tree):
155 - conn=CM.getConnection()
156 - # Get categories/package list from db
157 - package_list_db = cp_all_db(conn)
158 - old_package_id_list = []
159 - # Check if don't have the categories/package in the tree
160 - # Add it to the no active list
161 - for package_line in package_list_db:
162 - if not package_line in package_id_list_tree:
163 - old_package_id_list.append(package_line)
164 - # Set no active on categories/package and ebuilds in the db that no longer in tree
165 - if old_package_id_list != []:
166 - mark_old_list = add_old_package(conn,old_package_id_list)
167 - if mark_old_list != []:
168 - for x in mark_old_list:
169 - element = get_cp_from_package_id(conn,x)
170 - logging.info("O %s", element[0])
171 - # Check if we have older no activ categories/package then 60 days
172 - del_package_id_old_list = cp_all_old_db(conn,old_package_id_list)
173 - # Delete older categories/package and ebuilds in the db
174 - if del_package_id_old_list != []:
175 - for i in del_package_id_old_list:
176 - element = get_cp_from_package_id(conn,i)
177 - logging.info("D %s", element)
178 - del_old_package(conn,del_package_id_old_list)
179 - CM.putConnection(conn)
180 -
181 - def mark_old_categories_db(self):
182 - conn=CM.getConnection()
183 - # Get categories list from the tree and db
184 - categories_list_tree = self._mysettings.categories
185 - categories_list_db =get_categories_db(conn)
186 - categories_old_list = []
187 - # Check if don't have the categories in the tree
188 - # Add it to the no active list
189 - for categories_line in categories_list_db:
190 - if not categories_line[0] in categories_list_tree:
191 - old_c = get_old_categories(conn,categories_line[0])
192 - if old_c is not None:
193 - categories_old_list.append(categories_line)
194 - # Delete older categories in the db
195 - if categories_old_list != []:
196 - for real_old_categories in categories_old_list:
197 - del_old_categories(conn,real_old_categoriess)
198 - logging.info("D %s", real_old_categories)
199 - CM.putConnection(conn)
200 \ No newline at end of file
201 + CategorysInfo = get_category_list_info(session)
202 + for CategoryInfo in CategorysInfo:
203 + log_msg = "Checking: %s" % (CategoryInfo.Category,)
204 + write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_cpv_main')
205 + PackagesInfo = get_package_list_info(session, CategoryInfo.CategoryId)
206 + for PackageInfo in PackagesInfo:
207 + cp = CategoryInfo.Category + '/' + PackageInfo.Package
208 + if PackageInfo.Active:
209 + # pool.apply_async( remove_old_ebuilds, (Package.PackageId, config_id, tbc_settings, cp,))
210 + # use this when debuging
211 + remove_old_ebuilds(PackageInfo.PackageId, config_id, tbc_settings, cp,)
212 + else:
213 + duration = today - PackageInfo.TimeStamp
214 + if duration.days > 30:
215 + log_msg = "Removing: %s" % (cp,)
216 + write_log(session2, log_msg, "info", config_id, 'old_cpv.remove_old_cpv_main')
217 + del_old_package(session, PackageInfo.PackageId)
218 +
219 + #close and join the multiprocessing pools
220 + # pool.close()
221 + # pool.join()
222 + if not get_package_list_info(session, CategoryId = CategoryInfo.CategoryId):
223 + add_old_category(session, category_id)
224
225 diff --git a/pym/tbc/sqlquerys.py b/pym/tbc/sqlquerys.py
226 index f9f14a2..75e3d30 100644
227 --- a/pym/tbc/sqlquerys.py
228 +++ b/pym/tbc/sqlquerys.py
229 @@ -583,3 +583,44 @@ def add_repoman_log(session, package_id, repoman_log, repoman_hash):
230 PackagesRepomanInfo.RepomanHash = repoman_hash
231 PackagesRepomanInfo.RepomanText = repoman_log
232 session.commit()
233 +
234 +def get_category_list_info(session):
235 + try:
236 + CategorysInfo = session.query(Categories).all()
237 + except NoResultFound as e:
238 + return False
239 + return CategorysInfo
240 +
241 +def get_package_list_info(session, category_id):
242 + try:
243 + PackagesInfo = session.query(Packages).filter_by(CategoryId = category_id).all()
244 + except NoResultFound as e:
245 + return False
246 + return PackagesInfo
247 +
248 +def get_ebuild_list_info(session, package_id):
249 + try:
250 + EbuildsInfo = session.query(Ebuilds).filter_by(PackageId = package_id).all()
251 + except NoResultFound as e:
252 + return False
253 + return EbuildsInfo
254 +
255 +def del_old_ebuild(session, ebuild_id):
256 + session.query(EbuildsRestrictions).filter(EbuildsRestrictions.EbuildId == ebuild_id).delete()
257 + session.query(EbuildsIUse).filter(EbuildsIUse.EbuildId == ebuild_id).delete()
258 + session.query(EbuildsKeywords).filter(EbuildsKeywords.EbuildId == ebuild_id).delete()
259 + session.query(EbuildsMetadata).filter(EbuildsMetadata.EbuildId == ebuild_id).delete()
260 + session.query(Ebuilds).filter(Ebuilds.EbuildId == ebuild_id).delete()
261 + session.commit()
262 +
263 +def del_old_package(session, package_id):
264 + session.query(PackagesRepoman).filter(PackagesRepoman.PackageId == package_id).delete()
265 + session.query(PackagesEmails).filter(PackagesEmails.PackageId== package_id).delete()
266 + session.query(PackagesMetadata).filter(PackagesMetadata.PackageId == package_id).delete()
267 + session.query(Packages).filter(Packages.PackageId == package_id).delete()
268 + session.commit()
269 +
270 +def add_old_category(session, category_id):
271 + CategorysInfo = session.query(Categories).filter_by(CategoryId = category_id).one()
272 + CategorysInfo.Active = False
273 + session.commit()
274
275 diff --git a/sql/data_dump.sql b/sql/data_dump.sql
276 index c5e3a9c..c452356 100644
277 --- a/sql/data_dump.sql
278 +++ b/sql/data_dump.sql
279 @@ -168,8 +168,9 @@ INSERT INTO `hilight_css` (`hilight_css_id`, `hilight_css_name`, `hilight_css_co
280 --
281
282 INSERT INTO `jobs` (`job_id`, `job_type`, `status`, `user`, `config_id`, `run_config_id`, `time_stamp`) VALUES
283 -(1, 'updatedb', 'Done', 'cron', 1, 1, '2016-01-27 17:54:38'),
284 -(3, 'esync', 'Done', 'cron', 1, 1, '2016-02-13 14:35:58');
285 +(1, 'updatedb', 'Done', 'cron', 1, 1, '2016-02-20 14:13:32'),
286 +(2, 'esync', 'Done', 'cron', 1, 1, '2016-02-21 20:02:08'),
287 +(3, 'removeold_cpv', 'Done', 'cron', 1, 1, '2016-02-21 20:04:51');
288
289 --
290 -- Dumping data for table `setups`
291
292 diff --git a/sql/structure_dump.sql b/sql/structure_dump.sql
293 index 9c2f397..cf4bab7 100644
294 --- a/sql/structure_dump.sql
295 +++ b/sql/structure_dump.sql
296 @@ -3,9 +3,9 @@
297 -- http://www.phpmyadmin.net
298 --
299 -- Host: localhost
300 --- Generation Time: Jan 31, 2016 at 06:07 PM
301 +-- Generation Time: Feb 21, 2016 at 08:08 PM
302 -- Server version: 10.0.22-MariaDB-log
303 --- PHP Version: 5.6.16-pl0-gentoo
304 +-- PHP Version: 7.0.3-pl0-gentoo
305
306 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
307 SET time_zone = "+00:00";
308 @@ -31,9 +31,9 @@ BEGIN
309 DECLARE in_job_id INT;
310 SET in_config_id = (SELECT config_id
311 FROM configs WHERE default_config = True);
312 - SET in_job_id = (SELECT job_id FROM jobs
313 + SET in_job_id = (SELECT job_id FROM jobs
314 WHERE job_type = 'esync'
315 - AND config_id = in_config_id
316 + AND config_id = in_config_id
317 AND status = 'Done'
318 LIMIT 1);
319 IF in_job_id >= 1 THEN
320 @@ -43,6 +43,25 @@ BEGIN
321 END IF;
322 END$$
323
324 +CREATE DEFINER=`tbc`@`localhost` PROCEDURE `add_jobs_removeold_cpv`()
325 + MODIFIES SQL DATA
326 +BEGIN
327 + DECLARE in_config_id INT;
328 + DECLARE in_job_id INT;
329 + SET in_config_id = (SELECT config_id
330 + FROM configs WHERE default_config = True);
331 + SET in_job_id = (SELECT job_id FROM jobs
332 + WHERE job_type = 'removeold_cpv'
333 + AND config_id = in_config_id
334 + AND status = 'Done'
335 + LIMIT 1);
336 + IF in_job_id >= 1 THEN
337 + UPDATE jobs SET user = 'cron', status = 'Waiting' WHERE job_type = 'removeold_cpv';
338 + ELSE
339 + SET in_job_id = 0;
340 + END IF;
341 +END$$
342 +
343 DELIMITER ;
344
345 -- --------------------------------------------------------
346 @@ -331,7 +350,7 @@ CREATE TABLE IF NOT EXISTS `ebuilds_metadata` (
347 `id` int(11) NOT NULL,
348 `ebuild_id` int(11) NOT NULL,
349 `commit` varchar(100) NOT NULL COMMENT 'Git commit',
350 - `New` tinyint(1) NOT NULL,
351 + `new` tinyint(1) NOT NULL,
352 `descriptions` varchar(200) NOT NULL
353 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
354
355 @@ -428,7 +447,7 @@ CREATE TABLE IF NOT EXISTS `hilight_css` (
356
357 CREATE TABLE IF NOT EXISTS `jobs` (
358 `job_id` int(11) NOT NULL,
359 - `job_type` enum('esync','updatedb') NOT NULL,
360 + `job_type` enum('esync','updatedb','removeold_cpv') NOT NULL,
361 `status` enum('Runing','Done','Waiting') NOT NULL DEFAULT 'Waiting',
362 `user` varchar(20) NOT NULL,
363 `config_id` int(11) NOT NULL,
364 @@ -552,6 +571,18 @@ CREATE TABLE IF NOT EXISTS `setups` (
365 -- --------------------------------------------------------
366
367 --
368 +-- Table structure for table `tbc_config`
369 +--
370 +
371 +CREATE TABLE IF NOT EXISTS `tbc_config` (
372 +`id` int(11) NOT NULL,
373 + `webinker` varchar(100) NOT NULL,
374 + `webbug` varchar(100) NOT NULL
375 +) ENGINE=MyISAM DEFAULT CHARSET=utf8;
376 +
377 +-- --------------------------------------------------------
378 +
379 +--
380 -- Table structure for table `uses`
381 --
382
383 @@ -793,6 +824,12 @@ ALTER TABLE `setups`
384 ADD PRIMARY KEY (`setup_id`), ADD UNIQUE KEY `setup_id` (`setup_id`);
385
386 --
387 +-- Indexes for table `tbc_config`
388 +--
389 +ALTER TABLE `tbc_config`
390 + ADD PRIMARY KEY (`id`);
391 +
392 +--
393 -- Indexes for table `uses`
394 --
395 ALTER TABLE `uses`
396 @@ -993,6 +1030,11 @@ MODIFY `restriction_id` int(11) NOT NULL AUTO_INCREMENT;
397 ALTER TABLE `setups`
398 MODIFY `setup_id` int(11) NOT NULL AUTO_INCREMENT;
399 --
400 +-- AUTO_INCREMENT for table `tbc_config`
401 +--
402 +ALTER TABLE `tbc_config`
403 +MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
404 +--
405 -- AUTO_INCREMENT for table `uses`
406 --
407 ALTER TABLE `uses`
408 @@ -1001,10 +1043,14 @@ DELIMITER $$
409 --
410 -- Events
411 --
412 -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
413 +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
414 CALL add_jobs_esync();
415 END$$
416
417 +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
418 + CALL add_jobs_removeold_cpv();
419 +END$$
420 +
421 DELIMITER ;
422
423 /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;