root / snf-pithos-backend / pithos / workers / glue.py @ 1a5d1649
History | View | Annotate | Download (4 kB)
1 | 39b8ea63 | Chrysostomos Nanakos | # -*- coding: utf-8 -
|
---|---|---|---|
2 | 39b8ea63 | Chrysostomos Nanakos | #
|
3 | 39b8ea63 | Chrysostomos Nanakos | # Copyright 2013 GRNET S.A. All rights reserved.
|
4 | 39b8ea63 | Chrysostomos Nanakos | #
|
5 | 39b8ea63 | Chrysostomos Nanakos | # Redistribution and use in source and binary forms, with or
|
6 | 39b8ea63 | Chrysostomos Nanakos | # without modification, are permitted provided that the following
|
7 | 39b8ea63 | Chrysostomos Nanakos | # conditions are met:
|
8 | 39b8ea63 | Chrysostomos Nanakos | #
|
9 | 39b8ea63 | Chrysostomos Nanakos | # 1. Redistributions of source code must retain the above
|
10 | 39b8ea63 | Chrysostomos Nanakos | # copyright notice, this list of conditions and the following
|
11 | 39b8ea63 | Chrysostomos Nanakos | # disclaimer.
|
12 | 39b8ea63 | Chrysostomos Nanakos | #
|
13 | 39b8ea63 | Chrysostomos Nanakos | # 2. Redistributions in binary form must reproduce the above
|
14 | 39b8ea63 | Chrysostomos Nanakos | # copyright notice, this list of conditions and the following
|
15 | 39b8ea63 | Chrysostomos Nanakos | # disclaimer in the documentation and/or other materials
|
16 | 39b8ea63 | Chrysostomos Nanakos | # provided with the distribution.
|
17 | 39b8ea63 | Chrysostomos Nanakos | #
|
18 | 39b8ea63 | Chrysostomos Nanakos | # THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
|
19 | 39b8ea63 | Chrysostomos Nanakos | # OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
20 | 39b8ea63 | Chrysostomos Nanakos | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
21 | 39b8ea63 | Chrysostomos Nanakos | # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
|
22 | 39b8ea63 | Chrysostomos Nanakos | # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23 | 39b8ea63 | Chrysostomos Nanakos | # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24 | 39b8ea63 | Chrysostomos Nanakos | # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
25 | 39b8ea63 | Chrysostomos Nanakos | # USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
26 | 39b8ea63 | Chrysostomos Nanakos | # AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
27 | 39b8ea63 | Chrysostomos Nanakos | # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
28 | 39b8ea63 | Chrysostomos Nanakos | # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
29 | 39b8ea63 | Chrysostomos Nanakos | # POSSIBILITY OF SUCH DAMAGE.
|
30 | 39b8ea63 | Chrysostomos Nanakos | #
|
31 | 39b8ea63 | Chrysostomos Nanakos | # The views and conclusions contained in the software and
|
32 | 39b8ea63 | Chrysostomos Nanakos | # documentation are those of the authors and should not be
|
33 | 39b8ea63 | Chrysostomos Nanakos | # interpreted as representing official policies, either expressed
|
34 | 39b8ea63 | Chrysostomos Nanakos | # or implied, of GRNET S.A.
|
35 | 39b8ea63 | Chrysostomos Nanakos | |
36 | 39b8ea63 | Chrysostomos Nanakos | import re |
37 | 39b8ea63 | Chrysostomos Nanakos | |
38 | b5636704 | Chrysostomos Nanakos | |
39 | 39b8ea63 | Chrysostomos Nanakos | class WorkerGlue(object): |
40 | 39b8ea63 | Chrysostomos Nanakos | |
41 | 39b8ea63 | Chrysostomos Nanakos | pmap = {} |
42 | 39b8ea63 | Chrysostomos Nanakos | worker_id = None
|
43 | 39b8ea63 | Chrysostomos Nanakos | ioctx_pool = None
|
44 | 1a5d1649 | Chrysostomos Nanakos | ArchipelagoConfFile = '/etc/archipelago/archipelago.conf'
|
45 | 39b8ea63 | Chrysostomos Nanakos | |
46 | 39b8ea63 | Chrysostomos Nanakos | @classmethod
|
47 | 39b8ea63 | Chrysostomos Nanakos | def setmap(cls, pid, index): |
48 | 39b8ea63 | Chrysostomos Nanakos | WorkerGlue.pmap[pid] = index |
49 | 39b8ea63 | Chrysostomos Nanakos | WorkerGlue.worker_id = index |
50 | 39b8ea63 | Chrysostomos Nanakos | |
51 | 39b8ea63 | Chrysostomos Nanakos | @classmethod
|
52 | 1a5d1649 | Chrysostomos Nanakos | def setupXsegPool(cls, ObjectPool, Segment, Xseg_ctx, |
53 | 1a5d1649 | Chrysostomos Nanakos | cfile=ArchipelagoConfFile, pool_size=8):
|
54 | 39b8ea63 | Chrysostomos Nanakos | worker_id = WorkerGlue.worker_id |
55 | 1a5d1649 | Chrysostomos Nanakos | WorkerGlue.ArchipelagoConfFile = ARCHIPELAGO_CONF_FILE = cfile |
56 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_TYPE = 'segdev'
|
57 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_NAME = 'xsegbd'
|
58 | 39b8ea63 | Chrysostomos Nanakos | cfg = {} |
59 | 39b8ea63 | Chrysostomos Nanakos | bcfg = open(ARCHIPELAGO_CONF_FILE).read()
|
60 | 39b8ea63 | Chrysostomos Nanakos | cfg['SEGMENT_PORTS'] = re.search('SEGMENT_PORTS\s*=\s*\d+', |
61 | b5636704 | Chrysostomos Nanakos | bcfg).group(0).split('=')[1] |
62 | 39b8ea63 | Chrysostomos Nanakos | cfg['SEGMENT_SIZE'] = re.search('SEGMENT_SIZE\s*=\s*\d+', |
63 | b5636704 | Chrysostomos Nanakos | bcfg).group(0).split('=')[1] |
64 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_PORTS = int(cfg['SEGMENT_PORTS']) |
65 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_SIZE = int(cfg['SEGMENT_SIZE']) |
66 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_ALIGNMENT = 12
|
67 | 39b8ea63 | Chrysostomos Nanakos | |
68 | 39b8ea63 | Chrysostomos Nanakos | class XsegPool(ObjectPool): |
69 | 39b8ea63 | Chrysostomos Nanakos | |
70 | 39b8ea63 | Chrysostomos Nanakos | def __init__(self): |
71 | 39b8ea63 | Chrysostomos Nanakos | super(XsegPool, self).__init__(size=pool_size) |
72 | 39b8ea63 | Chrysostomos Nanakos | self.segment = Segment(ARCHIPELAGO_SEGMENT_TYPE,
|
73 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_NAME, |
74 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_PORTS, |
75 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_SIZE, |
76 | 39b8ea63 | Chrysostomos Nanakos | ARCHIPELAGO_SEGMENT_ALIGNMENT) |
77 | 39b8ea63 | Chrysostomos Nanakos | self.worker_id = worker_id
|
78 | 39b8ea63 | Chrysostomos Nanakos | self.cnt = 1 |
79 | 39b8ea63 | Chrysostomos Nanakos | |
80 | 39b8ea63 | Chrysostomos Nanakos | def _pool_create(self): |
81 | 39b8ea63 | Chrysostomos Nanakos | if self.worker_id == 1: |
82 | 39b8ea63 | Chrysostomos Nanakos | ioctx = Xseg_ctx(self.segment, self.worker_id + self.cnt) |
83 | 39b8ea63 | Chrysostomos Nanakos | self.cnt += 1 |
84 | 39b8ea63 | Chrysostomos Nanakos | return ioctx
|
85 | 97c506bd | Chrysostomos Nanakos | elif self.worker_id > 1: |
86 | 39b8ea63 | Chrysostomos Nanakos | ioctx = Xseg_ctx(self.segment,
|
87 | 39b8ea63 | Chrysostomos Nanakos | (self.worker_id - 1) * pool_size + 2 + |
88 | 39b8ea63 | Chrysostomos Nanakos | self.cnt)
|
89 | 39b8ea63 | Chrysostomos Nanakos | self.cnt += 1 |
90 | 39b8ea63 | Chrysostomos Nanakos | return ioctx
|
91 | 97c506bd | Chrysostomos Nanakos | elif self.worker_id == None: |
92 | 97c506bd | Chrysostomos Nanakos | ioctx = Xseg_ctx(self.segment, 200) |
93 | 97c506bd | Chrysostomos Nanakos | return ioctx
|
94 | 39b8ea63 | Chrysostomos Nanakos | |
95 | 39b8ea63 | Chrysostomos Nanakos | def _pool_verify(self, poolobj): |
96 | 39b8ea63 | Chrysostomos Nanakos | return True |
97 | 39b8ea63 | Chrysostomos Nanakos | |
98 | 39b8ea63 | Chrysostomos Nanakos | def _pool_cleanup(self, poolobj): |
99 | 39b8ea63 | Chrysostomos Nanakos | return False |
100 | 39b8ea63 | Chrysostomos Nanakos | |
101 | 39b8ea63 | Chrysostomos Nanakos | WorkerGlue.ioctx_pool = XsegPool() |