Class: OsCtld::Lxcfs::Worker

Inherits:
Object
  • Object
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

Methods included from OsCtld::Lockable

#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.

Parameters:

  • name (String)
  • max_size (Integer) (defaults to: nil)
  • cpu_package (Integer) (defaults to: nil)
  • loadavg (Boolean) (defaults to: true)
  • cfs (Boolean) (defaults to: true)
  • enabled (Boolean) (defaults to: true)


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_packageInteger? (readonly)

Returns:

  • (Integer, nil)


16
17
18
# File 'lib/osctld/lxcfs/worker.rb', line 16

def cpu_package
  @cpu_package
end

#enabledBoolean (readonly) Also known as: enabled?

Returns:

  • (Boolean)


25
26
27
# File 'lib/osctld/lxcfs/worker.rb', line 25

def enabled
  @enabled
end

#last_usedTime? (readonly)

Returns:

  • (Time, nil)


29
30
31
# File 'lib/osctld/lxcfs/worker.rb', line 29

def last_used
  @last_used
end

#lxcfsObject (readonly, protected)

Returns the value of attribute lxcfs.



192
193
194
# File 'lib/osctld/lxcfs/worker.rb', line 192

def lxcfs
  @lxcfs
end

#max_sizeInteger

Returns:

  • (Integer)


13
14
15
# File 'lib/osctld/lxcfs/worker.rb', line 13

def max_size
  @max_size
end

#nameString (readonly)

Returns:

  • (String)


10
11
12
# File 'lib/osctld/lxcfs/worker.rb', line 10

def name
  @name
end

#sizeInteger (readonly)

Returns:

  • (Integer)


19
20
21
# File 'lib/osctld/lxcfs/worker.rb', line 19

def size
  @size
end

Class Method Details

.load(cfg) ⇒ Lxcfs::Worker

Returns:



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

Parameters:

Returns:



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_userObject



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_workerObject



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

Parameters:

Returns:

  • (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

#destroyObject



112
113
114
# File 'lib/osctld/lxcfs/worker.rb', line 112

def destroy
  lxcfs.ensure_destroy
end

#disableObject



132
133
134
# File 'lib/osctld/lxcfs/worker.rb', line 132

def disable
  exclusively { @enabled = false }
end

#dumpObject



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

#enableObject



128
129
130
# File 'lib/osctld/lxcfs/worker.rb', line 128

def enable
  exclusively { @enabled = true }
end

#exportObject



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

Returns:

  • (Boolean)


150
151
152
# File 'lib/osctld/lxcfs/worker.rb', line 150

def has_users?
  exclusively { @size > 0 }
end

#remove_userObject



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

#setupObject



100
101
102
# File 'lib/osctld/lxcfs/worker.rb', line 100

def setup
  lxcfs.reconfigure
end

#startObject



104
105
106
# File 'lib/osctld/lxcfs/worker.rb', line 104

def start
  lxcfs.ensure_start
end

#unused?Boolean

Returns:

  • (Boolean)


154
155
156
# File 'lib/osctld/lxcfs/worker.rb', line 154

def unused?
  !has_users?
end

#waitObject



108
109
110
# File 'lib/osctld/lxcfs/worker.rb', line 108

def wait
  lxcfs.wait(timeout: 60)
end