Skip to content
This repository was archived by the owner on Mar 30, 2023. It is now read-only.

Commit fa884b3

Browse files
authored
Merge pull request #36 from RSE-Cambridge/mgt
Use nvme0 by offloading lustre mgt to sdb
2 parents 6dc9ee1 + 29fd3ee commit fa884b3

17 files changed

Lines changed: 302 additions & 61 deletions

File tree

dac-ansible/roles/data-acc/tasks/systemd.yml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
- "{{data_acc_data_dir}}/fake_nvme2"
9393
- "{{data_acc_data_dir}}/fake_nvme3"
9494
- "{{data_acc_data_dir}}/fake_nvme4"
95+
- "{{data_acc_data_dir}}/fake_sdb"
9596

9697
- name: create loopback
9798
become: yes
@@ -110,6 +111,8 @@
110111
file: "{{data_acc_data_dir}}/fake_nvme3"
111112
- loop: 4
112113
file: "{{data_acc_data_dir}}/fake_nvme4"
114+
- loop: 5
115+
file: "{{data_acc_data_dir}}/fake_sdb"
113116

114117
- name: create nvme symlinks
115118
become: yes
@@ -130,6 +133,14 @@
130133
- loop: 4
131134
file: "{{data_acc_data_dir}}/fake_nvme4"
132135

136+
- name: create nvme symlinks
137+
become: yes
138+
become_user: root
139+
file:
140+
src: "/dev/loop5"
141+
dest: "/dev/sdb"
142+
state: link
143+
133144
- name: launching data_acc...
134145
when: data_acc_launch
135146
become: yes

dac-ansible/roles/data-acc/templates/dacd.conf.j2

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,10 @@ ETCDCTL_CERT_FILE=/etc/data-acc/pki/{{ inventory_hostname }}.pem
55
ETCDCTL_KEY_FILE=/etc/data-acc/pki/{{ inventory_hostname }}-key.pem
66
ETCDCTL_CA_FILE=/etc/data-acc/pki/ca.pem
77
DAC_ANSIBLE_DIR={{data_acc_install_dir}}/{{data_acc_name}}/fs-ansible/
8+
#DAC_SKIP_ANSIBLE=True
9+
DAC_HOST_GROUP=dac-fake
810
DEVICE_COUNT=5
11+
DAC_POOL_NAME=default
12+
DAC_DEVICE_CAPACITY_GB=1600
13+
DACCTL_LOG=/var/log/dacctl.log
14+
#DAC_LNET_SUFFIX="-opa@o2ib1"

fs-ansible/roles/lustre/tasks/format.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@
2323
tags: [ 'never', 'reformat_mgs']
2424

2525
- name: Reformat MDT
26-
command: /usr/sbin/mkfs.lustre --mdt --reformat --fsname={{ fs_name }} --index=0 --mgsnode={{ mgsnode }} /dev/{{ mdt }}
26+
command: "/usr/sbin/mkfs.lustre --mdt --reformat --fsname={{ fs_name }} --index=0 --mgsnode={{ mgsnode }}{{ lnet_suffix }} /dev/{{ mdt }}"
2727
when:
2828
- mdt is defined
2929
tags: [ 'never', 'reformat_mdts', 'format']
3030

3131
- name: Reformat OSTs
32-
command: /usr/sbin/mkfs.lustre --ost --reformat --fsname={{ fs_name }} --index={{ item.value }} --mgsnode={{ mgsnode }} /dev/{{ item.key }}
32+
command: "/usr/sbin/mkfs.lustre --ost --reformat --fsname={{ fs_name }} --index={{ item.value }} --mgsnode={{ mgsnode }}{{ lnet_suffix }} /dev/{{ item.key }}"
3333
loop: "{{ osts|dict2items }}"
3434
when:
3535
- osts is defined

fs-ansible/roles/lustre/tasks/mount.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@
7777
state: directory
7878
recurse: yes
7979
- name: mount lustre fs
80-
command: "mount -t lustre {{ mgsnode }}:/{{ fs_name }} /mnt/lustre/{{ fs_name }}"
80+
command: "mount -t lustre {{ mgsnode }}{{ lnet_suffix }}:/{{ fs_name }} /mnt/lustre/{{ fs_name }}"
8181
register: command_result
8282
failed_when: "command_result.rc != 0 and ('is already mounted' not in command_result.stderr)"
8383
changed_when: "command_result.rc == 0"

fs-ansible/test-inventory-lustre

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dac-fake:
1111
vars:
1212
fs1_mgsnode: dac1
1313
fs1_client_port: 1001
14+
lnet_suffix: ""
1415
fs2:
1516
hosts:
1617
dac1:
@@ -22,3 +23,4 @@ dac-fake:
2223
vars:
2324
fs2_mgsnode: dac1
2425
fs2_client_port: 1002
26+
lnet_suffix: ""

internal/pkg/dacctl/actions/actions_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -167,9 +167,9 @@ func TestDacctlActions_CreatePerJobBuffer(t *testing.T) {
167167
Owner: 1001,
168168
CreatedAt: uint(time.Now().Unix()),
169169
Paths: map[string]string{
170-
"DW_PERSISTENT_STRIPED_mybuffer": "/dac/token/persistent/mybuffer",
171-
"DW_JOB_PRIVATE": "/dac/token/job_private",
172-
"DW_JOB_STRIPED": "/dac/token/job/global",
170+
"DW_PERSISTENT_STRIPED_mybuffer": "/dac/token_persistent_mybuffer",
171+
"DW_JOB_PRIVATE": "/dac/token_job_private",
172+
"DW_JOB_STRIPED": "/dac/token_job/global",
173173
},
174174
JobVolume: registry.VolumeName("token"),
175175
MultiJobVolumes: []registry.VolumeName{"mybuffer"},

internal/pkg/dacctl/buffer.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,15 @@ func setPaths(perJobVolume *registry.Volume, job registry.Job) map[string]string
108108
paths := make(map[string]string)
109109
if perJobVolume != nil {
110110
if perJobVolume.AttachPrivateNamespace {
111-
paths["DW_JOB_PRIVATE"] = fmt.Sprintf("/dac/%s/job_private", job.Name)
111+
paths["DW_JOB_PRIVATE"] = fmt.Sprintf("/dac/%s_job_private", job.Name)
112112
}
113113
if perJobVolume.AttachGlobalNamespace {
114-
paths["DW_JOB_STRIPED"] = fmt.Sprintf("/dac/%s/job/global", job.Name)
114+
paths["DW_JOB_STRIPED"] = fmt.Sprintf("/dac/%s_job/global", job.Name)
115115
}
116116
}
117117
for _, multiJobVolume := range job.MultiJobVolumes {
118118
paths[fmt.Sprintf("DW_PERSISTENT_STRIPED_%s", multiJobVolume)] = fmt.Sprintf(
119-
"/dac/%s/persistent/%s", job.Name, multiJobVolume)
119+
"/dac/%s_persistent_%s", job.Name, multiJobVolume)
120120
}
121121
return paths
122122
}

internal/pkg/dacctl/buffer_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,15 +52,15 @@ func TestSetPaths(t *testing.T) {
5252

5353
assert.Equal(t, 4, len(paths))
5454
assert.Equal(t,
55-
"/dac/job1/job_private",
55+
"/dac/job1_job_private",
5656
paths["DW_JOB_PRIVATE"])
5757
assert.Equal(t,
58-
"/dac/job1/job/global",
58+
"/dac/job1_job/global",
5959
paths["DW_JOB_STRIPED"])
6060
assert.Equal(t,
61-
"/dac/job1/persistent/multi1",
61+
"/dac/job1_persistent_multi1",
6262
paths["DW_PERSISTENT_STRIPED_multi1"])
6363
assert.Equal(t,
64-
"/dac/job1/persistent/multi2",
64+
"/dac/job1_persistent_multi2",
6565
paths["DW_PERSISTENT_STRIPED_multi2"])
6666
}

internal/pkg/dacctl/persistent.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@ func getPoolAndBrickCount(poolRegistry registry.PoolRegistry, capacity string) (
7373
}
7474

7575
bricksRequired = uint(math.Ceil(float64(capacityGB) / float64(pool.GranularityGB)))
76-
// Add one more for the metadata... TODO: lustre specific?
77-
if bricksRequired != 0 {
76+
// Add one more for the metadata, but only if request only one brick... TODO: lustre specific?
77+
if bricksRequired == 1 {
7878
bricksRequired += 1
7979
}
8080
return

internal/pkg/lifecycle/brickmanager/manager.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package brickmanager
22

33
import (
44
"fmt"
5-
"github.com/RSE-Cambridge/data-acc/internal/pkg/pfsprovider/ansible"
65
"github.com/RSE-Cambridge/data-acc/internal/pkg/registry"
76
"log"
87
"os"
@@ -65,10 +64,6 @@ func getDevices(devicesStr string) []string {
6564

6665
var bricks []string
6766
for i := 0; i < count; i++ {
68-
if i == 0 && FSType == ansible.Lustre {
69-
// TODO: we should use another disk for MGS
70-
continue
71-
}
7267
device := fmt.Sprintf(DefaultDeviceAddress, i)
7368
bricks = append(bricks, device)
7469
}
@@ -100,7 +95,7 @@ func updateBricks(poolRegistry registry.PoolRegistry, hostname string) {
10095
devicesStr := os.Getenv("DEVICE_COUNT")
10196
devices := getDevices(devicesStr)
10297

103-
capacityStr := os.Getenv("DAC_DEVICE_COUNT")
98+
capacityStr := os.Getenv("DAC_DEVICE_CAPACITY_GB")
10499
poolName := os.Getenv("DAC_POOL_NAME")
105100
bricks := getBricks(devices, hostname, capacityStr, poolName)
106101

0 commit comments

Comments
 (0)