shareddata 6.85.2__tar.gz → 6.85.3__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.2/src/shareddata.egg-info → shareddata-6.85.3}/PKG-INFO +1 -1
- {shareddata-6.85.2 → shareddata-6.85.3}/setup.py +1 -1
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Table.py +13 -7
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableDisk.py +66 -4
- {shareddata-6.85.2 → shareddata-6.85.3/src/shareddata.egg-info}/PKG-INFO +1 -1
- {shareddata-6.85.2 → shareddata-6.85.3}/LICENSE +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/MANIFEST.in +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/README.md +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/pyproject.toml +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/setup.cfg +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/ServerGunicorn.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/ServerWaitress.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/apidocs-dark.css +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/apidocs.yml +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/auth.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/constants.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/download_paths.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/download_slots.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/install/worker.ps1 +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/install/worker.sh +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/listcache.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/cache.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/collections.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/data.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/downloads.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/metadata.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/operations.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/schedules.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/sqlite.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/system.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/tables.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/timeseries.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/web_routes.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/routes/workers.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/API/utils.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Auth/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Auth/bootstrap.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Auth/migrate.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Auth/store.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Auth/workers.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/CacheRedis.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/CollectionMongoDB.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/catalog.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/config.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/errors.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/indexes.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/readers.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/resolve.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/DataAPI/service.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Database.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Defaults.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/AWSEC2.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/AWSS3.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/AutoDocstrings.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/ClientAPI.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/ClientSocket.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/ClientWebSocket.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/LogHandlerAPI.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/LogReader.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/MongoDBClient.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/SaveTables.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/ServerSocket.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/ServerWebSocket.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/StreamsCache.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/StreamsPersist.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/SyncTable.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/TunnelWebSocket.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/IO/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Listing.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/LockWaiters.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Logger.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/MCP/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/MCP/__main__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/MCP/client.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/MCP/server.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Metadata.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/MultiProc.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/OpenFIGI.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Redaction.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/ArchiveOldCollections.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/BatchJob.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/ContainerHealth.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/JobStore.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/RoutineCommand.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/RoutineOrigin.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/Schedule.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/ScheduleMirror.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/ScheduleMonitor.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/ScheduleStore.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/Scheduler.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/UpdateActiveJobs.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/Worker.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/WorkerBootstrap.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/WorkerLib.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/WorkerPool.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Routines/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/SQLite.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/SharedData.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/SharedNumpy.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/StreamKafka.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Symbol.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableIndex.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableIndexJitFunctions.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableIndexJitFunctionsManual.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableIndexJitGenerate.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableIndexJitHash.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableIndexJitLoc.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableProtocol.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableRead.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TableRewrite.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TimeSeriesDisk.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/TimeseriesContainer.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Users.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Utils.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/ADDING_A_PAGE.md +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/activity_logger.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/app.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/assets/dashAgGridComponentFunctions.js +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/assets/dashAgGridFunctions.js +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/assets/google_logo.png +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/assets/kafka_keys.js +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/assets/logs.css +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/assets/sched.css +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/assets/styles.css +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/auth.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/backends.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/config.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/containers.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/identity.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/kafka_view.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/mongo_view.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/proc.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/redis_view.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/route_health.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/route_registry.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/sched.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/schedule_editor.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/server.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/services.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/shell.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/standalone.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/account.js +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/custom.css +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/favicon.ico +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/favicon.png +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/logo.png +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/logo_96x96.png +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/shareddata-mark.svg +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/shell.css +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/shell.js +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/standalone.css +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/static/standalone.js +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/suggest.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/account.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/base.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/claim.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/claim_done.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/dash.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/index.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/login.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/login_2fa.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/partials/navbar.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/partials/scripts.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/recovery_codes.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/shell.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/templates/standalone.html +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/twofactor.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/utils.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/Web/workerpool.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/__init__.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/build_info.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/fleet.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/preflight.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/private_files.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/release_backup.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/server.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/services.py +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/SharedData/sharedmutexwin.pyd +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/shareddata.egg-info/SOURCES.txt +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/shareddata.egg-info/dependency_links.txt +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/shareddata.egg-info/entry_points.txt +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/shareddata.egg-info/requires.txt +0 -0
- {shareddata-6.85.2 → shareddata-6.85.3}/src/shareddata.egg-info/top_level.txt +0 -0
|
@@ -865,20 +865,26 @@ class Table:
|
|
|
865
865
|
raise RewriteError('automatic disk header migration requires staged publication')
|
|
866
866
|
|
|
867
867
|
############### DOWNLOAD ###############
|
|
868
|
-
def
|
|
869
|
-
"""
|
|
870
|
-
|
|
868
|
+
def _remote_change(self):
|
|
869
|
+
"""What a reload would have to fetch: 'head' when the remote head is newer than this table's
|
|
870
|
+
(the whole image changed), 'tail' when only the remote tail is (the usual case: the rows of
|
|
871
|
+
the current year), None when nothing is newer, there is no remote copy, or S3 is off."""
|
|
871
872
|
from SharedData.services import s3_enabled
|
|
872
873
|
if not s3_enabled() or self.hdr is None:
|
|
873
|
-
return
|
|
874
|
+
return None
|
|
874
875
|
head = S3GetMtime(str(self.headpath) + '.gzip', self.database_folder)
|
|
875
876
|
if head is not None and head > float(self.hdr['mtimehead']):
|
|
876
|
-
return
|
|
877
|
+
return 'head'
|
|
877
878
|
if int(self.hdr['hastail']) == 1:
|
|
878
879
|
tail = S3GetMtime(str(self.tailpath) + '.gzip', self.database_folder)
|
|
879
880
|
if tail is not None and tail > float(self.hdr['mtimetail']):
|
|
880
|
-
return
|
|
881
|
-
return
|
|
881
|
+
return 'tail'
|
|
882
|
+
return None
|
|
883
|
+
|
|
884
|
+
def _download_remote_tail(self):
|
|
885
|
+
"""[io, local mtime, remote mtime] of the remote tail; io is None unless it is newer than this table's."""
|
|
886
|
+
return S3Download(str(self.tailpath) + '.gzip', local_mtime=float(self.hdr['mtimetail']),
|
|
887
|
+
database_folder=self.database_folder)
|
|
882
888
|
|
|
883
889
|
@structural
|
|
884
890
|
def download(self):
|
|
@@ -266,9 +266,11 @@ class TableDisk(Table):
|
|
|
266
266
|
Replace the local image with the remote copy when that is newer.
|
|
267
267
|
|
|
268
268
|
Nothing newer remotely (or no remote copy, or S3 off) leaves the local table as it is, so
|
|
269
|
-
rows not uploaded yet are never discarded.
|
|
270
|
-
|
|
271
|
-
|
|
269
|
+
rows not uploaded yet are never discarded. When only the remote tail is newer (the usual
|
|
270
|
+
case: the head holds the years before this one and the tail this year's rows) only the tail
|
|
271
|
+
is fetched and applied, see _reload_tail. When the remote head is newer, the whole remote
|
|
272
|
+
image is built beside data.bin under a stage name and installed by one os.replace, inside
|
|
273
|
+
the caller's STRUCT section: a failure before the replace leaves the old image untouched, and the epoch
|
|
272
274
|
published on leaving the section makes other processes reopen the new file. The old index
|
|
273
275
|
files describe the old rows, so they are removed and rebuilt.
|
|
274
276
|
|
|
@@ -278,8 +280,11 @@ class TableDisk(Table):
|
|
|
278
280
|
import stat
|
|
279
281
|
import uuid
|
|
280
282
|
from SharedData.TableRewrite import fsync_directory, read_layout, require_rewrite_support, sync_file
|
|
281
|
-
|
|
283
|
+
change = self._remote_change()
|
|
284
|
+
if change is None:
|
|
282
285
|
return self.records
|
|
286
|
+
if change == 'tail' and not self.is_schemaless:
|
|
287
|
+
return self._reload_tail()
|
|
283
288
|
require_rewrite_support()
|
|
284
289
|
final = self.filepath
|
|
285
290
|
old = os.stat(final)
|
|
@@ -334,6 +339,63 @@ class TableDisk(Table):
|
|
|
334
339
|
raise Exception(errmsg)
|
|
335
340
|
return self.records
|
|
336
341
|
|
|
342
|
+
def _reload_tail(self):
|
|
343
|
+
"""
|
|
344
|
+
Apply the remote tail alone: its cost is the tail, not the table (that is what the head/tail
|
|
345
|
+
split is for). Runs inside reload's STRUCT section, with the writer lock held.
|
|
346
|
+
|
|
347
|
+
The tail rows are written into the live file right after the head, the file is synced, and
|
|
348
|
+
the header (count, tail size and time) is committed last. A process that dies before the
|
|
349
|
+
commit leaves the old header: the old tail time is still older than the remote one, so the
|
|
350
|
+
next reload applies the tail again, and the index is rebuilt from the committed rows (the
|
|
351
|
+
dead holder leaves the table flagged DIRTY). No reader looks at the file meanwhile: STRUCT
|
|
352
|
+
keeps lock-free readers waiting and the other readers take the same lock.
|
|
353
|
+
"""
|
|
354
|
+
from SharedData.TableRewrite import sync_file
|
|
355
|
+
tail_gz, _, remote_mtime = self._download_remote_tail()
|
|
356
|
+
if tail_gz is None: # nothing newer after all
|
|
357
|
+
return self.records
|
|
358
|
+
live, size = self.hdr, self.size
|
|
359
|
+
self.hdr = live.copy() # the mapped header stays as it was until the commit
|
|
360
|
+
self._bootstrap_record_download = True # reload holds the lock: the tail may be written into the live file
|
|
361
|
+
try:
|
|
362
|
+
tail_gz.seek(0) # S3Download leaves the buffer at its end
|
|
363
|
+
tail_io = gzip.GzipFile(fileobj=tail_gz, mode='rb')
|
|
364
|
+
self.read_tailheader(tail_io) # count, tail size and tail time of the new header
|
|
365
|
+
self.hdr['mtimetail'] = remote_mtime
|
|
366
|
+
if int(self.hdr['count']) > int(self.hdr['recordssize']):
|
|
367
|
+
self.hdr['recordssize'] = self.hdr['count']
|
|
368
|
+
if self.size is None or self.size < int(self.hdr['recordssize']):
|
|
369
|
+
self.size = int(self.hdr['recordssize'])
|
|
370
|
+
self.create_file() # a table that grew gets a longer file: never shortened or rewritten
|
|
371
|
+
self.read_tail(tail_io)
|
|
372
|
+
sync_file(self.filepath)
|
|
373
|
+
self.hdr['isloaded'] = 0
|
|
374
|
+
self.hdr['isidxcreated'] = 0
|
|
375
|
+
committed = self.hdr
|
|
376
|
+
except BaseException:
|
|
377
|
+
self.hdr, self.size = live, size
|
|
378
|
+
raise
|
|
379
|
+
finally:
|
|
380
|
+
self._bootstrap_record_download = False
|
|
381
|
+
self.shf_hdr[0] = committed # the commit
|
|
382
|
+
self.shf_hdr.flush()
|
|
383
|
+
sync_file(self.filepath)
|
|
384
|
+
try:
|
|
385
|
+
self.free(acquire=False)
|
|
386
|
+
self.malloc()
|
|
387
|
+
if self.hasindex:
|
|
388
|
+
self.hdr['isidxcreated'] = 0
|
|
389
|
+
self.index.initialize()
|
|
390
|
+
self.shareddata.data[self.relpath] = self
|
|
391
|
+
self.hdr['isloaded'] = 1
|
|
392
|
+
self.mutex['isloaded'] = 1
|
|
393
|
+
except Exception as e:
|
|
394
|
+
errmsg = f"TableDisk.reload() {self.relpath}: {e}"
|
|
395
|
+
Logger.log.error(errmsg)
|
|
396
|
+
raise Exception(errmsg)
|
|
397
|
+
return self.records
|
|
398
|
+
|
|
337
399
|
############### DELETE ###############
|
|
338
400
|
def delete_local(self):
|
|
339
401
|
"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
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.2 → shareddata-6.85.3}/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
|