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
parent
8b3365a249
commit
52e65dbe0d
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
Loading…
Reference in New Issue