---
# System prepended metadata

title: MetaLad Hackathon

---

# MetaLad Hackathon

## Computing playground:

(For those with a ``juseles``account)
```
ssh -J <user>@juseless.inm7.de <user>@lad1 
cd /playground
```

## Initial demo by Christian (9.30AM-11AM CET)
```
# create a nested dataset structure
datalad create ds1 && cd ds1
echo '"3456"' > x.txt
echo '"xxxxxx"' > f1.txt
datalad create -d . sub1
echo '"1234567"' > sub1/x.txt
datalad create -d . sub2
echo '"1234567"' > sub2/sub2_f1.txt
datalad save -r

# extract dataset metadata
datalad meta-extract -d . metalad_core | jq

# try dump metadata, returns "NoMetadataStoreFound"
datalad meta-dump .

# add metadata by piping
datalad meta-extract -d . metalad_core | \
  datalad meta-add -
# add more metadata by another extractor
datalad meta-extract -d . metalad_example_dataset | \
  datalad meta-add -

datalad meta-dump -d .

# repeat metadata extraction with 
# metalad_example_dataset which changes the 
# metadata  as it contains a timestamp
datalad meta-extract -d . metalad_example_dataset | \
  datalad meta-add -
  
# add single file metadata
datalad meta-extract -d . metalad_core x.txt | datalad meta-add -

# there are no stores in subdatasets
cd sub1
datalad meta-dump .

# add metadata to subdataset
datalad meta-extract -d . metalad_core x.txt | datalad meta-add -
# dump the file level metadata. THIS REQUIRES -r! (otherwise it would return dataset metadata, of which the subds has none)
datalad meta-dump  . -r
# or datalad meta-dump '.:x.txt'

# aggregate subds metadata into the super
cd ..
datalad meta-aggregate sub1
datalad meta-dump -r

# one can automate the subds extraction and superds aggregation with meta-conduct
datalad meta-conduct extract_metadata --pipeline-help
# save current metadata
datalad meta-dump -r > before.json

# removing metadata (would also need a git gc)
rm -rf .git/refs/datalad

datalad meta-conduct extract_metadata traverser.top_level_dir=$(pwd) traverser.traverse_sub_datasets=True traverser.item_type=file extractor.extractor_type=file extractor.extractor_name=metalad_core adder.aggregate=True
```


# Discussions

### Topic 1: Metadata has no history - performance discussion


Metadata is stored by the following chain of properties:
``dataset-id``, ``dataset-version``, ``extractor-name``, ``extractor-versio``

If metadata is added with the exact same dataset-id, dataset-version, extractor-name, and extractor-version, the new metadata overwrites the old one.

Stephan asks whether it wouldn't be more performant to not perform meta-add when the metadata already exists (he has a usecases about the institute archive with lots of file-level metadata where meta-conduct takes days), Christian cautions that the look-up process would be a larger performance hit and suspects that the slow behavior is due to slow executor performance.

### Topic 2: the --recursive flag

- better name? 
- return file level metadata under which circumstance?
- 
## TODO

- Add to docs:
    - suggestions for improving performance when handling large amounts of metadata
    - Explain the `-r` switch and dump patterns extremely well
    - `meta-conduct`
- 
