Skip to content

Commit

Permalink
nydus-image: simplify ArtifactWriter::new() to remove the fifo arg
Browse files Browse the repository at this point in the history
Simplify ArtifactWriter::new() to remove the argument `fifo`. We can
detect whether a file is a FIFO or not, so need to pass flag for it.

Signed-off-by: Jiang Liu <gerry@linux.alibaba.com>
  • Loading branch information
jiangliu committed Mar 4, 2023
1 parent 04e4349 commit dd68b19
Show file tree
Hide file tree
Showing 7 changed files with 24 additions and 25 deletions.
4 changes: 2 additions & 2 deletions src/bin/nydus-image/builder/directory.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,10 @@ impl Builder for DirectoryBuilder {
bootstrap_mgr: &mut BootstrapManager,
blob_mgr: &mut BlobManager,
) -> Result<BuildOutput> {
let mut bootstrap_ctx = bootstrap_mgr.create_ctx(ctx.blob_inline_meta)?;
let mut bootstrap_ctx = bootstrap_mgr.create_ctx()?;
let layer_idx = u16::from(bootstrap_ctx.layered);
let mut blob_writer = if let Some(blob_stor) = ctx.blob_storage.clone() {
ArtifactWriter::new(blob_stor, ctx.blob_inline_meta)?
ArtifactWriter::new(blob_stor)?
} else {
return Err(anyhow!(
"target blob path should always be valid for directory builder"
Expand Down
4 changes: 2 additions & 2 deletions src/bin/nydus-image/builder/stargz.rs
Original file line number Diff line number Diff line change
Expand Up @@ -811,10 +811,10 @@ impl Builder for StargzBuilder {
bootstrap_mgr: &mut BootstrapManager,
blob_mgr: &mut BlobManager,
) -> Result<BuildOutput> {
let mut bootstrap_ctx = bootstrap_mgr.create_ctx(ctx.blob_inline_meta)?;
let mut bootstrap_ctx = bootstrap_mgr.create_ctx()?;
let layer_idx = u16::from(bootstrap_ctx.layered);
let mut blob_writer = if let Some(blob_stor) = ctx.blob_storage.clone() {
Some(ArtifactWriter::new(blob_stor, ctx.blob_inline_meta)?)
Some(ArtifactWriter::new(blob_stor)?)
} else {
return Err(anyhow!("missing configuration for target path"));
};
Expand Down
4 changes: 2 additions & 2 deletions src/bin/nydus-image/builder/tarball.rs
Original file line number Diff line number Diff line change
Expand Up @@ -549,7 +549,7 @@ impl Builder for TarballBuilder {
bootstrap_mgr: &mut BootstrapManager,
blob_mgr: &mut BlobManager,
) -> Result<BuildOutput> {
let mut bootstrap_ctx = bootstrap_mgr.create_ctx(ctx.blob_inline_meta)?;
let mut bootstrap_ctx = bootstrap_mgr.create_ctx()?;
let layer_idx = u16::from(bootstrap_ctx.layered);
let mut blob_writer = match self.ty {
ConversionType::EStargzToRafs
Expand All @@ -558,7 +558,7 @@ impl Builder for TarballBuilder {
| ConversionType::EStargzToRef
| ConversionType::TargzToRef => {
if let Some(blob_stor) = ctx.blob_storage.clone() {
ArtifactWriter::new(blob_stor, ctx.blob_inline_meta)?
ArtifactWriter::new(blob_stor)?
} else {
return Err(anyhow!("missing configuration for target path"));
}
Expand Down
4 changes: 2 additions & 2 deletions src/bin/nydus-image/core/blob_compact.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ impl ChunkSet {
aligned_chunk: bool,
backend: &Arc<dyn BlobBackend + Send + Sync>,
) -> Result<Vec<(ChunkWrapper, ChunkWrapper)>> {
let mut blob_writer = ArtifactWriter::new(blob_storage, build_ctx.blob_inline_meta)?;
let mut blob_writer = ArtifactWriter::new(blob_storage)?;

// sort chunks first, don't break order in original blobs
let mut chunks = self.chunks.values().collect::<Vec<&ChunkWrapper>>();
Expand Down Expand Up @@ -578,7 +578,7 @@ impl BlobCompactor {
);
let mut bootstrap_mgr =
BootstrapManager::new(Some(ArtifactStorage::SingleFile(d_bootstrap)), None);
let mut bootstrap_ctx = bootstrap_mgr.create_ctx(false)?;
let mut bootstrap_ctx = bootstrap_mgr.create_ctx()?;
let mut ori_blob_mgr = BlobManager::new(rs.meta.get_digester());
ori_blob_mgr.extend_from_blob_table(&build_ctx, rs.superblock.get_blob_infos())?;
if let Some(dict) = chunk_dict {
Expand Down
29 changes: 14 additions & 15 deletions src/bin/nydus-image/core/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ use std::any::Any;
use std::borrow::Cow;
use std::collections::{HashMap, VecDeque};
use std::convert::TryFrom;
use std::fmt;
use std::fs::{remove_file, rename, File, OpenOptions};
use std::io::{BufWriter, Cursor, Read, Seek, Write};
use std::os::unix::fs::FileTypeExt;
use std::path::{Display, Path, PathBuf};
use std::str::FromStr;
use std::sync::{Arc, Mutex};
use std::{fmt, fs};

use anyhow::{Context, Error, Result};
use sha2::{Digest, Sha256};
Expand Down Expand Up @@ -245,15 +246,18 @@ impl Write for ArtifactWriter {
}

impl ArtifactWriter {
pub fn new(storage: ArtifactStorage, fifo: bool) -> Result<Self> {
pub fn new(storage: ArtifactStorage) -> Result<Self> {
match storage {
ArtifactStorage::SingleFile(ref p) => {
let mut opener = &mut OpenOptions::new();
opener = opener.write(true).create(true);
// Make it as the writer side of FIFO file, no truncate flag because it has
// been created by the reader side.
if !fifo {
opener = opener.truncate(true);
if let Ok(md) = fs::metadata(p) {
let ty = md.file_type();
// Make it as the writer side of FIFO file, no truncate flag because it has
// been created by the reader side.
if !ty.is_fifo() {
opener = opener.truncate(true);
}
}
let b = BufWriter::with_capacity(
BUF_WRITER_CAPACITY,
Expand Down Expand Up @@ -938,10 +942,9 @@ pub struct BootstrapContext {
}

impl BootstrapContext {
pub fn new(storage: Option<ArtifactStorage>, layered: bool, fifo: bool) -> Result<Self> {
pub fn new(storage: Option<ArtifactStorage>, layered: bool) -> Result<Self> {
let writer = if let Some(storage) = storage {
Box::new(ArtifactFileWriter(ArtifactWriter::new(storage, fifo)?))
as Box<dyn RafsIoWrite>
Box::new(ArtifactFileWriter(ArtifactWriter::new(storage)?)) as Box<dyn RafsIoWrite>
} else {
Box::<ArtifactMemoryWriter>::default() as Box<dyn RafsIoWrite>
};
Expand Down Expand Up @@ -1013,12 +1016,8 @@ impl BootstrapManager {
}
}

pub fn create_ctx(&self, fifo: bool) -> Result<BootstrapContext> {
BootstrapContext::new(
self.bootstrap_storage.clone(),
self.f_parent_path.is_some(),
fifo,
)
pub fn create_ctx(&self) -> Result<BootstrapContext> {
BootstrapContext::new(self.bootstrap_storage.clone(), self.f_parent_path.is_some())
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/bin/nydus-image/core/node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1469,7 +1469,7 @@ mod tests {

let bootstrap_path = TempFile::new().unwrap();
let storage = ArtifactStorage::SingleFile(bootstrap_path.as_path().to_path_buf());
let mut bootstrap_ctx = BootstrapContext::new(Some(storage), false, false).unwrap();
let mut bootstrap_ctx = BootstrapContext::new(Some(storage), false).unwrap();
bootstrap_ctx.offset = 0;

// reg file.
Expand Down
2 changes: 1 addition & 1 deletion src/bin/nydus-image/merge.rs
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ impl Merger {
ctx.chunk_size = chunk_size;
}

let mut bootstrap_ctx = BootstrapContext::new(Some(target.clone()), false, false)?;
let mut bootstrap_ctx = BootstrapContext::new(Some(target.clone()), false)?;
let mut bootstrap = Bootstrap::new()?;
bootstrap.build(ctx, &mut bootstrap_ctx, &mut tree)?;
let blob_table = blob_mgr.to_blob_table(ctx)?;
Expand Down

0 comments on commit dd68b19

Please sign in to comment.