Skip to content

Commit 2ce77c3

Browse files
author
Yutaro Iiyama
committed
purging delete_not_in
1 parent 7507f0c commit 2ce77c3

5 files changed

Lines changed: 29 additions & 35 deletions

File tree

bin/registry_users.py

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,23 +36,29 @@
3636

3737
domain_id = store.query('SELECT `id` FROM `domains` WHERE `name` = \'cern.ch\'')[0]
3838

39-
query = 'INSERT INTO `users` (`name`, `domain_id`, `email`, `dn`) VALUES (%s, ' + str(domain_id) +', %s, %s) ON DUPLICATE KEY UPDATE `email` = `email`, `dn` = `dn`'
39+
known_users = {}
40+
for name, email, dn in store.xquery('SELECT `name`, `email`, `dn` FROM `users` WHERE `domain_id` = %s', domain_id):
41+
known_users[name] = (email, dn)
4042

41-
names = []
43+
updated_users = []
4244

4345
for user_info in sitedb._make_request('people'):
4446
name = user_info[0]
4547
email = user_info[1]
4648
dn = user_info[4]
4749

48-
if dn is None:
49-
continue
50+
try:
51+
known_user = known_users.pop(name)
52+
except KeyError:
53+
updated_users.append((name, domain_id, email, dn))
54+
else:
55+
if known_user != (email, dn):
56+
updated_users.append((name, domain_id, email, dn))
5057

51-
names.append(name)
52-
53-
store.query(query, name, email, dn)
58+
store.insert_many('users', ('name', 'domain_id', 'email', 'dn'), None, updated_users, do_update = True)
5459

55-
store.delete_not_in('users', 'name', names)
60+
if len(known_users) != 0:
61+
store.delete_in('users', 'name', known_users.iterkeys())
5662

5763
elif args.command[0] == 'service':
5864
if args.command[1] == 'add':

lib/common/interface/mysql.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def xquery(self, sql, *args):
164164
cursor.close()
165165
return
166166

167-
def execute_many(self, sqlbase, key, pool, additional_conditions = [], exec_on_match = True, order_by = ''):
167+
def execute_many(self, sqlbase, key, pool, additional_conditions = [], order_by = ''):
168168
result = []
169169

170170
if type(key) is tuple:
@@ -178,10 +178,6 @@ def execute_many(self, sqlbase, key, pool, additional_conditions = [], exec_on_m
178178
for add in additional_conditions:
179179
sqlbase += add + ' AND '
180180
sqlbase += key_str
181-
if exec_on_match:
182-
sqlbase += ' IN '
183-
else:
184-
sqlbase += ' NOT IN '
185181

186182
def execute(pool_expr):
187183
sql = sqlbase + pool_expr
@@ -196,26 +192,20 @@ def execute(pool_expr):
196192

197193
return result
198194

199-
def select_many(self, table, fields, key, pool, additional_conditions = [], select_match = True, order_by = ''):
195+
def select_many(self, table, fields, key, pool, additional_conditions = [], order_by = ''):
200196
if type(fields) is str:
201197
fields_str = '`%s`' % fields
202198
else:
203199
fields_str = ','.join('`%s`' % f for f in fields)
204200

205201
sqlbase = 'SELECT {fields} FROM `{table}`'.format(fields = fields_str, table = table)
206202

207-
return self.execute_many(sqlbase, key, pool, additional_conditions, select_match, order_by = order_by)
203+
return self.execute_many(sqlbase, key, pool, additional_conditions, order_by = order_by)
208204

209-
def delete_many(self, table, key, pool, additional_conditions = [], delete_match = True):
205+
def delete_many(self, table, key, pool, additional_conditions = []):
210206
sqlbase = 'DELETE FROM `{table}`'.format(table = table)
211207

212-
self.execute_many(sqlbase, key, pool, additional_conditions, delete_match)
213-
214-
def delete_in(self, table, key, pool, additional_conditions = []):
215-
self.delete_many(table, key, pool, additional_conditions = additional_conditions, delete_match = True)
216-
217-
def delete_not_in(self, table, key, pool, additional_conditions = []):
218-
self.delete_many(table, key, pool, additional_conditions = additional_conditions, delete_match = False)
208+
self.execute_many(sqlbase, key, pool, additional_conditions)
219209

220210
def insert_many(self, table, fields, mapping, objects, do_update = True):
221211
"""

lib/common/interface/mysqlhistory.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ def _do_make_deletion_entry(self, run_number, site, operation_id, approved, data
153153

154154
site_id = self._mysql.query('SELECT `id` FROM `sites` WHERE `name` LIKE %s', site.name)[0]
155155

156-
dataset_ids = self._mysql.select_many('datasets', ('id',), 'name', [d.name for d in datasets])
156+
dataset_ids = self._mysql.select_many('datasets', ('id',), 'name', (d.name for d in datasets))
157157

158158
self._mysql.query('INSERT INTO `deletion_requests` (`id`, `run_id`, `timestamp`, `approved`, `site_id`, `size`) VALUES (%s, %s, NOW(), %s, %s, %s)', operation_id, run_number, approved, site_id, size)
159159

lib/common/interface/mysqlstore.py

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -749,22 +749,20 @@ def _do_save_datasets(self, datasets): #override
749749
# speedup - fetch all blocks and files of updated datasets
750750
# if size, num_file, or is_open of a block or a file is updated, its dataset also is
751751

752-
pool = [did for did, dataset in datasets_to_update if dataset.blocks is not None]
753-
block_entries = dict((i, []) for i in pool)
752+
block_entries = dict((i, []) for i in did for did, dataset in datasets_to_update if dataset.blocks is not None)
754753

755754
_dataset_id = 0
756-
for entry in self._mysql.select_many('blocks', ('dataset_id', 'id', 'name', 'size', 'num_files', 'is_open'), 'dataset_id', pool, order_by = '`dataset_id`'):
755+
for entry in self._mysql.select_many('blocks', ('dataset_id', 'id', 'name', 'size', 'num_files', 'is_open'), 'dataset_id', block_entries.iterkeys(), order_by = '`dataset_id`'):
757756
if entry[0] != _dataset_id:
758757
_dataset_id = entry[0]
759758
entry_list = block_entries[entry[0]] = []
760759

761760
entry_list.append(entry[1:])
762761

763-
pool = [did for did, dataset in datasets_to_update if dataset.files is not None]
764-
file_entries = dict((i, []) for i in pool)
762+
file_entries = dict((i, []) for i in did for did, dataset in datasets_to_update if dataset.files is not None)
765763

766764
_dataset_id = 0
767-
for entry in self._mysql.select_many('files', ('dataset_id', 'id', 'size', 'name'), 'dataset_id', pool, order_by = '`dataset_id`'):
765+
for entry in self._mysql.select_many('files', ('dataset_id', 'id', 'size', 'name'), 'dataset_id', file_entries.iterkeys(), order_by = '`dataset_id`'):
768766
if entry[0] != _dataset_id:
769767
_dataset_id = entry[0]
770768
entry_list = file_entries[entry[0]] = []
@@ -1153,7 +1151,7 @@ def _do_delete_datasets(self, datasets): #override
11531151
"""
11541152
Delete everything related to the datasets
11551153
"""
1156-
dataset_ids = self._mysql.select_many('datasets', 'id', 'name', [d.name for d in datasets])
1154+
dataset_ids = self._mysql.select_many('datasets', 'id', 'name', (d.name for d in datasets))
11571155

11581156
ids_str = ','.join(['%d' % i for i in dataset_ids])
11591157

@@ -1179,9 +1177,9 @@ def _do_delete_block(self, block): #override
11791177
def _do_delete_datasetreplicas(self, site, datasets, delete_blockreplicas): #override
11801178
site_id = self._mysql.query('SELECT `id` FROM `sites` WHERE `name` LIKE %s', site.name)[0]
11811179

1182-
dataset_ids = self._mysql.select_many('datasets', 'id', 'name', [d.name for d in datasets])
1180+
dataset_ids = self._mysql.select_many('datasets', 'id', 'name', (d.name for d in datasets))
11831181

1184-
self._mysql.delete_in('dataset_replicas', 'dataset_id', dataset_ids, additional_conditions = ['site_id = %d' % site_id])
1182+
self._mysql.delete_many('dataset_replicas', 'dataset_id', dataset_ids, additional_conditions = ['site_id = %d' % site_id])
11851183

11861184
if delete_blockreplicas:
11871185
ids_str = ','.join(['%d' % i for i in dataset_ids])

lib/common/interface/sitedb.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,12 +81,12 @@ def get_site_list(self, sites, filt = '*'): #override
8181

8282
sites[name] = site
8383

84-
def _make_request(self, resource):
84+
def _make_request(self, resource, options = []):
8585
"""
8686
Make a single API call to SiteDB, strip the "header" and return the body JSON.
8787
"""
8888

89-
resp = self._interface.make_request(resource)
89+
resp = self._interface.make_request(resource, options)
9090

9191
return resp['result']
9292

0 commit comments

Comments
 (0)