shareddata 6.85.17__tar.gz → 6.85.18__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {shareddata-6.85.17/src/shareddata.egg-info → shareddata-6.85.18}/PKG-INFO +1 -1
- {shareddata-6.85.17 → shareddata-6.85.18}/setup.py +1 -1
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/MultiProc.py +3 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/WorkerLib.py +4 -4
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/SharedData.py +23 -3
- {shareddata-6.85.17 → shareddata-6.85.18/src/shareddata.egg-info}/PKG-INFO +1 -1
- {shareddata-6.85.17 → shareddata-6.85.18}/LICENSE +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/MANIFEST.in +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/README.md +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/pyproject.toml +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/setup.cfg +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/ServerGunicorn.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/ServerWaitress.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/apidocs-dark.css +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/apidocs.yml +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/auth.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/constants.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/download_paths.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/download_slots.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/install/worker.ps1 +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/install/worker.sh +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/listcache.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/cache.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/collections.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/data.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/downloads.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/metadata.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/operations.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/schedules.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/sqlite.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/system.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/tables.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/timeseries.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/web_routes.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/routes/workers.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/API/utils.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Auth/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Auth/bootstrap.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Auth/migrate.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Auth/store.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Auth/workers.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/CacheRedis.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/CollectionMongoDB.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/catalog.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/config.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/errors.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/indexes.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/readers.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/resolve.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/DataAPI/service.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Database.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Defaults.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/AWSEC2.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/AWSS3.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/AutoDocstrings.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/ClientAPI.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/ClientSocket.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/ClientWebSocket.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/LogHandlerAPI.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/LogReader.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/MongoDBClient.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/SaveTables.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/ServerSocket.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/ServerWebSocket.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/StreamsCache.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/StreamsPersist.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/SyncTable.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/TunnelWebSocket.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/IO/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Listing.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/LockWaiters.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Logger.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/MCP/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/MCP/__main__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/MCP/client.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/MCP/server.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Metadata.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/OpenFIGI.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Redaction.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/ArchiveOldCollections.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/BatchJob.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/ContainerHealth.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/JobStore.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/RoutineCommand.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/RoutineOrigin.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/Schedule.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/ScheduleMirror.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/ScheduleMonitor.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/ScheduleStore.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/Scheduler.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/UpdateActiveJobs.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/Worker.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/WorkerBootstrap.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/WorkerPool.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Routines/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/SQLite.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/SharedNumpy.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/StreamKafka.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Symbol.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Table.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableDisk.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableIndex.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableIndexJitFunctions.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableIndexJitFunctionsManual.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableIndexJitGenerate.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableIndexJitHash.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableIndexJitLoc.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableProtocol.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableRead.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TableRewrite.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TimeSeriesDisk.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/TimeseriesContainer.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Users.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Utils.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/ADDING_A_PAGE.md +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/activity_logger.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/app.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/dashAgGridComponentFunctions.js +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/dashAgGridFunctions.js +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/google_logo.png +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/kafka_keys.js +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/logs.css +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/sched.css +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/styles.css +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/auth.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/backends.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/config.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/containers.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/identity.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/kafka_view.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/mongo_view.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/proc.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/redis_view.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/route_health.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/route_registry.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/sched.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/schedule_editor.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/server.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/services.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/shell.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/standalone.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/account.js +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/custom.css +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/favicon.ico +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/favicon.png +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/logo.png +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/logo_96x96.png +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/shareddata-mark.svg +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/shell.css +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/shell.js +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/standalone.css +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/static/standalone.js +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/suggest.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/account.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/base.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/claim.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/claim_done.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/dash.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/index.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/login.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/login_2fa.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/partials/navbar.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/partials/scripts.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/recovery_codes.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/shell.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/standalone.html +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/twofactor.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/utils.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/workerpool.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/__init__.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/build_info.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/fleet.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/preflight.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/private_files.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/release_backup.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/server.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/services.py +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/sharedmutexwin.pyd +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/shareddata.egg-info/SOURCES.txt +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/shareddata.egg-info/dependency_links.txt +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/shareddata.egg-info/entry_points.txt +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/shareddata.egg-info/requires.txt +0 -0
- {shareddata-6.85.17 → shareddata-6.85.18}/src/shareddata.egg-info/top_level.txt +0 -0
|
@@ -305,6 +305,9 @@ def io_bound_unordered(thread_func, iterator, args, maxproc=None, maxthreads=1,
|
|
|
305
305
|
w.join(timeout=5) # Wait for 5 seconds for each worker to finish
|
|
306
306
|
if w.is_alive():
|
|
307
307
|
w.terminate()
|
|
308
|
+
w.join(timeout=5) # reap it: an unreaped worker stays a zombie,
|
|
309
|
+
# and a zombie holding a table semaphore is
|
|
310
|
+
# unrecoverable until this parent exits
|
|
308
311
|
|
|
309
312
|
if not input_queue.empty():
|
|
310
313
|
Logger.log.warning('Input queue not totally consumed!')
|
|
@@ -1022,16 +1022,16 @@ def _sync_audit(command, audit, state=None, state_path=None):
|
|
|
1022
1022
|
# The first healthy start after a warned/refused one says so at the same severity
|
|
1023
1023
|
# filter operators watch; it is not repeated (the stored record is then healthy).
|
|
1024
1024
|
recovered = not condition and previous.get('alert') is True
|
|
1025
|
-
|
|
1025
|
+
# A healthy pass that changed nothing is not logged at all: the central log
|
|
1026
|
+
# handler ships DEBUG, so even one record per window floods the operator's view.
|
|
1027
|
+
level = None
|
|
1026
1028
|
if condition and not repeated:
|
|
1027
1029
|
level = 'warning' if audit['outcome_class'] == 'offline' else 'error'
|
|
1028
1030
|
elif recovered:
|
|
1029
1031
|
level = 'warning'
|
|
1030
1032
|
elif audit.get('changed'):
|
|
1031
1033
|
level = 'info'
|
|
1032
|
-
if level
|
|
1033
|
-
# Identical no-op starts inside the window are one DEBUG record, not one per start:
|
|
1034
|
-
# the central log handler ships DEBUG, so demotion alone does not quiet the panel.
|
|
1034
|
+
if level:
|
|
1035
1035
|
getattr(Logger.log, level)('repo_sync %s', json.dumps(dict(
|
|
1036
1036
|
repo=command['repo'], branch=command.get('branch') or 'main',
|
|
1037
1037
|
trigger=_sync_trigger(command), **audit, **({'recovered': True} if recovered else {})),
|
|
@@ -776,14 +776,34 @@ class SharedData:
|
|
|
776
776
|
"""One monotonic deadline for both layers of a SCHEMA acquisition."""
|
|
777
777
|
return time.monotonic() + 30.0 if SharedData._is_schema_relpath(relpath) else None
|
|
778
778
|
|
|
779
|
+
@staticmethod
|
|
780
|
+
def _holder_alive(pid):
|
|
781
|
+
"""Holder liveness for the acquire() staleness recovery.
|
|
782
|
+
|
|
783
|
+
A zombie holder is dead: it exited without release() and will never
|
|
784
|
+
run again. psutil.pid_exists() alone still reports it alive (a zombie
|
|
785
|
+
keeps its pid until reaped), and the reaper is usually the parent —
|
|
786
|
+
which is itself the process stuck in acquire()'s wait loop, so the
|
|
787
|
+
pid would never disappear. Waiting on pid_exists() therefore hangs
|
|
788
|
+
forever; only treating the zombie as dead lets the waiter
|
|
789
|
+
force-reclaim the mutex. Any psutil error we cannot interpret keeps
|
|
790
|
+
the previous behavior (wait, as if alive)."""
|
|
791
|
+
try:
|
|
792
|
+
return psutil.Process(int(pid)).status() != psutil.STATUS_ZOMBIE
|
|
793
|
+
except psutil.NoSuchProcess:
|
|
794
|
+
return False
|
|
795
|
+
except psutil.Error:
|
|
796
|
+
return True
|
|
797
|
+
|
|
779
798
|
@staticmethod
|
|
780
799
|
def acquire(mutex, pid, relpath, deadline=None):
|
|
781
800
|
"""
|
|
782
801
|
Spin-CAS acquire of a per-table MUTEX's `pid` field (1us sleep loop).
|
|
783
802
|
Atomically sets `mutex.pid = pid` once it observes `mutex.pid == 0`.
|
|
784
803
|
Staleness recovery: if the current holder PID is *dead*
|
|
785
|
-
(`
|
|
786
|
-
`
|
|
804
|
+
(`_holder_alive` is False — includes zombie holders, which
|
|
805
|
+
`psutil.pid_exists` alone would keep reporting alive), force-acquires
|
|
806
|
+
by CASing `holder_pid -> pid`.
|
|
787
807
|
|
|
788
808
|
=====================================================================
|
|
789
809
|
*** NON-REENTRANT ***
|
|
@@ -862,7 +882,7 @@ class SharedData:
|
|
|
862
882
|
telapsed = time.time() - tini
|
|
863
883
|
if (telapsed > SharedData.LOCK_WAIT_REPORTED) | ((firstcheck) & (telapsed > 1)):
|
|
864
884
|
lockingpid = mutex['pid']
|
|
865
|
-
if not
|
|
885
|
+
if not SharedData._holder_alive(int(lockingpid)):
|
|
866
886
|
if cpp.long_compare_and_swap(hdrptr, semseek, lockingpid, pid) != 0:
|
|
867
887
|
break
|
|
868
888
|
# A long wait is reported once, when it has lasted LOCK_WAIT_REPORTED
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/assets/dashAgGridComponentFunctions.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{shareddata-6.85.17 → shareddata-6.85.18}/src/SharedData/Web/templates/partials/scripts.html
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|