Use `md5` hashed shm keys for macOS compat

Shorten SHM buffer key names to fit Darwin's 31
char filename limit by hashing the `fqme`/content
portion with `md5` and truncating to 8 hex chars.

Deats,
- `.fsp._api`: replace `piker.{actor}[{uuid}].{sym}`
  format with `{uuid[:8]}_{hash}.fsp`
- `.tsp._history`: add `platform.system()` check to
  conditionally shorten `.hist`/`.rt` keys on Darwin
  while keeping the full key format on Linux

(this commit msg was generated in some part by [`claude-code`][claude-code-gh])
[claude-code-gh]: https://github.com/anthropics/claude-code

NOTE that this patch was orig by @dnks and broken out from a larger
commit which added unnecessary/out-of-scope changes we didn't end up
requiring.
macos_support
Gud Boi 2026-03-11 10:42:18 -04:00
parent 8b3365a249
commit 52e65dbe0d
2 changed files with 17 additions and 5 deletions

View File

@ -200,9 +200,13 @@ def maybe_mk_fsp_shm(
)
# (attempt to) uniquely key the fsp shm buffers
# Use hash for macOS compatibility (31 char limit)
import hashlib
actor_name, uuid = tractor.current_actor().uid
uuid_snip: str = uuid[:16]
key: str = f'piker.{actor_name}[{uuid_snip}].{sym}.{target.name}'
# Create short hash of sym and target name
content = f'{sym}.{target.name}'
content_hash = hashlib.md5(content.encode()).hexdigest()[:8]
key: str = f'{uuid[:8]}_{content_hash}.fsp'
shm, opened = maybe_open_shm_array(
key,

View File

@ -32,6 +32,7 @@ from __future__ import annotations
from datetime import datetime
from functools import partial
from pathlib import Path
import platform
from pprint import pformat
from types import ModuleType
from typing import (
@ -1380,13 +1381,20 @@ async def manage_history(
service: str = name.rstrip(f'.{mod.name}')
fqme: str = mkt.get_fqme(delim_char='')
key: str = f'piker.{service}[{uuid[:16]}].{fqme}'
# use a short hash of the `fqme` to deal with macOS
# file-name-len limit..
if platform.system() == 'Darwin':
import hashlib
fqme_hash: str = hashlib.md5(fqme.encode()).hexdigest()[:8]
key: str = f'{uuid[:8]}_{fqme_hash}'
# (maybe) allocate shm array for this broker/symbol which will
# be used for fast near-term history capture and processing.
hist_shm, opened = maybe_open_shm_array(
size=_default_hist_size,
append_start_index=_hist_buffer_start,
key=f'piker.{service}[{uuid[:16]}].{fqme}.hist',
key=f'{key}.hist',
# use any broker defined ohlc dtype:
dtype=getattr(mod, '_ohlc_dtype', def_iohlcv_fields),
@ -1405,7 +1413,7 @@ async def manage_history(
rt_shm, opened = maybe_open_shm_array(
size=_default_rt_size,
append_start_index=_rt_buffer_start,
key=f'piker.{service}[{uuid[:16]}].{fqme}.rt',
key=f'{key}.rt',
# use any broker defined ohlc dtype:
dtype=getattr(mod, '_ohlc_dtype', def_iohlcv_fields),