Store loom name in metadata instead of path

This commit is contained in:
Rodrigo Arias 2024-09-10 09:33:32 +02:00
parent 3751f3ac64
commit 4ec966cb67
5 changed files with 29 additions and 24 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (c) 2021-2023 Barcelona Supercomputing Center (BSC)
/* Copyright (c) 2021-2024 Barcelona Supercomputing Center (BSC)
* SPDX-License-Identifier: GPL-3.0-or-later */
#include "loom.h"
@ -8,15 +8,13 @@
#include "cpu.h"
#include "path.h"
#include "proc.h"
#include "stream.h"
#include "uthash.h"
static const char *loom_prefix = "loom.";
static void
set_hostname(char host[PATH_MAX], const char name[PATH_MAX])
{
/* Skip prefix */
const char *start = name + strlen(loom_prefix);
const char *start = name;
/* Copy until dot or end */
int i;
@ -30,10 +28,19 @@ set_hostname(char host[PATH_MAX], const char name[PATH_MAX])
host[i] = '\0';
}
int
loom_matches(const char *path)
const char *
loom_name(struct stream *s)
{
return path_has_prefix(path, loom_prefix);
JSON_Object *meta = stream_metadata(s);
const char *loom = json_object_dotget_string(meta, "ovni.loom");
if (loom == NULL) {
err("cannot get attribute ovni.loom for stream: %s",
s->relpath);
return NULL;
}
return loom;
}
int
@ -41,11 +48,6 @@ loom_init_begin(struct loom *loom, const char *name)
{
memset(loom, 0, sizeof(struct loom));
if (!path_has_prefix(name, loom_prefix)) {
err("loom name must start with '%s': %s", loom_prefix, name);
return -1;
}
if (strchr(name, '/') != NULL) {
err("loom name cannot contain '/': %s", name);
return -1;

View File

@ -12,6 +12,7 @@
#include "cpu.h"
#include "extend.h"
struct proc;
struct stream;
struct loom {
int64_t gindex;
@ -50,7 +51,7 @@ struct loom {
struct extend ext;
};
USE_RET int loom_matches(const char *relpath);
USE_RET const char *loom_name(struct stream *s);
USE_RET int loom_init_begin(struct loom *loom, const char *name);
USE_RET int loom_init_end(struct loom *loom);
USE_RET int loom_add_cpu(struct loom *loom, struct cpu *cpu);

View File

@ -194,9 +194,13 @@ stream_data_get(struct stream *stream)
return stream->data;
}
/* Is never NULL */
JSON_Object *
stream_metadata(struct stream *stream)
{
if (stream->meta == NULL)
die("stream metadata is NULL: %s", stream->relpath);
return stream->meta;
}

View File

@ -131,16 +131,11 @@ find_loom(struct system *sys, const char *id)
}
static struct loom *
create_loom(struct system *sys, const char *relpath)
create_loom(struct system *sys, struct stream *s)
{
char name[PATH_MAX];
if (snprintf(name, PATH_MAX, "%s", relpath) >= PATH_MAX) {
err("path too long: %s", relpath);
return NULL;
}
if (strtok(name, "/") == NULL) {
err("cannot find first '/': %s", relpath);
const char *name = loom_name(s);
if (name == NULL) {
err("loom_name failed");
return NULL;
}
@ -268,7 +263,7 @@ create_system(struct system *sys, struct trace *trace)
continue;
}
struct loom *loom = create_loom(sys, s->relpath);
struct loom *loom = create_loom(sys, s);
if (loom == NULL) {
err("create_loom failed");
return -1;

View File

@ -556,6 +556,9 @@ thread_metadata_populate(void)
if (json_object_dotset_number(meta, "ovni.pid", (double) rproc.pid) != 0)
die("json_object_dotset_number failed");
if (json_object_dotset_string(meta, "ovni.loom", rproc.loom) != 0)
die("json_object_dotset_string failed");
}
static void