Slack Post Template: Server Roles and Population Policy

Use this template when announcing worker behavior, permission policy, or onboarding updates.

Copy-ready Slack post

ADAMACS INFRA UPDATE (Ingest + Worker Policy)

Docs: <https://REPLACE_WITH_DOCS_URL>

Summary
- Main ingest entry point is adamacs_ingest (GUI + task insertion).
- If a *Task table exists, workers pick up these jobs automatically.
- Students can run many lightweight populations manually, but heavy/blob-writing jobs are worker-owned.

Current server roles
- MAIN_SERVER (<MAIN_SERVER_IP>): DataJoint DB host, blob host, ingest share host, CPU worker host
- GPU_SERVER (<GPU_SERVER_IP>): GPU workers + model training/evaluation host
- BACKUP_SERVER (<BACKUP_SERVER_IP>): backup host (rsync pull + borg compression)

ASCII overview
[SETUPS + ACQUISITION PCs]
        |
        v
[Consolidated session folders]
        |
        v
[MAIN_SERVER share /datajoint-data/data/<user>]
        |
        v
[adamacs_ingest GUI + batch scripts]
        |
        +--> [DataJoint DB]
        |          |
        |          +--> [MAIN_SERVER CPU workers] --> [/datajoint-db/blobs/...]
        |          |
        |          +--> [GPU_SERVER GPU workers] --> [/datajoint-db/blobs/...]
        |
        +--> [Task tables]

[Data + blobs + DB dumps] --> [BACKUP_SERVER backup pulls] --> [borg zstd,22 archives]

Closed-loop
GPU_SERVER model training/evaluation can feed stimulation candidates back to bench2p1 (MEI restimulation), and those new recordings re-enter ingest.

Worker-managed populate calls
MAIN_SERVER CPU worker:
- imaging.Processing.populate(...)
- imaging.Curation().create1_from_processing_task(...)
- imaging.MotionCorrection.populate(...)
- imaging.Segmentation.populate(...)
- imaging.MaskClassification.populate(...)
- imaging.Fluorescence.populate(...)
- imaging.Activity.populate(...)
- mocap.MocapRecordingInfo.populate(...)
- mocap.MotionCapture.populate(...)

GPU_SERVER GPU workers:
- model.RecordingInfoNew.populate(...)
- model.PoseEstimationNew.populate(...)
- denoising.Denoising.populate(...)
- activity/cascade listener deployments can run imaging.Activity.populate(...) for cascade-task queues

Typical user-run populate calls (lightweight/common)
- scan.ScanInfo.populate(...)
- behavior.TreadmillRecording.populate(...)
- behavior.HarpRecording.populate(...)
- behavior.CamSyncRecording.populate(...)

Permission note
If you see:
[Errno 13] Permission denied: /datajoint-db/blobs/.../*.saving
this usually means SQL rights are fine but Linux blob-path write rights are not.
For worker-owned paths, stage task rows and let workers finish.

Quick check example
scan_id = "<your_scan_id>"
bool(mocap.MotionCapture & f'scan_id = "{scan_id}"')

For <user> specifically: please check if mocap.MotionCapture for your scan is already populated now.

Tips

  • Replace the docs URL before posting.

  • Keep the worker list synchronized with Infrastructure -> Worker-Owned Population.

  • Keep server/IP entries synchronized with Infrastructure -> Architecture.