Skip to content

Commit

Permalink
Fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
hkctkuy authored and hkctkuy committed Jan 10, 2024
1 parent 818de14 commit 3e7857d
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 21 deletions.
8 changes: 4 additions & 4 deletions casr/src/bin/casr-cluster.rs
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ fn make_clusters(

// Handle bad reports
if !badreports.is_empty() {
util::save_badreports(badreports, format!("{}/clerr", &outpath.display()))?;
util::save_reports(badreports, format!("{}/clerr", &outpath.display()))?;
}

if casreps.len() < 2 {
Expand Down Expand Up @@ -268,7 +268,7 @@ fn merge_dirs(input: &Path, output: &Path) -> Result<u64> {
///
/// * `newpath` - path to directory with new CASR reports
///
/// * `oldpath` - target directory for exiting clusters
/// * `oldpath` - target directory for existing clusters
///
/// * `jobs` - number of jobs for cluster updating process
///
Expand Down Expand Up @@ -439,7 +439,7 @@ fn update_clusters(
///
/// Number of moved to old clusters CASR reports
/// Number of removed by crashline deduplication CASR reports
pub fn merge_clusters(
fn merge_clusters(
olds: HashMap<usize, Cluster>,
news: &mut HashMap<usize, Cluster>,
dir: &Path,
Expand All @@ -458,7 +458,7 @@ pub fn merge_clusters(
continue;
}
// Copy casreps from new to old
for (casrep, stacktrace, crashline) in new.reports() {
for (casrep, (stacktrace, crashline)) in new.reports() {
// Update cluster (and dedup crashline)
if !old.insert(
casrep.to_path_buf(),
Expand Down
8 changes: 4 additions & 4 deletions casr/src/util.rs
Original file line number Diff line number Diff line change
Expand Up @@ -537,18 +537,18 @@ pub fn save_clusters(clusters: &HashMap<usize, Cluster>, dir: &Path) -> Result<(
Ok(())
}

/// Save invalid CASR reports to given directory
/// Save CASR reports to given directory
///
/// # Arguments
///
/// * `badreports` - A vector of invalid CASR reports
/// * `reports` - A vector of CASR reports
///
/// * `dir` - out directory
pub fn save_badreports(badreports: Vec<PathBuf>, dir: String) -> Result<()> {
pub fn save_reports(reports: Vec<PathBuf>, dir: String) -> Result<()> {
if !Path::new(&dir).exists() {
fs::create_dir_all(&dir)?;
}
for report in badreports {
for report in reports {
fs::copy(
&report,
format!("{}/{}", dir, &report.file_name().unwrap().to_str().unwrap()),
Expand Down
6 changes: 6 additions & 0 deletions docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,12 @@ If there are several `Inner` or `Outer` clusters for the report we choose the

N.B. `Delta` strategy is a nonsensical strategy in `Inner` case

Example:

$ casr-cluster -c casr/tests/casr_tests/casrep/test_clustering_small out
$ rm -f out/cl9/40.casrep out/cl7/20.casrep && rm -rf out/cl8 && mv out/cl9 out/cl8
$ casr-cluster -u casr/tests/casr_tests/casrep/test_clustering_small out

## casr-cli

App provides text-based user interface to view CASR reports, prints joint statistics for
Expand Down
21 changes: 8 additions & 13 deletions libcasr/src/stacktrace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ impl Cluster {
crashlines: Vec<String>,
) -> Self {
let mut unique_crashlines: HashMap<String, usize> = HashMap::new();
for (i, crashline) in crashlines.iter().enumerate() {
unique_crashlines.insert(crashline.clone(), i);
for (i, crashline) in crashlines.into_iter().enumerate() {
unique_crashlines.insert(crashline, i);
}
Cluster {
number,
Expand Down Expand Up @@ -146,8 +146,7 @@ impl Cluster {
self.paths.push(path);
self.stacktraces.push(stacktrace);
self.diam = None;
self.crashlines
.insert(crashline.to_string(), self.paths.len() - 1);
self.crashlines.insert(crashline, self.paths.len() - 1);
true
}
/// Get cluster diameter
Expand Down Expand Up @@ -218,11 +217,11 @@ impl Cluster {
stacktraces1.append(&mut stacktraces2);
diam(&stacktraces1) < THRESHOLD
}
/// Convert cluster to iterator
pub fn reports(&self) -> Vec<(PathBuf, Stacktrace, String)> {
let mut reports: Vec<(PathBuf, Stacktrace, String)> = Vec::new();
/// Convert cluster to vector of reports
pub fn reports(&self) -> Vec<ReportInfo> {
let mut reports: Vec<ReportInfo> = Vec::new();
let mut crashlines = self.crashlines.clone();
for i in 0..self.paths.len() {
for (i, path) in self.paths.iter().enumerate() {
// Get crashline for cur casrep
let mut crashline = String::new();
for (line, &number) in &crashlines {
Expand All @@ -234,11 +233,7 @@ impl Cluster {
// Drop cur crashline from crashlines
crashlines.remove(&crashline);
// Update results
reports.push((
self.paths[i].clone(),
self.stacktraces[i].clone(),
crashline,
));
reports.push((path.clone(), (self.stacktraces[i].clone(), crashline)));
}
reports
}
Expand Down

0 comments on commit 3e7857d

Please sign in to comment.