Class: OsCtld::Lxcfs::Worker
- Inherits:
-
Object
- Object
- OsCtld::Lxcfs::Worker
show all
- Extended by:
- Forwardable
- Includes:
- OsCtld::Lockable
- Defined in:
- lib/osctld/lxcfs/worker.rb
Overview
Encapsulates one Server, which can be used by one or more containers
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
#exclusively, included, #inclusively, #init_lock, #lock, #unlock
Constructor Details
#initialize(name, max_size: nil, cpu_package: nil, loadavg: true, cfs: true, enabled: true) ⇒ Worker
Returns a new instance of Worker.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# File 'lib/osctld/lxcfs/worker.rb', line 65
def initialize(name, max_size: nil, cpu_package: nil, loadavg: true, cfs: true, enabled: true)
init_lock
@name = name
@max_size = max_size || Daemon.get.config.lxcfs.max_worker_size
@cpu_package = cpu_package
@lxcfs = Lxcfs::Server.new(
name,
cpuset: cpu_package && CpuScheduler.topology.packages[cpu_package].cpus.keys.join(','),
loadavg: loadavg,
cfs: cfs,
)
@enabled = enabled
@size = 0
@last_used = nil
end
|
Instance Attribute Details
#cpu_package ⇒ Integer?
16
17
18
|
# File 'lib/osctld/lxcfs/worker.rb', line 16
def cpu_package
@cpu_package
end
|
#enabled ⇒ Boolean
Also known as:
enabled?
25
26
27
|
# File 'lib/osctld/lxcfs/worker.rb', line 25
def enabled
@enabled
end
|
#last_used ⇒ Time?
29
30
31
|
# File 'lib/osctld/lxcfs/worker.rb', line 29
def last_used
@last_used
end
|
#lxcfs ⇒ Object
Returns the value of attribute lxcfs.
192
193
194
|
# File 'lib/osctld/lxcfs/worker.rb', line 192
def lxcfs
@lxcfs
end
|
#max_size ⇒ Integer
13
14
15
|
# File 'lib/osctld/lxcfs/worker.rb', line 13
def max_size
@max_size
end
|
#name ⇒ String
10
11
12
|
# File 'lib/osctld/lxcfs/worker.rb', line 10
def name
@name
end
|
#size ⇒ Integer
19
20
21
|
# File 'lib/osctld/lxcfs/worker.rb', line 19
def size
@size
end
|
Class Method Details
48
49
50
51
52
53
54
55
56
57
|
# File 'lib/osctld/lxcfs/worker.rb', line 48
def self.load(cfg)
new(
cfg['name'],
enabled: cfg['enabled'],
max_size: cfg['max_size'],
cpu_package: cfg['cpu_package'],
loadavg: cfg['loadavg'],
cfs: cfg['cfs'],
)
end
|
.new_for_ctrc(name, ctrc) ⇒ Lxcfs::Worker
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/osctld/lxcfs/worker.rb', line 36
def self.new_for_ctrc(name, ctrc)
lxcfs = ctrc.ct.lxcfs
new(
name,
cpu_package: ctrc.cpu_package,
loadavg: lxcfs.loadavg,
cfs: lxcfs.cfs,
)
end
|
Instance Method Details
#add_user ⇒ Object
136
137
138
139
140
141
|
# File 'lib/osctld/lxcfs/worker.rb', line 136
def add_user
exclusively do
@size += 1
@last_used = nil
end
end
|
#adjust_legacy_worker ⇒ Object
186
187
188
189
|
# File 'lib/osctld/lxcfs/worker.rb', line 186
def adjust_legacy_worker
File.chmod(0555, lxcfs.mountroot)
File.chown(0, 0, lxcfs.mountroot)
end
|
#assets(add) ⇒ Object
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
|
# File 'lib/osctld/lxcfs/worker.rb', line 81
def assets(add)
add.directory(
lxcfs.mountroot,
desc: 'LXCFS directory',
user: 0,
group: 0,
mode: 0555,
optional: true,
)
add.directory(
lxcfs.mountpoint,
desc: 'LXCFS mountpoint',
user: 0,
group: 0,
mode: 0755,
optional: true,
)
end
|
#can_handle_ctrc?(ctrc, check_size: true) ⇒ Boolean
118
119
120
121
122
123
124
125
126
|
# File 'lib/osctld/lxcfs/worker.rb', line 118
def can_handle_ctrc?(ctrc, check_size: true)
inclusively do
enabled \
&& (!check_size || size < max_size) \
&& (ctrc.cpu_package.nil? || ctrc.cpu_package == cpu_package) \
&& ctrc.ct.lxcfs.loadavg == loadavg \
&& ctrc.ct.lxcfs.cfs == cfs
end
end
|
#destroy ⇒ Object
112
113
114
|
# File 'lib/osctld/lxcfs/worker.rb', line 112
def destroy
lxcfs.ensure_destroy
end
|
#disable ⇒ Object
132
133
134
|
# File 'lib/osctld/lxcfs/worker.rb', line 132
def disable
exclusively { @enabled = false }
end
|
#dump ⇒ Object
173
174
175
176
177
178
179
180
181
182
183
184
|
# File 'lib/osctld/lxcfs/worker.rb', line 173
def dump
inclusively do
{
'name' => name,
'enabled' => enabled,
'max_size' => max_size,
'cpu_package' => cpu_package,
'loadavg' => loadavg,
'cfs' => cfs,
}
end
end
|
#enable ⇒ Object
128
129
130
|
# File 'lib/osctld/lxcfs/worker.rb', line 128
def enable
exclusively { @enabled = true }
end
|
#export ⇒ Object
158
159
160
161
162
163
164
165
166
167
168
169
170
171
|
# File 'lib/osctld/lxcfs/worker.rb', line 158
def export
inclusively do
{
name: name,
enabled: enabled,
size: size,
max_size: max_size,
cpu_package: cpu_package,
loadavg: loadavg,
cfs: cfs,
mountpoint: lxcfs.mountpoint,
}
end
end
|
#has_users? ⇒ Boolean
150
151
152
|
# File 'lib/osctld/lxcfs/worker.rb', line 150
def has_users?
exclusively { @size > 0 }
end
|
#remove_user ⇒ Object
143
144
145
146
147
148
|
# File 'lib/osctld/lxcfs/worker.rb', line 143
def remove_user
exclusively do
@size -= 1 if @size > 0
@last_used = Time.now if @size <= 0
end
end
|
#setup ⇒ Object
100
101
102
|
# File 'lib/osctld/lxcfs/worker.rb', line 100
def setup
lxcfs.reconfigure
end
|
#start ⇒ Object
104
105
106
|
# File 'lib/osctld/lxcfs/worker.rb', line 104
def start
lxcfs.ensure_start
end
|
#unused? ⇒ Boolean
154
155
156
|
# File 'lib/osctld/lxcfs/worker.rb', line 154
def unused?
!has_users?
end
|
#wait ⇒ Object
108
109
110
|
# File 'lib/osctld/lxcfs/worker.rb', line 108
def wait
lxcfs.wait(timeout: 60)
end
|