shareddata 6.85.8__tar.gz → 6.85.9__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.8/src/shareddata.egg-info → shareddata-6.85.9}/PKG-INFO +1 -1
- {shareddata-6.85.8 → shareddata-6.85.9}/setup.py +1 -1
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Table.py +51 -1
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableRewrite.py +5 -0
- {shareddata-6.85.8 → shareddata-6.85.9/src/shareddata.egg-info}/PKG-INFO +1 -1
- {shareddata-6.85.8 → shareddata-6.85.9}/LICENSE +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/MANIFEST.in +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/README.md +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/pyproject.toml +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/setup.cfg +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/ServerGunicorn.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/ServerWaitress.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/apidocs-dark.css +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/apidocs.yml +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/auth.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/constants.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/download_paths.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/download_slots.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/install/worker.ps1 +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/install/worker.sh +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/listcache.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/cache.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/collections.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/data.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/downloads.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/metadata.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/operations.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/schedules.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/sqlite.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/system.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/tables.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/timeseries.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/web_routes.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/routes/workers.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/API/utils.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Auth/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Auth/bootstrap.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Auth/migrate.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Auth/store.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Auth/workers.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/CacheRedis.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/CollectionMongoDB.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/catalog.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/config.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/errors.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/indexes.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/readers.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/resolve.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/DataAPI/service.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Database.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Defaults.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/AWSEC2.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/AWSS3.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/AutoDocstrings.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/ClientAPI.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/ClientSocket.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/ClientWebSocket.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/LogHandlerAPI.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/LogReader.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/MongoDBClient.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/SaveTables.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/ServerSocket.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/ServerWebSocket.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/StreamsCache.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/StreamsPersist.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/SyncTable.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/TunnelWebSocket.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/IO/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Listing.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/LockWaiters.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Logger.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/MCP/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/MCP/__main__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/MCP/client.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/MCP/server.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Metadata.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/MultiProc.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/OpenFIGI.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Redaction.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/ArchiveOldCollections.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/BatchJob.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/ContainerHealth.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/JobStore.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/RoutineCommand.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/RoutineOrigin.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/Schedule.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/ScheduleMirror.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/ScheduleMonitor.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/ScheduleStore.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/Scheduler.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/UpdateActiveJobs.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/Worker.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/WorkerBootstrap.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/WorkerLib.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/WorkerPool.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Routines/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/SQLite.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/SharedData.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/SharedNumpy.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/StreamKafka.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Symbol.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableDisk.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableIndex.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableIndexJitFunctions.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableIndexJitFunctionsManual.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableIndexJitGenerate.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableIndexJitHash.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableIndexJitLoc.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableProtocol.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TableRead.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TimeSeriesDisk.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/TimeseriesContainer.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Users.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Utils.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/ADDING_A_PAGE.md +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/activity_logger.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/app.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/assets/dashAgGridComponentFunctions.js +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/assets/dashAgGridFunctions.js +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/assets/google_logo.png +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/assets/kafka_keys.js +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/assets/logs.css +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/assets/sched.css +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/assets/styles.css +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/auth.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/backends.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/config.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/containers.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/identity.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/kafka_view.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/mongo_view.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/proc.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/redis_view.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/route_health.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/route_registry.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/sched.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/schedule_editor.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/server.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/services.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/shell.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/standalone.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/account.js +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/custom.css +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/favicon.ico +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/favicon.png +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/logo.png +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/logo_96x96.png +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/shareddata-mark.svg +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/shell.css +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/shell.js +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/standalone.css +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/static/standalone.js +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/suggest.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/account.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/base.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/claim.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/claim_done.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/dash.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/index.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/login.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/login_2fa.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/partials/navbar.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/partials/scripts.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/recovery_codes.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/shell.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/templates/standalone.html +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/twofactor.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/utils.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/Web/workerpool.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/__init__.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/build_info.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/fleet.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/preflight.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/private_files.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/release_backup.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/server.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/services.py +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/SharedData/sharedmutexwin.pyd +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/shareddata.egg-info/SOURCES.txt +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/shareddata.egg-info/dependency_links.txt +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/shareddata.egg-info/entry_points.txt +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/shareddata.egg-info/requires.txt +0 -0
- {shareddata-6.85.8 → shareddata-6.85.9}/src/shareddata.egg-info/top_level.txt +0 -0
|
@@ -22,6 +22,7 @@ import uuid
|
|
|
22
22
|
|
|
23
23
|
from SharedData.Logger import Logger
|
|
24
24
|
from SharedData.LockWaiters import TableBusy
|
|
25
|
+
from SharedData.TableRewrite import BsonIntegrityError
|
|
25
26
|
from SharedData.IO.AWSS3 import S3Upload, S3Download, S3ListFolder, S3GetMtime, S3DeleteFile, UpdateModTime
|
|
26
27
|
from SharedData.TableIndex import TableIndex
|
|
27
28
|
from SharedData.SharedNumpy import SharedNumpy
|
|
@@ -38,6 +39,11 @@ from SharedData.TableProtocol import (IDLE, WRITE, STRUCT, DIRTY, mode, epoch,
|
|
|
38
39
|
# orphaned (append-only) has nothing to defragment, and rewriting it would only copy identical bytes.
|
|
39
40
|
BSON_DEFRAG_MIN_BYTES = 64 * 1024
|
|
40
41
|
BSON_DEFRAG_MIN_FRACTION = 0.0
|
|
42
|
+
# The rewrite holds the table lock and copies every live byte: for a large BSON file that must buy
|
|
43
|
+
# something. Above BSON_DEFRAG_LARGE_BYTES of allocated BSON, compact once at least this fraction is orphaned
|
|
44
|
+
# (a 43 GB file with 23 MB orphaned is 0.05%: not worth minutes of blocked ingestion).
|
|
45
|
+
BSON_DEFRAG_LARGE_BYTES = 1024 * 1024 * 1024
|
|
46
|
+
BSON_DEFRAG_LARGE_MIN_FRACTION = 0.01
|
|
41
47
|
|
|
42
48
|
|
|
43
49
|
class TableNotFound(FileNotFoundError):
|
|
@@ -1623,12 +1629,43 @@ class Table:
|
|
|
1623
1629
|
usage['orphaned'] = max(usage['used'] - usage['live'], 0)
|
|
1624
1630
|
return usage
|
|
1625
1631
|
|
|
1632
|
+
def _bson_mismatches(self, pointers, sizes, live_idx):
|
|
1633
|
+
"""Rows whose pointer does not lead to a BSON document of exactly the recorded size: the int32 at
|
|
1634
|
+
the pointer is the document length, and a document ends with a zero byte."""
|
|
1635
|
+
import mmap
|
|
1636
|
+
bad = []
|
|
1637
|
+
if not len(live_idx):
|
|
1638
|
+
return np.zeros(0, dtype=np.int64)
|
|
1639
|
+
with open(self.bsonpath, 'rb') as source:
|
|
1640
|
+
view = mmap.mmap(source.fileno(), 0, access=mmap.ACCESS_READ)
|
|
1641
|
+
data = None
|
|
1642
|
+
try:
|
|
1643
|
+
data = np.frombuffer(view, dtype=np.uint8)
|
|
1644
|
+
span = np.arange(4)
|
|
1645
|
+
for first in range(0, len(live_idx), 1 << 20):
|
|
1646
|
+
rows = live_idx[first:first + (1 << 20)]
|
|
1647
|
+
short = sizes[rows] < 5 # the smallest document, {}, is 5 bytes
|
|
1648
|
+
bad.append(rows[short])
|
|
1649
|
+
rows = rows[~short]
|
|
1650
|
+
start, length = pointers[rows], sizes[rows]
|
|
1651
|
+
head = data[start[:, None] + span].astype(np.int64)
|
|
1652
|
+
declared = head[:, 0] | (head[:, 1] << 8) | (head[:, 2] << 16) | (head[:, 3] << 24)
|
|
1653
|
+
ends_with_zero = data[start + length - 1] == 0
|
|
1654
|
+
bad.append(rows[(declared != length) | ~ends_with_zero])
|
|
1655
|
+
finally:
|
|
1656
|
+
data = None # release the buffer export before closing the map
|
|
1657
|
+
view.close()
|
|
1658
|
+
return np.concatenate(bad) if bad else np.zeros(0, dtype=np.int64)
|
|
1659
|
+
|
|
1626
1660
|
def compact_bson_if_worthwhile(self):
|
|
1627
1661
|
"""Compact the BSON file when enough of it is orphaned; None when it is not worth a rewrite."""
|
|
1628
1662
|
usage = self.bson_usage()
|
|
1629
1663
|
if usage['orphaned'] < BSON_DEFRAG_MIN_BYTES \
|
|
1630
1664
|
or usage['orphaned'] < BSON_DEFRAG_MIN_FRACTION * max(usage['used'], 1):
|
|
1631
1665
|
return None
|
|
1666
|
+
if usage['used'] > BSON_DEFRAG_LARGE_BYTES \
|
|
1667
|
+
and usage['orphaned'] < BSON_DEFRAG_LARGE_MIN_FRACTION * usage['used']:
|
|
1668
|
+
return None
|
|
1632
1669
|
return self.defragment_bson(acquire=False)
|
|
1633
1670
|
|
|
1634
1671
|
def _defragment_bson_disk(self, chunk_size, acquire):
|
|
@@ -1671,6 +1708,13 @@ class Table:
|
|
|
1671
1708
|
original_size = self.bsonpath.stat().st_size
|
|
1672
1709
|
if len(live_idx) and (np.any(pointers[live_idx] < 0) or np.any(pointers[live_idx] + sizes[live_idx] > original_size)):
|
|
1673
1710
|
raise RewriteError(f'{self.relpath}: a record points outside its BSON file; nothing was changed')
|
|
1711
|
+
mismatched = self._bson_mismatches(pointers, sizes, live_idx)
|
|
1712
|
+
if len(mismatched):
|
|
1713
|
+
from SharedData.TableRewrite import BsonIntegrityError
|
|
1714
|
+
raise BsonIntegrityError(
|
|
1715
|
+
f'{self.relpath}: {len(mismatched)} of {len(live_idx)} records do not point at a BSON document '
|
|
1716
|
+
f'of their recorded size (first rows {mismatched[:5].tolist()}); not compacted, '
|
|
1717
|
+
'the unreferenced bytes may be the documents those records lost')
|
|
1674
1718
|
new_offsets = np.zeros(len(live_idx), dtype=np.int64)
|
|
1675
1719
|
if len(live_idx):
|
|
1676
1720
|
new_offsets[1:] = np.cumsum(sizes[live_idx])[:-1]
|
|
@@ -2007,7 +2051,13 @@ class Table:
|
|
|
2007
2051
|
if remote and self.is_schemaless and self.type == 1 and self.bsonpath.exists():
|
|
2008
2052
|
remote_bson_mtime = S3GetMtime(str(self.bsonpath) + '.gzip', self.database_folder)
|
|
2009
2053
|
if force_write or remote_bson_mtime is None or remote_bson_mtime < mtime:
|
|
2010
|
-
|
|
2054
|
+
try:
|
|
2055
|
+
stats = self.compact_bson_if_worthwhile()
|
|
2056
|
+
except BsonIntegrityError as error:
|
|
2057
|
+
# Loud, every night, but the upload goes on as it was: nothing is rewritten.
|
|
2058
|
+
Logger.log.error('BSON compaction skipped: %s' % error)
|
|
2059
|
+
stats = None
|
|
2060
|
+
if stats is not None:
|
|
2011
2061
|
compacted = True
|
|
2012
2062
|
# New pointers: head, tail and BSON are all rewritten and all uploaded, under a
|
|
2013
2063
|
# publication time later than anything the remote holds, so consumers see the change.
|
|
@@ -18,6 +18,11 @@ class RewriteError(RuntimeError):
|
|
|
18
18
|
pass
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
class BsonIntegrityError(RewriteError):
|
|
22
|
+
"""Records whose bson_ptr/bson_size do not describe a BSON document. Compacting such a table would
|
|
23
|
+
keep only the byte ranges the records point at and discard the documents they miss."""
|
|
24
|
+
|
|
25
|
+
|
|
21
26
|
def checkpoint(name):
|
|
22
27
|
"""Test seam, deliberately not controlled by production environment."""
|
|
23
28
|
|
|
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
|
|
File without changes
|
{shareddata-6.85.8 → shareddata-6.85.9}/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
|
|
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
|