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 */; |