Skip to content

Commit ba8e12d

Browse files
authored
Merge pull request #272 from salvete2022/dev_erofs
add support for tarerofs for TurboOCI
2 parents e935064 + 00fc151 commit ba8e12d

File tree

3 files changed

+37
-17
lines changed

3 files changed

+37
-17
lines changed

pkg/snapshot/overlay.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ type BootConfig struct {
8989
ExporterConfig metrics.ExporterConfig `json:"exporterConfig"`
9090
WritableLayerType string `json:"writableLayerType"` // append or sparse
9191
MirrorRegistry []Registry `json:"mirrorRegistry"`
92+
DefaultFsType string `json:"defaultFsType"`
9293
}
9394

9495
func DefaultBootConfig() *BootConfig {
@@ -104,6 +105,7 @@ func DefaultBootConfig() *BootConfig {
104105
},
105106
MirrorRegistry: nil,
106107
WritableLayerType: "append",
108+
DefaultFsType: "ext4",
107109
}
108110
}
109111

@@ -169,6 +171,7 @@ type snapshotter struct {
169171
autoRemoveDev bool
170172
writableLayerType string
171173
mirrorRegistry []Registry
174+
defaultFsType string
172175

173176
locker *locker.Locker
174177
}
@@ -220,6 +223,7 @@ func NewSnapshotter(bootConfig *BootConfig, opts ...Opt) (snapshots.Snapshotter,
220223
autoRemoveDev: bootConfig.AutoRemoveDev,
221224
writableLayerType: bootConfig.WritableLayerType,
222225
mirrorRegistry: bootConfig.MirrorRegistry,
226+
defaultFsType: bootConfig.DefaultFsType,
223227
locker: locker.New(),
224228
}, nil
225229
}
@@ -546,8 +550,8 @@ func (o *snapshotter) createMountPoint(ctx context.Context, kind snapshots.Kind,
546550
}
547551
fsType, ok := obdInfo.Labels[label.OverlayBDBlobFsType]
548552
if !ok {
549-
log.G(ctx).Warnf("cannot get fs type from label, %v, using ext4", obdInfo.Labels)
550-
fsType = "ext4"
553+
log.G(ctx).Warnf("cannot get fs type from label, %v, using %s", obdInfo.Labels, o.defaultFsType)
554+
fsType = o.defaultFsType
551555
}
552556
log.G(ctx).Debugf("attachAndMountBlockDevice (obdID: %s, writeType: %s, fsType %s, targetPath: %s)",
553557
obdID, writeType, fsType, o.overlaybdTargetPath(obdID))
@@ -705,7 +709,7 @@ func (o *snapshotter) Mounts(ctx context.Context, key string) (_ []mount.Mount,
705709
if parentStype == storageTypeRemoteBlock || parentStype == storageTypeLocalBlock {
706710
fsType, ok := parentInfo.Labels[label.OverlayBDBlobFsType]
707711
if !ok {
708-
fsType = "ext4"
712+
fsType = o.defaultFsType
709713
}
710714
if err := o.attachAndMountBlockDevice(ctx, parentID, RoDir, fsType, false); err != nil {
711715
return nil, errors.Wrapf(err, "failed to attach and mount for snapshot %v", key)

pkg/snapshot/storage.go

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -534,20 +534,32 @@ func (o *snapshotter) constructOverlayBDSpec(ctx context.Context, key string, wr
534534
// 1. generate tar meta for oci layer blob
535535
// 2. convert local layer.tarmeta to overlaybd
536536
// 3. create layer's config
537-
log.G(ctx).Infof("generate metadata of layer blob (sn: %s)", id)
538-
if err := utils.GenerateTarMeta(ctx, o.overlaybdOCILayerPath(id), o.overlaybdOCILayerMeta(id)); err != nil {
539-
log.G(ctx).Errorf("generate tar metadata failed. (sn: %s)", id)
540-
return err
541-
}
542-
opt := &utils.ConvertOption{
543-
TarMetaPath: o.overlaybdOCILayerMeta(id),
544-
Workdir: o.convertTempdir(id),
545-
Ext4FSMetaPath: o.magicFilePath(id), // overlaybd.commit
546-
Config: configJSON,
537+
var opt *utils.ConvertOption
538+
rootfs_type := o.defaultFsType
539+
if rootfs_type == "erofs" {
540+
opt = &utils.ConvertOption{
541+
TarMetaPath: o.overlaybdOCILayerPath(id),
542+
Workdir: o.convertTempdir(id),
543+
Ext4FSMetaPath: o.magicFilePath(id), // overlaybd.commit
544+
Config: configJSON,
545+
}
546+
} else {
547+
log.G(ctx).Infof("generate metadata of layer blob (sn: %s)", id)
548+
if err := utils.GenerateTarMeta(ctx, o.overlaybdOCILayerPath(id), o.overlaybdOCILayerMeta(id)); err != nil {
549+
log.G(ctx).Errorf("generate tar metadata failed. (sn: %s)", id)
550+
return err
551+
}
552+
553+
opt = &utils.ConvertOption{
554+
TarMetaPath: o.overlaybdOCILayerMeta(id),
555+
Workdir: o.convertTempdir(id),
556+
Ext4FSMetaPath: o.magicFilePath(id), // overlaybd.commit
557+
Config: configJSON,
558+
}
547559
}
548560
log.G(ctx).Infof("convert layer to turboOCI (sn: %s)", id)
549561

550-
if err := utils.ConvertLayer(ctx, opt); err != nil {
562+
if err := utils.ConvertLayer(ctx, opt, rootfs_type); err != nil {
551563
log.G(ctx).Error(err.Error())
552564
os.RemoveAll(opt.Workdir)
553565
os.Remove(opt.Ext4FSMetaPath)

pkg/utils/cmd.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,7 @@ func GenerateTarMeta(ctx context.Context, srcTarFile string, dstTarMeta string)
182182
}
183183

184184
// ConvertLayer produce a turbooci layer, target is path of ext4.fs.meta
185-
func ConvertLayer(ctx context.Context, opt *ConvertOption) error {
185+
func ConvertLayer(ctx context.Context, opt *ConvertOption, fs_type string) error {
186186
if opt.Workdir == "" {
187187
opt.Workdir = "tmp_conv"
188188
}
@@ -199,7 +199,7 @@ func ConvertLayer(ctx context.Context, opt *ConvertOption) error {
199199

200200
// overlaybd-create
201201
args := []string{pathWritableData, pathWritableIndex, "256", "-s", "--turboOCI"}
202-
if len(opt.Config.Lowers) == 0 {
202+
if fs_type != "erofs" && len(opt.Config.Lowers) == 0 {
203203
args = append(args, "--mkfs")
204204
}
205205
if out, err := exec.CommandContext(ctx, obdBinCreate, args...).CombinedOutput(); err != nil {
@@ -231,9 +231,13 @@ func ConvertLayer(ctx context.Context, opt *ConvertOption) error {
231231
}
232232
args = []string{
233233
opt.TarMetaPath, pathConfig,
234-
"--import",
235234
"--service_config_path", pathService,
235+
"--fstype", fs_type,
236236
}
237+
if fs_type != "erofs" {
238+
args = append(args, "--import")
239+
}
240+
237241
log.G(ctx).Debugf("%s %s", obdBinTurboOCIApply, strings.Join(args, " "))
238242
if out, err := exec.CommandContext(ctx, obdBinTurboOCIApply,
239243
args...,

0 commit comments

Comments
 (0)