Change Log¶
All notable changes to this project are documented in this file. This project adheres to Semantic Versioning.
Unreleased¶
Fixed¶
In case of a long name make sure truncated auto-generated slug is valid
Fix correctly assign permission group when data object is created outside container and later moved into one
Added¶
Add support for
Python 3.14
45.0.3 - 2025-11-06¶
Fixed¶
Handle case when request is None and remove it before call to superclass constructor
45.0.2 - 2025-11-04¶
Fixed¶
Fix adding annotation preset on Admin page returns internal server error
45.0.1 - 2025-06-26¶
Changed¶
Allow ordering annotation values by
modifiedfield
Fixed¶
Use existing annotation when filtering collections by the entity count
45.0.0 - 2025-06-14¶
Changed¶
BACKWARD INCOMPATIBLE: Require
Django 5.2.xand bump version of dependenciesMove full-text search to its own filter
Remove unused
confirm_actionattribute from theAnnotationFieldDictSerializerserializer
Fixed¶
Fix
sharepermission was sometimes requested forPOSTaction because the permissions map was modified on the persistent object
44.1.0 - 2025-04-14¶
Changed¶
Prefetch
contributordata withAnnotationValueobjects to speed up retrieving annotation values
44.0.0 - 2025-03-17¶
Changed¶
BACKWARD INCOMPATIBLE: Drop support for
Python 3.11Support dynamic calculation of processes’ resource requirements.
Add
process_exceptionmethod to auditlog middlewareAdd
deletedfield toAnnotationValuesmodelRemove not used method
remove_delete_markersfrom theAnnotationValuemodelAllow using
DictRelatedFieldon models without versionRemove deprecated endpoint
upload_config_deprecated
43.0.0 - 2025-02-17¶
Changed¶
BACKWARD INCOMPATIBLE: Require
Django 5.1.xand bump version of dependenciesSupport objects without permissions in
DictRelatedFieldDue to poorly written and unmaintained code, the
VersionFieldfunctionality has been integrated intoResolwe. This integration is based on the code from repository https://github.com/mcldev/django-versionfield .
Fixed¶
Fix error when deleting observer subscription
Added¶
Add support for
Python 3.13
42.2.0 - 2025-01-13¶
Added¶
Add test_data_output management command to test that files referenced in data output exist in the database
42.1.0 - 2024-12-16¶
Added¶
Expose
statusoncollectionandentityviewset and allow filtering and sorting by itAdd generic filtering by related objects which respects permissions
Changed¶
Make processing container startup script
Python3.12 compatibleFix stop null executor processing in the preparation phase
Respect image mapper in
list_docker_imagesmanagement commandUse image mapper in docker executor
Make maximal number of pool connections in
S3connector configurableCatch
EndpointConnectionErrorin retry decorator
Fixed¶
Add status
DataStatus.PROCESSINGto the sort order
42.0.4 - 2024-12-09¶
Changed¶
Catch
EndpointConnectionErrorin retry decoratorImplement exponential backoff in retry decorator
Reduce the maximal number of threads for downolad data in the init container
42.0.3 - 2024-12-09¶
Changed¶
Use regional
S3endpoint inus-east-1region
Fixed¶
Fix
AnnotationValueViewSetcrash when removing the delete markers
42.0.1 - 2024-11-21¶
Fixed¶
Fix crash in
get_annotationwhen delete marker is set
42.0.0 - 2024-11-21¶
Fixed¶
Filter out deleted annotation values in viewset
Changed¶
BACKWARD INCOMPATIBLE: Return all version of processess on process endpoint
41.0.0 - 2024-11-18¶
Changed¶
BACKWARD INCOMPATIBLE: Set
BaseManageras default objects manager. The manager supports objects versions by grouping them together by common fields and returning only the one with the latest version from every group.BACKWARD INCOMPATIBLE: Set
PermissionManageras default manager for objects with permissionsRestrict processing container from using service account permissions
Support creating multiple entries at once in create mixin
Rename
modifiedfield in theAnnotationValuemodel tocreatedSet annotation method on entity accepts optional contributor as argument
Added¶
Add
versionfield to theAnnotationFieldmodelAdd
contributorfield to theAnnotationValuemodelAdd version of base managers without versioning support
Add abstract base classes for annotation fields
Add
annotate_statusto collection and entity queryset
Fixed¶
Use
all_objectsmanager in related lookups in viewsetsVeriy change when moving data to another
entity
40.4.0 - 2024-10-14¶
Changed¶
Change fallback for storage resource from 200GB to 10GB
40.3.0 - 2024-09-16¶
Added¶
Allow overriding the number of max metrics points that are exported in the same batch via
RESOLWE_METRICS_EXPORT_SIZEenvironmental variable(defaults to 1000)
Changed¶
Move metrics endpoint configuration to Django settings and read it from
RESOLWE_METRICS_ENDPOINTenvironmental variableRESOLWE_LISTENER_METRICS_ENDPOINTenvironmental variableRemove attribute
data_idfrom listener metrics
40.2.0 - 2024-08-19¶
Added¶
Add
upload_credentialsendpointMark endpoint
upload_config_deprecatedas deprecated and to be removed after1. 1. 2025Add object iteration to the listener protocol
Add mapping for
PositiveBigIntegerFieldto python processesAdd metrics reporting to the listener service
Changed¶
Change
UploadConfigtype toAPIViewEmit auditlog in background task
Use default value
Falseforskip_missing_interpretersin tox.ini file
40.1.0 - 2024-07-09¶
Changed¶
Bump requirements version
Upgrade base images to Fedora 40 and Ubuntu 24.04
Use
pyproject.tomlinstead ofsetup.pyMerge
Authenticatorclass withZMQAuthenticatorand allow any client with the encryption key to connect to the listener service. The client is rejected if it accesses the data object it does not have the permissions for.
40.0.0 - 2024-06-17¶
Changed¶
BACKWARD INCOMPATIBLE: Make move between collections a background job
BACKWARD INCOMPATIBLE: Remove support for
Python 3.10Use
simple_unaccentfull text search configuration instead ofsimpleAuthenticate worker with the listener (and vice versa) and encrypt the communication between them using
CurveZMQprotocolUse
simple_unaccentconfiguration when generating search vectors
Added¶
Add fixed pair of encryption keys for
listenerservice health checks
39.0.0 - 2024-05-09¶
Changed¶
BACKWARD INCOMPATIBLE: Remove
descriptor_schemaanddescriptorfield from theEntitymodelRequire
Jinja >= 3.1.3to address security vulnerability https://deps.dev/advisory/osv/GHSA-h5c8-rqwp-cp95Do not add
descriptor_schemato automatically created entities
Fix¶
Refresh the entity related SQL stored procedures
38.6.0 - 2024-04-15¶
Fixed¶
Modify migrations to support
PostgreSQL 15+
38.5.0 - 2024-03-25¶
Fixed¶
Correctly enumerate dependencies when restarting a data object
Store references to all parent directories of the refenced files to the database
Changed¶
Add owner reference to PVC claims
When process sets annotation to the entity the corresponding annotation field is added to collection annotation preset
When moving entities from one collection to another the annotation fields are always added to the new collection annotation preset
When copying entities always add annotation fields to the target collection annotation preset
Data objects can be restated by staff users
Added¶
Add support for
Python 3.12Add filter for
AnnotationValuebyidfieldAllow ordering
AnnotationValuebyidfield
38.4.0 - 2024-02-19¶
Changed¶
Bulk delete method silently ignores non-existent objects and objects without edit permissions instead of raising an exception
38.3.2 - 2024-01-25¶
Fixed¶
Correctly decorate class based views
38.3.1 - 2024-01-25¶
Changed¶
Do not require CSRF token to access uri resolver endpoint
38.3.0 - 2024-01-11¶
Fixed¶
Correctly clear
Rediscache on data restart
Added¶
Add
clear_redis_cachemanagement commandAdd modified field to the
AnnotationValuemodel and expose it in API
38.2.0 - 2023-12-15¶
Fixed¶
Add default value for
FLOW_PROCESSES_ALLOW_LISTandFLOW_PROCESSES_IGNORE_LISTin case of missing settings.User defined slug must not be changed
Raise
ValidationErrorwhen trying to get non-existentAnnotationFieldPropagate arguments to parent save method in
BaseCollectionmodel
Added¶
Add
extend_lockmethod to redis cache in listenerAdd extending processing lock task to the listener
Add
FLOW_KUBERNETES_PULL_POLICYsetting to set the image pull policy inKubernetesinstead of usingAlways
Changed¶
Wrap listener command processing in a transaction
Return
Falsewhenhas_permis called withobjset no None, since object level permissions are granted using DjangoModelBackendauthentication backendUse
keysinstead ofscan_iterinclearmethod ofrediscache, sincescan_iteris much slowerDo not allow deleting annotation field if annotation values are present
38.1.0 - 2023-11-21¶
Changed¶
Redis cache in listener is updated when data fields are retrieved from the database
Bulk annotations on entity endpoint now accept field path instead of id
Added¶
Add processes allow and ignore list to dispatcher, controlled by environmental variables
FLOW_PROCESSES_ALLOW_LISTandFLOW_PROCESSES_IGNORE_LIST`Allow ovirriding the maximal number of commands listener can process concurrently
Suport bulk create/update/delete on AnnotationValues endpoint
Fixed¶
Store random postfix to redis for use at cleaup time
Fix
_save_datamethod in listener that caused changes to started and progress fields to be ignoredAlready processed messages in listener are ignored for one day so messages are not processed twice
38.0.0 - 2023-11-13¶
Added¶
Add
restartmethod to theDatamodelAdd
restartendpoint toDataViewSetAdd history tracking for
DataandCollectionobjectsAdd
bulk_deletetodata,entityandcollectionendpoints
Changed¶
BACKWARD INCOMPATIBLE: Remove arguments
inherit_collectionandinherit_entityfromduplicateendpointsThe method
run_processin Python processes returns the createdDataobjectThe docker container names have random postfix to support restarting data object
The kubernetes resources have random postfix to support restarting data object
Remove
inherit_collectionandinherit_entityparameters fromduplicatemethods onEntityandDatamodels and corresponding query setsAdd filtering and searching to annotation field admin page
Annotation values are re-validated if annotation field type is changed
Fixed¶
Add default ordering on
AnnotationValuemodelCreate history object for
Collectionif none existsUse the same postfix for all kubernetes volumes for the given data object
Fix
handle_progresshandler in the listenerFix moving data to entity in collection also sets collection on the data object
37.0.2 - 2023-10-26¶
Fixed¶
Set
valuetoAnnotationValueobject on duplication when it is createdSend
post_duplicatesignal only on successful duplication
Changed¶
Simplify permission checks on
AnontationValueendpoint
37.0.1 - 2023-10-23¶
Changed¶
Removed
descriptorandDescriptorSchemafields fromEntityendpoint
37.0.0 - 2023-10-23¶
Added¶
Allow sorting entities by collection name
Changed¶
BACKWARD INCOMPATIBLE: Command
re-annotate-entitycreates annotation objects instead of updating entity descriptorBACKWARD INCOMPATIBLE: Method
update_entity_descriptorin Python processes creates annotation objects instead of updating the entity descriptorAdd
annotationsproperty to theEntityobject in Python processesAllow filtering
AnnotationFieldby idsAllow filtering
AnnotationFieldby entityAllow filtering
AnnotationValueby group nameAllow create/update/delete REST API calls for
AnnotationValueobjectsRemove
collectionfield fromAnnotationFieldserializer
36.1.0 - 2023-09-14¶
Changed¶
Relation slug can be updated
Anonymous user can access the annotation field endpoint
Annotations contain the field
labelFiltering entities by annotations now filters by
labelandvaluefields
Added¶
Add
clean_observersmanagement command to clean old subsciptionsAllow filtering annotation values endpoint by
label
36.0.0 - 2023-07-17¶
Added¶
Add
slugto the relation serializerAdd support for
Python 3.11
Changed¶
BACKWARD INCOMPATIBLE: Bump
Djangorequirement to version4.2BACKWARD INCOMPATIBLE: Bump
channelsrequirement to version4.0Bump other requirements to the latest versions
Replace
django-fernet-fieldswithdjango-fernet-fields-v2to supportDjango 4.2Bump
PostgreSQLversion to 14 since 10 is no longer supportedBump dependencies in the communication container image to the latest versions
Bump
psycopgversion to 3.1.9Upgrade
Fedorabase image to version 37Remove
Django Priority BatchdependencySet filename with Content-Disposition header when downloading data from S3 to avoid issues with some browsers renaming the file due to media type
35.1.0 - 2023-06-19¶
Added¶
Method
groups_with_permissionswas added to thePermissionObjectRegister annotation models with Django admin
Enable editing
AnnotationPresetpermissions in the Django adminExtend
AnnotationPresetfromBaseModelEnable filtering
Entityobjects by annotation valuesAdd
requiredfield to theAnnotationFieldmodelAdd
requiredfield to theAnnotationFieldSerializerandAnnotationFieldFilterEnable sorting
Entityby annotation values
Changed¶
Annotation fields endpoint serializer the annotation group instead of only returning its id
Do not allow removing required
AnnotationFieldobjects from the collectionAdd required annotation fields to collection when it is created
Replace
add_fields_to_collectionandremove_fields_from_collectionwithset_annotation_fields
Fixed¶
Filtering annotation values by entity ids
Add
PluginManagerandPluginclasses to unify plugin managementAdd
Rediscache management plugin manager and basic pluginsAdd the option to skip the response to the already processed command
Add the ability to add locks to
Redisand wait for themLock the message in listener when processing it
Duplicate filter loopup lists
Fix
AnnotationPresetcontributor to point to the user model specified in the settings
35.0.0 - 2023-05-15¶
Added¶
Add
deletemethod to the background consumerAdd
delete_backgroundmethod to data, entity and collection model and querysetAllow
IPprotocol sockets to be opened in the processing container by the seccomp security profile
Changed¶
BACKWARD INCOMPATIBLE: Delete objects in the background in the
data,entityandcollectionendpointsBump
DockerSDK version to fix requests/urllib incompatibility issue (<https://github.com/docker/docker-py/issues/3113>)Always use
Dockerdefault seccomp profileIncrease resend timeout in processing container to 60 seconds
Fixed¶
Close websocket requests without session id
34.1.0 - 2023-05-02¶
Fixed¶
The contributor is assigned VIEW permission to the
BackgroundTask
Added¶
Add endpoints for new annotation models
Send observer create signals on object duplication
Add filtering by id to the background task endpoint
34.0.0 - 2023-04-17¶
Added¶
Add
BackgroundTaskmodel to enable support for observable long running backend tasksAdd
BackgroundTaskConsumerclass to handle starting background jobsMake
Kubernetesovercommitment factors configurable via settingsSupport filtering by tags on relation API endpoint
Changed¶
BACKWARD INCOMPATIBLE Remove the duplicated
collectionsubfield from theentityfield when serializingDataobjectsBACKWARD INCOMPATIBLE: Replace
duplicatemethods onData,Entityand
Collectionobjects with the call to the corresponding background duplicate job.
BACKWARD INCOMPATIBLE: The
duplicateendpoints onData,EntityandCollectionreturn the details of theBackgroundTaskinstance that is used to track the duplication statusWhen subscribing to an object for notifications the
CREATEnotifications are also sent along. This is necessary to receive CREATE notifications triggered from the data inside the container on the container.Remove the redundant prefetch in the
BaseCollectionViewSetAnnotate the queryset in the
BaseCollectionViewSetwithdata_statuses,entity_countanddata_countattributes to reduce the number of queriesRemove the redundant prefetch in the
EntityViewSetAnnotate the queryset in the
EntityViewSetwithdata_statusesand anddata_countattributes to reduce the number of queriesModify the
DataViewSetto remove redundant queriesAdd
duplicate_data,duplicate_entityandduplicate_collectionmethods toBackgroundTaskConsumerclassSet
is_activetoTruefor all available processes every timeregistermanagement command is run even if the same version of the process already exists in the databaseThe
FLOW_KUBERNETES_AFFINITYvariable is now a JSON dictionary with information about affinity for interactive and batch processesFix values in observer
ChangeTypeenum to prevent accidental value changeAlways start
BackgroundTaskConsumerwhen running tests
Fixed¶
Send observer notifications when data object is automatically assigned to the entity via
entity_typein the processRemove observer from subscription if object is deleted
Handle empty iterable in
observe_instance_containermethodRemove call to
closein observers consumer that causedRuntimeErrorInstances of
Observerclass could be duplicated whenobject_idwasNonedue to PostgreSQL handling of NULL valuesDelete the observer subscription when object is deleted
Check response status when bootstraping executor and print out sensible error message on failure
Do not run the test twice when it is tagged and contained in the changed test file
33.0.0 - 2023-03-13¶
Added¶
Add
suppress_observer_notificationsandmove_to_containerdecorators to observersAdd types
ChannelsMessageandWebsocketMessagedescribing type of observers messagesAdd property
containerson thePermissionObjectthat returns all the containers for the given instanceAdd
observe_instance_containersmethod to observer models
Changed¶
BACKWARD INCOMPATIBLE: Drop support for
Python 3.6,Python 3.7,Python 3.8andPython 3.9. The processing container continues to supportPython >= 3.6.Add
sourceattribute to observer notificationsWhen subscribing to observer endpoint without explicit ids subscribe to CREATE and DELETE notifications by default
Send
CREATEandDELETEnotifications to the containers of the given object when permissions to it are gained/lost or it is moved between containers. The notifications also contain thesourceandsource_idcontext containing content type and id of the object that triggered the change.
32.1.0 - 2023-02-13¶
Added¶
Add new entity annotation framework
Add set_permission method on PermissionQuerySet
Add notify_create method on Subscription model in observers to enable sending notification when object is created
Allow ordering data endpoint by entity name
Add
with_superusersargument tousers_with_permissionmethod
Changed¶
When slug collision occurs in the listener when creating new objects retry up to ten times before raising the exception
Enable overriding user and group id of the processing container with environmental variable
Fixed¶
Notify user when object (data, entity) is created in the container
Do not delete observers in use by other subscriptions when unsubscribing
Notify subscribers to the collection if object inside them is modified
Notify superusers without explicit permissions when object is created
32.0.0 - 2022-11-14¶
Changed¶
BACKWARD INCOMPATIBLE: Drop support for Python 3.4 in the processing container
BACKWARD INCOMPATIBLE: Rewrite the listener to allow more than one of them to run at the same time
Rewrite the processing container code to make it more stable
Rewrite the commnication container code to make it more stable
Add
resolve_urlcall to there_import.shbash script
Changed¶
Migrate base docker images to Ubuntu 22.04 and Fedora 36
31.3.1 - 2022-10-19¶
Fix¶
Make sure signals are triggered for data objects when their sample is moved to a new collection
31.3.0 - 2022-10-17¶
Added¶
Add handler
resolve_urlto listenerAdd support for resolving urls in Python processes
Add
urlmethod to theBaseConnectorclass and override it inS3andlocalconnectors
31.2.1 - 2022-09-20¶
Changed¶
Add
cleanup_callbacktoretrydecoratorClean
kubernetestemporary files with credentials on config load error
31.2.0 - 2022-09-19¶
Added¶
Add
descriptoranddescriptor_schemafields to theRelationmodelSetting
KUBERNETES_DISPATCHER_CONFIG_LOCATIONspecifying the location of the kubernetes config to load in theKubernetesworkload connector
Changed¶
Retry loading
Kubernetesconfiguration couple of times before giving up in the kubernetes workload connectorAdd model observers that notify clients about model changes via a websocket connection
31.1.0 - 2022-08-23¶
Fixed¶
Clear
custom_messagesarray on auditlog reset call
31.0.0 - 2022-07-18¶
Changed¶
BACKWARD INCOMPATIBLE: Always try to load kubernetes configuration via
load_kube_configbefofe falling back toload_incluster_configRename
docker-compose.ymltocompose.yamlListener can always modify the data object that it is processing
Add original objects to
post_duplicatecallInstall
asgirefversion based on the version of the installedPythoninterpreter
Fixed¶
Fix a typo in
listenerpermission handling when creating data model: a check was performed on the wrong object type
Added¶
Make requests and limits for the
communicationcontainer configurable
30.3.0 - 2022-06-13¶
Added¶
Support custom user model in Python processes
30.2.0 - 2022-05-16¶
Added¶
Send custom signal
post_duplicatewhen objects are duplicated since regular Django signals are not sentAdd
auditlogapplication to log user actions
30.1.0 - 2022-04-15¶
Added¶
Custom signal
resolwe.flow.signals.before_processingis sent when data object is ready for processingSupport setting
descriptorandDescriptorSchemaon Data during process runtimeSupport filtering Data, Entity and Collections based on permissions (view, edit, owner, group, shared_with_me)
Support filtering Data and Entity objects by relation id
Create
upload_configAPI endpoint that specifies upload connector type and credentials client can use for optimized upload
Fixed¶
Do not return multiple version of the same process while checking for permissions in Python processes
Change misleading error message when importing file if the response with status code indicating error was received from the upstream server
Changed¶
Use
data_idinstead ofdata.idwhen notifying dispatcher to avoid potential database query inside async context
30.0.0 - 2022-03-14¶
Added¶
Add support for
Python3.10Add health checks support for deploy in Kubernetes
Add
collecttools_kubernetesmanagement commandAdd
COMMUNICATION_CONTAINER_LISTENER_CONNECTIONto separate settings for listener (where to bind to) and containers (where to connect to)Support
docker_volumesetting in connector configSupport use of named volumes as processing or input volume in Docker executor
Support SSL connection to Redis
Changed¶
BACKWARD INCOMPATIBLE: Require
Django3.2BACKWARD INCOMPATIBLE: Require
Django Priority Batchversion 4Do not prepare tools configmaps in Kubernetes workload connector
Enable Docker containers to connect to the custom network
Auto-delete completed jobs in Kubernetes after 5 minutes
Optionally add affinity to the Kubernetes job
Remove support for setting permissions using old syntax
29.3.0 - 2022-02-15¶
Added¶
Add MD5 checksum to
DataBrowseViewview
29.2.0 - 2022-01-17¶
Added¶
Support
rangeparameter in fields of Python proces
Changed¶
Flush stdout/stderr on Python processes on every write
Fixed¶
Add attribute as a field to a
resolwe.process.fields.GroupFieldin Python process only if it is an instance ofresolwe.process.fields.Field.
29.1.0 - 2021-12-12¶
Changed¶
Do not fail in case of missing files in
UriResolverView
Fixed¶
Remove references to temporary export files from the database and make sure they are not created anymore
Wrap
move_to_collectionin transaction and only call method if collection has changed
29.0.0 - 2021-11-11¶
Added¶
BACKWARD INCOMPATIBLE: New permission architecture: it is not based on Guardian anymore. The main benefits of new architecture are speed gains in common operations, such as setting a permission and retrieving objects with the given permission.
Allow overriding process resources in data object
Changed¶
Allow mounting connectors into pods as persistent volume claim instead of volume of type
hostPath
Fixed¶
use the same connector inside pod to handle files and directories
When data object was deleted listener did not receive the terminate message and pod did not terminate immediatelly
28.5.0 - 2021-09-13¶
Added¶
Add
compare_models_and_csvmanagement script to check if all ``ReferencedPath``s point to a valid file in the aws databaseAdd method
get_latesttoProcessclass in Python Processes returning the latest version of the process with the given slugSupport assuming role in S3 connector
Changed¶
Set hashes during upload to avoid creating multiple versions of the object in S3 bucket with enabled versioning
28.4.0 - 2021-08-16¶
Changed¶
Remove dependency on EFS/NFS when running on Kubernetes
When running on Kubernetes the runtime volume configuration can be omitted
28.3.0 - 2021-07-20¶
Fixed¶
Prepare release 28.3.0 due to preexisting 28.3.0a1 pre-release
28.2.1 - 2021-07-13¶
Fixed¶
Speed up deleting storage locations by considering only referenced paths belonging to the given storage location
Temporary pin
astevalto version0.9.23due to compatibility issues with Python 3.6
Changed¶
Improve logging in cleanup manager
28.2.0 - 2021-06-15¶
Fixed¶
Create
ReferencedPathobjects during transfer only when needed
Changed¶
Retry data transfer if
botocore.exceptions.ClientErroris raised during transfer
Added¶
Add
FLOW_PROCESS_MAX_MEMDjango setting to limit the ammount of memory used by a processSupport disabled fields in Python processes
Add method
get_latestto theProcessclass inPythonprocesses which retrieves latest version of the process with the givenslug
28.1.0 - 2021-05-17¶
Fixed¶
Do not raise exception when terminating
runlistenermanagement commandChange concurrency issue in the listener causing processes to sometitimes get incorrect value for
RUNTIME_VOLUME_MAPSsettings
Changed¶
Make S3 connectors use system credentials when they are not explicitely given in settings
Added¶
Make it possible to rewrite container image names in kubernetes workload connector
28.0.4 - 2021-05-04¶
Fixed¶
Use per process storage overrides
28.0.3 - 2021-05-04¶
Changed¶
Make
gp2default EBS storage class
28.0.2 - 2021-05-03¶
Fixed¶
Log peer activity on every received message to avoid declaring otherwise healthy node as failed
Fix possible data loss caused by parallel command processing when uploading log files interfered with processing command from a script
Fix deadlock when uploading empty files
28.0.1 - 2021-04-28¶
Changed¶
Make logger level inside init and communication containers configurable via environmental variable
Change default logger level inside init and communication containers for AWS S3 and Google Cloud Storage components to WARNING
Fixed¶
Stop timer that uploads log files in the processing container immediatelly after the processing is finished to avoid timing issues that could cause the data object to be marked as failed
28.0.0 - 2021-04-19¶
Changed¶
BACKWARD INCOMPATIBLE: Require
Django 3.1.xBACKWARD INCOMPATIBLE: Require
Django Channelsversion 3.0.xBACKWARD INCOMPATIBLE: Require
asgirefversion 3.3.xBACKWARD INCOMPATIBLE: Require
jsonschemaversion 3.2.xBACKWARD INCOMPATIBLE: Require
Sphinxversion 3.5.xBACKWARD INCOMPATIBLE: Require
django-guardianversion 2.3.xRefresh versions of the other dependencies
Replace
django-versionfield2withdjango-versionfieldOverhaul of the storage configuration
Remove per-process runtime directory
Increase socket timeouts in the processing and the communication container
Added¶
Add multipart upload capability to
LocalFilesystemConnectorandAwsS3ConnectorSupport uploading files to
LocalFilesystemConnectororAwsS3ConnectorAdd support for
Python 3.9
27.1.2 - 2021-03-22¶
Fixed¶
Bump version of
upload-dirprocess to use the default version of processing image instead of the previous oneUse Signature Version 4 when generating presigned URLs in S3 connector
Fix possible socket timeout when uploading files in the processing container
Remove static
rnaseqimage from list of docker images
Changed¶
Use tagged base image in
upload-fileprocessAllow to change Entity descriptor in Python process.
27.1.1 - 2021-03-21¶
Fixed¶
Fix connection timeout in communication container when sending initial message to the listener
27.1.0 - 2021-03-15¶
Fixed¶
Account for file system overhead when processing Data objects with large inputs
Changed¶
Improve storage manager to only process applicable storage locations instead of iterating through all of them
Skip hash computation when connector itself provides data integrity check
Remove
jobprefix from kubernetes job nameMake error messages in Python processes more useful
Added¶
Add label
job_typeto Kubernetes job to separate interactive jobs from batch jobs
27.0.0 - 2021-02-22¶
Fixed¶
Fixed progress reporting in Python processes
Do not override content-type of S3 object when storing hashes
Support upload of files larger than 80G to AWS S3
Changed¶
Download input data in init container
Storage objects are sent to the listener over socket instead of using files on the shared filesystem
Make it possible to run the platform without shared filesystem. All inputs for processed data object are prepared in input container and all outputs are uploaded to the chosen storage connector when they are referenced.
Overcommit CPU in kubertenes processing container by 20%
Move docker images from Docker Hub to Amazon ECR
Added¶
Make automatic removal of Docker containers configurable
Terminate processing immediately when data object is deleted
Make default processing image configurable
26.0.0 - 2021-01-20¶
Changed¶
BACKWARD INCOMPATIBLE: Remove
resolwe/upload-tab-fileandresolwe/archiverDocker imagesBACKWARD INCOMPATIBLE: Remove obsolete processes:
archiver,upload-tab-fileandupload-image-fileBACKWARD INCOMPATIBLE: Python process syntax has changed: all the attributes of Data object are now available in Python process and therefore accessing outputs using syntax
data_object.output_nameis no longer valid sinceoutput_namecould be the name of the attribute. The new syntax isdata_object.output.output_name.BACKWARD INCOMPATIBLE: Communication between the processing script and listener has changed from printing to stdout to sending messages over sockets. Messages printed to stdout or sent using old version of the
resolwe-runtime-utils(YAML processes) are no longer processed. YAML processes need new version ofresolwe-runtime-utilswhile Python processes require a rewrite to the new syntax and Python version 3.4 or higher in the container (resolwe-runtime-utilspackage is no longer needed).Use Github Actions to run the tests
Listener communicates with containers through ZeroMQ instead of Redis
Start two containers for each process instead of one: the second one is used to communicate with the listener
Move settings for Python processes from files to environmental variables
Added¶
Add Kubernetes workload connector
Support running process instant termination
Support registering custom command handlers in listener and exposing data objects (possibly defined in other Django applications) to Python processes
Support Django-like syntax in Python processes to create, filter or access attributes of the exposed data objects
Support creating new base classes for Python processes
25.2.0 - 2020-12-15¶
Fixed¶
Allow retrieval of Storage object that was linked to more than one
Dataobject
Changed¶
Migrate docker images to Fedora 33 and Ubuntu 20.04
25.1.0 - 2020-11-16¶
Added¶
Support Python processes in Sphinx
autoprocess*::directive
25.0.0 - 2020-10-16¶
Added¶
BACKWARD INCOMPATIBLE: Only copy parent relations when duplicating
DataobjectsAdd duplicate data dependency to indicate from which object the
Dataobject was duplicatedSupport accessing Data name in Python processes through
self.nameAdd
permissionfilter tocollection,entityanddatathat returns only objects on which current user has given permission
Changed¶
Make relations in collection visible to public user if he has view permissions on the collection
24.0.0 - 2020-09-14¶
Changed¶
BACKWARD INCOMPATIBLE: Terminate Python process immediately after
self.errormethod is called inside the process
Fixed¶
Make sure to terminate Docker container before executor exits
Speed-up duplication of
Dataobjects,Enteties, andCollectionsLock inputs’ storage locations while the process is waiting and processing to make sure that they are not deleted
Don’t validate input objects when
Dataobject is marked as done as they may already be deleted at that point
23.0.0 - 2020-08-17¶
Fixed¶
Fix ordering options in Data viewset to enable ordering by
process__nameandprocess__typeHandle exception when processing deleted Data object
Changed¶
BACKWARD INCOMPATIBLE: Delete
elasticapplicationDon’t pass undefined values to steps of workflows
Added¶
Add relations property to
data:andlist:data:fields to support relations on clientAdd
entity_idproperty doDataFieldin Python processesAdd relations in Python processes
22.1.3 - 2020-07-13¶
Fixed¶
When deciding which StorageLocation objects will be deleted consider only completed StorageLocation objects.
Add
google.resumable_media.common.DataCorruptionexception totransfer_exceptionstuple.
22.1.2 - 2020-06-30¶
Fixed¶
Celery sometimes starts more than one worker for a given Data object. In such case the download and purge part of the worker must be skipped or errors processing Data objects might occur.
22.1.1 - 2020-06-16¶
Changed¶
Remove
asgirefversion pin due to new release that fixed previous regression.
22.1.0 - 2020-06-15¶
Changed¶
Rename
transfer_rectotransfer_objectsand change its signature to accept dictionary objects with information about name, size and hashes of objects to transferMove part of
Dataobject validation to listenerImprove loading time of collection endpoint
Added¶
Add
move_to_collectionmethod toDataviewsetReport registration failure in
ProcessTestCaseAdd a pseudo Python process to serve as a template
Add
validate_urlsmethod to storageBaseConnectorclassValidate storage connector settings on registraton
Add
transfer_datamethod toStorageLocationclassRemove data when
StorageLocationobject is deletedStore file hashes inside
ReferencedPathmodel and connect it toStorageLocationmodelAdd
get_hashesmethod to storage connectorsAdd
open_streammethod to storage connectorsAdd
compute_hashesfunction tostorage.connectors.hashermoduleUse threads when transfering files with
AwsS3ConnectorAdd
duplicatemethod to storage connectorsAdd pre-processing and post-processing hooks to storage connectors
Use multiple threads for file transfer
Fixed¶
Add missing decorator
validate_urltoAwsS3ConnectorAlways import exceptions from
requestslibraryFix bug that sometimes caused objects inside workflow to fail with
Failed to transfer data.Fix dependency handling bug in listener: when checking for missing data listener must only consider depencies with kind
KIND_IOinstead of all depencies.Raise exception when data transfer failed.
22.0.0 - 2020-05-18¶
Changed¶
BACKWARD INCOMPATIBLE: Move purge code inside worker, remove old purge code
Various code fixes to make code work with the new storage model
Use storage connectors in workers to download data not available locally
Added¶
Add
resolwe.storageapplication, a framework for storage managementAdd storage connectors for Google Cloud Storage, Amazon Simple Storage service and local filesystem.
Add migrations to move from old storage model to the new one
Add storage manager
Add management command to start storage manager
Add cleanup manager for removing unreferenced data
Add
isnullrelated lookup filterAdd
entity_countto theCollectionserializerAdd
inherit_collectiontoDataviewsetAdd entity_always_create in
Processserializer
21.1.0 - 2020-04-14¶
Added¶
Add support for the
allow_custom_choicefield property in Python processesAdd ordering by contributor’s first and last name to Collection and Data viewsets
Add
data_countandstatusfields to theCollectionserializer
Fixed¶
Enable all top-level class definitions in Python processes
Make filtering via foreign key more ‘Django like’: when foreign key does not exist return empty set instead of raising validation exception. Also when filtering using list of foreign keys do not raise validation exception if some foreign keys in the list do not exist.
Reduce number of database queries in API viewsets by prefetching all required data
21.0.0 - 2020-03-16¶
Changed¶
BACKWARD INCOMPATIBLE: Use Postgres filtering instead of Elasticsearch on API endpoints
BACKWARD INCOMPATIBLE: Remove filtering by
year,month,day,hour,minuteandsecondon API endpointsMigrate docker images to Fedora 31
Use
DictRelatedFieldforcollectionfield inRelationSerializer. In practice this fixes inconsistency comparing with how other serializers handle collections field.
Added¶
Add a custom database connector to optimize queries and enable them to use database indexes
Add database indexes to improve search performance
Add database fields and triggers for full-text search in Postgres
Add support for annotating entities in processes
Add support for Python 3.8
20.2.0 - 2020-02-17¶
Added¶
Support workflows as inputs to Python processes
Support retrieval of
Data.namein Python processAdd
name_contains,contributor_name, andowners_namecollection and data filtering fields on APIAdd
usernametocurrent_user_permissionsfield of objects on APIAdd
delete_chunkedmethod to Collection, Entity and Storage managers
Fixed¶
Delete orphane Storage objects in chunks in purge command to prevent running out of memory
20.1.0 - 2019-12-16¶
Added¶
Add
descriptionfield to Collection full-text search
20.0.0 - 2019-11-18¶
Changed¶
BACKWARD INCOMPATIBLE: Remove
downloadpermission from Data objects, samples and collections andaddpermission from samples and collectionsBACKWARD INCOMPATIBLE: Remove
Entity.descriptor_completedfield
Fixed¶
Fix Docker executor command with
--cpuslimit option. This solves the issue where process is killed before the timeout 30s is reached
19.1.0 - 2019-09-17¶
Added¶
Support filtering by
process_sluginDataViewSet
Fixed¶
Fix
DictRelatedFieldso it can be used in browsable-APIFix access to subfields of empty
GroupFieldin Python processes
19.0.0 - 2019-08-20¶
Changed¶
BACKWARD INCOMPATIBLE: Change relations between
Data,EntityandCollectionfromManyToManytoManyToOne. In practice this means thatData.entity,Data.colllectonandEntity.collectionare nowForeignKey-s. This also implies the following changes:CollectionViewSetmethodsadd_dataandremove_dataare removedEntityViewsetmethodsadd_data,``remove_data``,add_to_collectionandremove_from_collectionare removedEntityQuerySetandEntitymethodduplicateargumentinherit_collectionsis renamed toinherit_collection.EntityFilterFilterSet fieldcollectionsis renamed tocollection.
BACKWARD INCOMPATIBLE: Change following fields in
DataSerializer:process_slug,process_name,process_type,process_input_schema,process_output_schemaare removed and moved inprocessfield which is nowDictRelatedFieldthat usesProcessSerializerfor representationRemove
entity_namesandcollection_namesfieldsadd
entityandcolectionfields which areDictRelatedField-s that use corresponding serializers for representationRemove support for
hydrate_entitiesandhydrate_collectionsquery parameters
BACKWARD INCOMPATIBLE: Remove
datafield inEntitySerializerandCollectionSerializer. This implies that parameterhydrate_datais no longer supported.BACKWARD INCOMPATIBLE: Remove
delete_contentparemeter indeletemethod ofEntityViewsetandCollectionViewSet. From now on, whenEntity/Collectionis deleted, all it’s objects are removed as wellGather all
Datacreation logic intoDataQuerySet.createmethod
Added¶
Enable sharing based on user email
Support running tests with live Resolwe host on non-linux platforms
Add
inherit_entityandinherit_collectionarguments toData.duplicateandDataQuerySet.duplicatemethodImplement
DictRelatedField
18.0.0 - 2019-07-15¶
Changed¶
BACKWARD INCOMPATIBLE: Remove
parentsandchildrenquery filters from Data API endpoint
Added¶
/api/data/:id/parentsand/api/data/:id/childrenAPI endpoints for listing parents and children Data objects of the object with givenidAdd
entity_always_createfield toProcessmodel
Fixed¶
Make sure that Elasticsearch index exists before executing a search query
17.0.0 - 2019-06-17¶
Changed¶
BACKWARD INCOMPATIBLE: Use Elasticsearch version 6.x
BACKWARD INCOMPATIBLE: Bump
Djangorequirement to version2.2BACKWARD INCOMPATIBLE: Remove not used
django-mathfiltersrequirement
Added¶
Support Python 3.7
Support forward and reverse many-to-one relations in Elasticsearch
Add
collection_namesfield toDataSerializerAdd test methods to
ProcessTestCasethat assert directory structure and content:assertDirExists,assertDir, andassertDirStructureAdd
upload-dirprocess
16.0.1 - 2019-04-29¶
Fixed¶
Pin
django-priority-batchto version1.1to fix compatibility issues
16.0.0 - 2019-04-16¶
Changed¶
BACKWARD INCOMPATIBLE: Access to DataField members (in Python process input) changed from dict to Python objects. For example,
input_field.file_field['name']changed toinput_field.file_field.path.BACKWARD INCOMPATIBLE: Filters that are based on
django-filterFilterSetnow use dict-declaring-syntax. This requires that subclasses of respective filters modify their syntax too.Interactively save results in Python processes
Added¶
Add get_data_id_by_slug method to Python processes’ Process class
Python process syntax enhancements:
Support
.entity_namein data inputsEasy access to process resources through
self.resources
Raise error if ViewSet receives invalid filter parameter(s)
Report process error for exceptions in Python processes
Report process error if spawning fails
Automatically export files for spawned processes (in Python process syntax)
Import files of Python process FileField inputs (usage: inputs.src.import_file())
Fixed¶
Interactively write to standard output within Python processes
Fix writing to integer and float output fields
Allow non-required
DataFieldas Python process input
15.0.1 - 2019-03-19¶
Fixed¶
Fix storage migration to use less memory
15.0.0 - 2019-03-19¶
Changed¶
Log plumbum commands to standard output
Change storage data relation from many-to-one to many-to-many
Moved
purgedfield fromDatatoDataLocationmodel
Added¶
Add
run_processmethod toProcessto support triggering of a new process from the running Python processAdd DataLocation model and pair it with Data model to handle data location
Add
entity_namesfield toDataSerializerSupport duplication of
Data,EntityandCollectionSupport moving entities between collections
Support relations requirement in process syntax
14.4.0 - 2019-03-07¶
Changed¶
Purge processes only not jet purged Data objects
Fixed¶
Allow references to missing Data objects in the output of finished Data objects, as we don’t have the control over what (and when) is deleted
14.3.0 - 2019-02-19¶
Added¶
Add
scheduledfield toDataobjects to store the date when object was dispatched to the scheduling systemAdd
purgefield toDatamodel that indicates whetherDataobject was processed bypurge
Fixed¶
Make Elasticsearch build arguments cache thread-safe and namespace cache keys to make sure they don’t interfere
Trigger the purge outside of the transaction, to make sure the Data object is commited in the database when purge worger grabs it
14.2.0 - 2019-01-28¶
Added¶
Add
inputJinja filter to access input fields
14.1.0 - 2019-01-17¶
Added¶
Add
assertFilesExistmethod toProcessTestCaseAdd
clean_test_dirmanagement command that removes files created during testing
Fixed¶
Support registration of Python processes inherited from
process.ProcessSkip docker image pull if image exists locally. This solves the issue where pull would fail if process uses an image that is only used locally.
14.0.1 - 2018-12-17¶
Fixed¶
Make sure that tmp dir exists in Docker executor
14.0.0 - 2018-12-17¶
Changed¶
BACKWARD INCOMPATIBLE: Run data purge in a separate worker to make sure that listener replies to the executor within 60 seconds
Use batcher for spawned processes in listener
Increase Docker’s memory limit for 100MB to make sure processes are not killed when using all available memory and tune Docker memory limits to avoid OOM.
Added¶
Raise an exception in Docker executor if container doesn’t start for 60 seconds
Set
TMPDIRenvironment variable in Docker executor to.tmpdir in data directory to prevent filling up container’s local storage
Fixed¶
Process SIGTERM signal in executor as expected - set the Data status to error and set the process_error field
Clear cached Django settings from the manager’s shared state on startup
13.3.0 - 2018-11-20¶
Changed¶
Switch channels_redis dependency to upstream version
Added¶
Python execution engine
Support multiple entity types
Support extending viewsets with custom filter methods
Add tags attribute to
ProcessTestCase.run_processmethod which adds listed tag to the createdDataobjectCopy
Dataobjects tags from parent objects for spawnedDataobjects andDataobjects created by workflows
Fixed¶
Fix manager shutdown in the test runner. If an unrecoverable exception occurred while running a test, and never got caught (e.g. an unpicklable exception in a parallel test worker), the listener would not get terminated properly, leading to a hang.
Data and collection name API filters were fixed to work as expected (ngrams was switched to raw).
13.2.0 - 2018-10-23¶
Added¶
Use prioritized batcher in listener
13.1.0 - 2018-10-19¶
Added¶
Use batching for ES index builds
Fixed¶
Fix handling of M2M dependencies in ES indexer
13.0.0 - 2018-10-10¶
Changed¶
BACKWARD INCOMPATIBLE: Remove Data descriptors from Entity Elasticsearch index
Support searching by
sluganddescriptor_datain entity viewset text search
Added¶
Add tags to collections
12.0.0 - 2018-09-18¶
Changed¶
BACKWARD INCOMPATIBLE: Switch
CollectionandEntityAPI viewsets to use ElasticsearchBACKWARD INCOMPATIBLE: Refactor
Relationmodel, which includes:renaming
positiontopartitionrenaming
labeltocategoryand making it requiredadding
unitmaking
collectionfield requiredrequiring unique combination of
collectionandcategoryrenaming partition’s
positiontolabeladding (integer)
positionto partition (used for sorting)deleting
Relationwhen the lastEntityis removed
BACKWARD INCOMPATIBLE: Remove rarely used parameters of the
registercommand--pathand--schemas.Omit
current_user_permissionsfield in serialization if only a subset of fields is requestedAllow slug to be null on update to enable slug auto-generation
Retire obsolete processes. We have added the
is_activefield to the Process model. The field is read-only on the API and can only be changed through Django ORM. Inactive processes can not be executed. Theregistercommand was extended with the--retireflag that removes old process versions which do not have associated data. Then it finds the processes that have been registered but do not exist in the code anymore, and:If they do not have data: removes them
If they have data: flags them not active (
is_active=False)
Added¶
Add support for URLs in
basic:file:fields in Django testsAdd
collectionsandentitiesfields to Data serializer, with optional hydration usinghydrate_collectionsand/orhydrate_entitiesSupport importing large files from Google Drive in re-import
Add
python3-plumbumpackage to resolwe/base:ubuntu-18.04 image
Fixed¶
Prevent mutation of
input_parameter inProcessTestCase.run_processReturn 400 instead of 500 error when slug already exists
Add trailing colon to process category default
Increase stdout buffer size in the Docker executor
11.0.0 - 2018-08-13¶
Changed¶
BACKWARD INCOMPATIBLE: Remove option to list all objects on Storage API endpoint
Make the main executor non-blocking by using Python asyncio
Debug logs are not send from executors to the listener anymore to limit the amount of traffic on Redis
Added¶
Add size to Data serializer
Implement
ResolweSlugRelatedField. As a result,DescriptorSchemaobjects can only be referenced byslug(instead ofid)Add options to filter by
typeandscheduling_classon Process API endpoint
Fixed¶
Inherit collections from
Entitywhen addingDataobject to it
10.1.0 - 2018-07-16¶
Changed¶
Lower the level of all
INFOlogs in elastic app toDEBUG
Added¶
Add load tracking to the listener with log messages on overload
Add job partition selection in the SLURM workload connector
Add
slugJinja filterSet
Datastatus toERRORif executor is killed by the scheduling system
Fixed¶
Include the manager in the documentation, make sure all references work and tidy the content up a bit
10.0.1 - 2018-07-07¶
Changed¶
Convert the listener to use asyncio
Switched to
channels_redis_persisttemporarily to mitigate connection storms
Fixed¶
Attempt to reconnect to Redis in the listener in case of connection errors
10.0.0 - 2018-06-19¶
Changed¶
BACKWARD INCOMPATIBLE: Drop support for Python 3.4 and 3.5
BACKWARD INCOMPATIBLE: Start using Channels 2.x
Added¶
Add the options to skip creating of fresh mapping after dropping ES indices with
elastic_purgemanagement commandAdd
dirnameandrelative_pathJinja filters
9.0.0 - 2018-05-15¶
Changed¶
Make sorting by contributor case insensitive in Elasticsearch endpoints
Delete ES documents in post delete signal instead of pre delete one
Added¶
BACKWARD INCOMPATIBLE: Add on-register validation of default values in process and schemas
BACKWARD INCOMPATIBLE: Validate that field names in processes and schemas start with a letter and only contain alpha-numeric characters
Support Python 3.6
Add
rangeparameter and related validation to fields of typebasic:integer:,basic:decimal,list:basic:integer:andlist:basic:decimalSupport filtering and sorting by
process_typeparameter on Data API endpointAdd
dirnameJinja filterAdd
relative_pathJinja filter
Fixed¶
Add missing
list:basic:decimaltype to JSON schemaDon’t crash on empty
inlookupFix {{ requirements.resources.* }} variables in processes to take in to the account overrides specified in Django settings
Create Elasticsearch mapping even if there is no document to push
8.0.0 - 2018-04-11¶
Changed¶
BACKWARD INCOMPATIBLE: Use Elasticsearch version 5.x
BACKWARD INCOMPATIBLE: Raise an error if an invalid query argument is used in Elasticsearch viewsets
BACKWARD INCOMPATIBLE: Switch
DataAPI viewset to use ElasticsearchTerminate the executor if listener response with error message
verbositysetting is no longer propagated to the executorOnly create Elasticsearch mappings on first push
Added¶
Add
sortargument toassertFileandassertFilesmethods inProcessTestCaseto sort file lines before asserting the contentAdd
process_slugfield toDataSerializerImprove log messages in executor and workload connectors
Add
process_memoryandprocess_coresfields toDatamodel andDataSerializerSupport lookup expressions (
lt,lte,gt,gte,in,exact) in ES viewsetsSupport for easier dynamic composition of type extensions
Add
elastic_mappingmanagement command
Fixed¶
Fix Elasticsearch index rebuilding after a dependant object is deleted
Send response to executor even if data object was already deleted
Correctly handle reverse m2m relations when processing ES index dependencies
7.0.0 - 2018-03-12¶
Changed¶
BACKWARD INCOMPATIBLE: Remove Ubuntu 17.04 base Docker image due to end of lifetime
BACKWARD INCOMPATIBLE: Remove support for Jinja in
DescriptorSchema’s default valuesBACKWARD INCOMPATIBLE: Remove
CONTAINER_IMAGEconfiguration option from the Docker executor; if no container image is specified for a process using the Docker executor, the same pre-defined default image is used (currently this isresolwe/base:ubuntu-16.04)Add mechanism to change test database name from the environment, appending a
_testsuffix to it; this replaces the static name used before
Added¶
Add Ubuntu 17.10 and Ubuntu 18.04 base Docker images
Add database migration operations for process schema migrations
Add
delete_chunkedmethod toDataobjects queryset which is needed due to Django’s extreme memory usage when deleting a large count ofDataobjectsAdd
validate_process_typesutility function, which checks that all registered processes conform to their supertypesAdd
FLOW_CONTAINER_VALIDATE_IMAGEsetting which can be used to validate container image namesOnly pull Docker images at most once per process in
list_docker_imagesAdd
FLOW_PROCESS_MAX_CORESDjango setting to limit the number of CPU cores used by a process
Fixed¶
Make parallel test suite worker threads clean up after initialization failures
Add mechanism to override the manager’s control channel prefix from the environment
Fix deletion of a
Dataobjects which belongs to more than oneEntityHydrate paths in
refsofbasic:file:,list:basic:file:,basic:dir:andlist:basic:dir:fields before processingDataobject
6.1.0 - 2018-02-21¶
Changed¶
Remove runtime directory during general data purge instead of immediately after each process finishes
Only process the Data object (and its children) for which the dispatcher’s
communicate()was triggeredPropagate logging messages from executors to the listener
Use process’ slug instead of data id when logging errors in listener
Improve log messages in dispatcher
Added¶
Add
descriptor_completedfield to theEntityfilterValidate manager semaphors after each test case, to ease debugging of tests which execute processes
Fixed¶
Don’t set Data object’s status to error if executor is run multiple times to mitigate the Celery issue of tasks being run multiple times
Make management commands respect the set verbosity level
6.0.1 - 2018-01-29¶
Fixed¶
Make manager more robust to ORM/database failures during data object processing
Rebuild the ElasticSearch index after permission is removed from an object
Trim
Data.process_error,Data.process_warningandData.process_infofields before saving themMake sure values in
Data.process_error,Data.process_warningandData.process_infocannot be overwrittenHandle missing
Dataobjects inhydrate_input_referencesfunctionMake executor fail early when executed twice on the same data directory
6.0.0 - 2018-01-17¶
Changed¶
BACKWARD INCOMPATIBLE:
FLOW_DOCKER_LIMIT_DEFAULTShas been renamed toFLOW_PROCESS_RESOURCE_DEFAULTSandFLOW_DOCKER_LIMIT_OVERRIDEShas been renamed toFLOW_PROCESS_RESOURCE_OVERRIDESBACKWARD INCOMPATIBLE:
Process.PERSISTENCE_TEMPis not used for execution priority anymoreBACKWARD INCOMPATIBLE: There is only one available manager class, which includes dispatch logic; custom manager support has been removed and their role subsumed into the new connector system
BACKWARD INCOMPATIBLE: Removed
FLOW_DOCKER_MAPPINGSin favor of newFLOW_DOCKER_VOLUME_EXTRA_OPTIONSandFLOW_DOCKER_EXTRA_VOLUMESParent relations are kept even after the parent is deleted and are deleted when the child is deleted
Dependency resolver in manager is sped up by use of parent relations
Validation of
Datainputs is performed on save instead of on create
Added¶
Support for the SLURM workload manager
Support for dispatching
Dataobjects to different managersSupport for passing secrets to processes in a controlled way using a newly defined
basic:secretinput typeis_testingtest helper function, which returnsTruewhen invoked in tests andFalseotherwiseAdd
collecttoolsDjango command for collecting tools’ files in single location defined inFLOW_TOOLS_ROOTDjango setting which is used for mapping tools in executor whenDEBUGis set toFalse(but not in tests)
Fixed¶
Fix
Dataobject preparation race condition incommunicate()Set correct executor in flow manager
Make executors more robust to unhandled failures
Calculate
Data.sizeby summingtotal_sizeof all file-type outputsDon’t change slug explicitly defined by user - raise an error instead
Objects are locked while updated over API, so concurrent operations don’t override each other
Make manager more robust to unhandled failures during data object processing
Fix manager deadlock during tests
Fix ctypes cache clear during tests
Don’t raise
ChannelFullerror in manager’s communicate callDon’t trim predefined slugs in
ResolweSlugField
5.1.0 - 2017-12-12¶
Added¶
Database-side JSON projections for
StoragemodelsCompute total size (including refs size) for file-type outputs
Add
sizefield toDatamodel and migrate all existing objects
Change¶
Change Test Runner’s test directory creation so it always creates a subdirectory in
FLOW_EXECUTOR’sDATA_DIR,UPLOAD_DIRandRUNTIME_DIRdirectories
Fixed¶
Do not report additional failure when testing a tagged process errors or fails
Fix Test Runner’s
changes-onlymode when used together with a Git repository in detachedHEADstateFix handling of tags and test labels together in Test Runner’s
changes-onlymodeFix parallel test execution where more test processes than databases were created during tests
5.0.0 - 2017-11-28¶
Changed¶
BACKWARD INCOMPATIBLE: The
keep_data()method inTransactionTestCaseis no longer supported. Use the--keep-dataoption to the test runner instead.BACKWARD INCOMPATIBLE: Convert the manager to Django Channels
BACKWARD INCOMPATIBLE: Refactor executors into standalone programs
BACKWARD INCOMPATIBLE: Drop Python 2 support, require Python 3.4+
Move common test environment preparation to
TestCaseHelpersmixin
Fixed¶
Fix parents/children filter on Data objects
Correctly handle removed processes in the changes-only mode of the Resolwe test runner
4.0.0 - 2017-10-25¶
Added¶
BACKWARD INCOMPATIBLE: Add option to build only subset of specified queryset in Elasticsearch index builder
--pulloption to thelist_docker_imagesmanagement commandTest profiling and process tagging
New test runner, which supports partial test suite execution based on changed files
Add
allandanyJinja filters
Changed¶
BACKWARD INCOMPATIBLE: Bump Django requirement to version 1.11.x
BACKWARD INCOMPATIBLE: Make
ProcessTestCasenon-transactionalPull Docker images after process registration is complete
Generalize Jinja filters to accept lists of
DataobjectsWhen new
Dataobject is created, permissions are copied from collections and entity to which it belongs
Fixed¶
Close schema (YAML) files after
registercommand stops using themClose schema files used for validating JSON schemas after they are no longer used
Close stdout used to retrieve process results in executor after the process is finished
Remove unrelated permissions occasionally listed among group permissions on
permissionsendpointFix
ResolwePermissionsMixinto work correctly with multi-words model names, i.e.DescriptorSchemaFix incorrect handling of offset/limit in Elasticsearch viewsets
3.1.0 - 2017-10-05¶
Added¶
resolwe/baseDocker image based on Ubuntu 17.04Support different dependency kinds between data objects
Fixed¶
Serialize
current_user_permissionsfield in a way that is compatible with DRF 3.6.4+API requests on single object endpoints are allowed to all users if object has appropriate public permissions
3.0.1 - 2017-09-15¶
Fixed¶
Correctly relabel SELinux contexts on user/group files
3.0.0 - 2017-09-13¶
Added¶
Add filtering by id on
descriptor_schmaAPI endpointSupport assigning descriptor schema by id (if set value is of type int) on
Collection,DataandEntityendpointsassertAlmostEqualGenerictest case helper, which enables recursive comparison for almost equality of floats in nested containers
Changed¶
BACKWARD INCOMPATIBLE: Run Docker containers as non-root user
Fixed¶
Use per-process upload dir in tests to avoid race conditions
2.0.0 - 2017-08-24¶
Added¶
descriptorjinja filter to get the descriptor (or part of it) in processesUbuntu 14.04/16.04 based Docker images for Resolwe
Add
list_docker_imagesmanagement command that lists all Docker images required by registered processes in either plain text or YAMLData status is set to
ERRORand error message is appended toprocess_errorif value ofbasic:storage:field is set to a file with invalid JSON
Changed¶
BACKWARD INCOMPATIBLE: Quote all unsafe strings when evaluating expressions in Bash execution engine
BACKWARD INCOMPATIBILE: Rename
permissionsattribute on API endpoints tocurrent_user_permissionsAPI
permissionsendpoint raises error if no owner is assigned to the object after applied changesownerpermission cannot be assigned to a groupObjects with public permissions are included in list API views for logged-in users
Owner permission is assigned to the contributor of the processes and descriptor schemas in the
registermanagement commandThe base image Dockerfile is renamed to Dockerfile.fedora-26
Fixed¶
Add
basic:url:linkfield to the JSON schemaReturn more descriptive error if non-existing permission is sent to the
permissionsendpointHandle errors occurred while processing Elasticsearch indices and log them
Return 400 error with a descriptive message if permissions on API are assigned to a non-existing user/group
1.5.1 - 2017-07-20¶
Changed¶
Add more descriptive message if user has no permission to add
Dataobject to the collection when the object is created
Fixed¶
Set contributor of
Dataobject to public user if it is created by not authenticated userRemove remaining references to calling
pipwith--process-dependency-linksargument
1.5.0 - 2017-07-04¶
Added¶
Add Resolwe test framework
Add
with_custom_executorandwith_resolwe_hosttest decoratorsAdd
isortlinter to check order of importsSupport basic test case based on Django’s
TransactionTestCaseSupport ES test case based on Django’s
TransactionTestCaseSupport process test case based on Resolwe’s
TransactionTestCaseAdd ability to set a custom command for the Docker executor via the
FLOW_DOCKER_COMMANDsetting.get_urljinja filterWhen running
registermanagement command, permissions are automatically granted based on the permissions of previous latest version of the process or descriptor schema.Set
parentrelation in spawnedDataobjects and workflowsRelations between entities
Resolwe toolkit Docker images
Archive file process
File upload processes
Resolwe process tests
Add
SET_ENVsetting to set environment variables in executorSupport ordering by version for descriptor schema
Add
NullExecutorIf
choicesare defined in JSON schema, value of field is validated with themAdd cpu core, memory and network resource limits
Add scheduling class for processes (
interactive,batch), which replaces the previously unused process priority fieldAdd
share_contentflag to the collection and entity permissions endpoint to also share the content of the coresponding objectAdd
delete_contentflag to the collection and entity destroy method on API to also delete the content of the coresponding object
Changed¶
Support running tests in parallel
Split
flow.modelsmodule to multiple filesRemove ability to set a custom executor command for any executor via the
FLOW_EXECUTOR['COMMAND']setting.Rename
RESOLWE_API_HOSTsetting and environment variable in executor toRESOLWE_HOST_URLRemove
keep_failedfunction in tests.Rename
keep_allfunction tokeep_data.Manager is automatically run when new
Dataobject is createdOutputs of
Dataobjects with statusErrorare not validatedSuperusers are no longer included in response in
permissionsendpoint of resourcesRemove
public_processesfield from theCollectionmodel as it is never usedPublic users can create new
Dataobjects with processes and descriptor schemas on which they have appropriate permissionsAdd custom
ResolweSlugFieldand use it instead ofdjango-autoslug
Fixed¶
SECURITY: Prevent normal users from creating new
Processesover APIConfigure parallel tests
Isolate Elasticsearch indices for parallel tests
Fix Docker container name for parallel tests
Generate temporary names for upload files in tests
Fix permissions in Elasticsearch tests
Do not purge data in tests
Remove primary keys before using cached schemas’ in process tests
Set appropriate SELinux labels when mounting tools in Docker containers
Dataobjects created by the workflow inherit its permissionsIf user doesn’t have permissions on the latest versions of processes and descriptor schemas, older ones are used or error is returned
Support
data:andlist:data:typesSet
Dataobject status to error if worker cannot update the object in the databaseDataobjects returned inCollectionViewsetandEntityViewsetare filtered by permissions of the user in requestPublic permissions are taken into account in elastic app
Treat
Nonefield value as if the field is missingCopy parent’s permissions to spawned
Dataobjects
1.4.1 - 2017-01-27¶
Fixed¶
Update instructions on preparing a release to no longer build the wheel distribution which currently fails to install Resolwe’s dependency links
1.4.0 - 2017-01-26¶
Added¶
Auto-process style, type tree and category index
Support loading JSON from a file if the string passed to the
basic:json:field is a file.list:basic:integer:fieldData object’s checksum is automatically calculated on save
get_or_createend point forDataobjectsbasic:file:html:field for HTML filesHelper function for comparing JSON fields in tests
Purge directories not belonging to any data objects
Ordering options to API endpoints
Workflow execution engine
data_by_slugfilter for jinja expression engineExport
RESOLWE_API_HOSTenvironment variable in executorAdd
check_installed()test utility functionAdd support for configuring the network mode of Docker executor
Add
with_docker_executortest utility decoratorSupport for Docker image requirements
Support version in descriptor schema YAML files
Add
Entitymodel that allows grouping ofDataobjectsIntroduce priority of Data objects
Data objects created with processes with temporary persistence are given high priority.
Add
resolwe.elasticapplication, a framework for advanced indexing of Django models with ElasticSearch
Changed¶
Refactor linters, check PEP 8 and PEP 257
Split expression engines into expression engines and execution engines
Use Jinja2 instead of Django Template syntax
Expression engine must be declared in
requirementsSet Docker Compose’s project name to
resolweto avoid name clashesExpose
check_docker()test utility functionUpdate versionfield to 0.5.0
Support Django 1.10 and update filters
Executor is no longer serialized
Put Data objects with high priority into
hipriCelery queue.
Fixed¶
Fix pylint warnings (PEP 8)
Fix pydocstyle warnings (PEP 257)
Take last version of process for spawned objects
Use default values for descriptor fields that are not given
Improve handling of validation errors
Ignore file size in
assertFieldsOrder data objects in
CollectionViewSetFix tests for Django 1.10
Add quotes to paths in a test process test-save-file
1.3.1 - 2016-07-27¶
Added¶
Sphinx extension
autoprocessfor automatic process documentation
1.3.0 - 2016-07-27¶
Added¶
Ability to pass certain information to the process running in the container via environment variables (currently, user’s uid and gid)
Explicitly set working directory inside the container to the mapped directory of the current
Data’s directoryAllow overriding any
FLOW_EXECUTORsetting for testingSupport GET request on /api/<model>/<id>/permissons/ url
Add OWNER permissions
Validate JSON fields before saving
DataobjectAdd basic:dir field
RESOLWE_CUSTOM_TOOLS_PATHSsetting to support custom paths for tools directoriesAdd test coverage and track it with Codecov
Implement data purge
Add
process_fields.namecustom tamplate tagReturn contributor information together with objects
Added permissions filter to determine
Storagepermissions based on referencedDataobject
Changed¶
Move filters to separate file and systemize them
Unify file loading in tests
Simplify
ProcessTestCaseby removing the logic for handling different uid/gid of the user running inside the Docker containerUpgrade to django-guardian 1.4.2
Rename
FLOW_EXECUTOR['DATA_PATH']setting toFLOW_EXECUTOR['DATA_DIR']Rename
FLOW_EXECUTOR['UPLOAD_PATH']setting toFLOW_EXECUTOR['UPLOAD_DIR']Rename
proc.data_pathsystem variable toproc.data_dirRename test project’s data and upload directories to
.test_dataand.test_uploadServe permissions in new format
Rename
assertFilesmethod inProcessTestCasetoassertFileand add newassertFilesmethod to checklist:basic:filefieldMake
flow.tests.run_processfunction also handle file pathsUse Travis CI to run the tests
Include all necessary files for running the tests in source distribution
Exclude tests from built/installed version of the package
Put packaging tests in a separate Tox testing environment
Put linters (pylint, pep8) into a separate Tox testing environment
Drop django-jenkins package since we no longer use Jenkins for CI
Move testing utilities from
resolwe.flow.teststoresolwe.flow.utils.testand fromresolwe.permissions.tests.basetoresolwe.permissions.utils.testAdd Tox testing environment for building documentation
Extend Reference documentation
Fixed¶
Spawn processors (add data to current collection)
Set collection name to avoid warnings in test output
Improve Python 3 compatibility
Fix setting descriptor schema on create
1.2.1 - 2016-05-15¶
Added¶
Add docker-compose configuration for PostgreSQL
Processes can be created on API
Enable spawned processes
Changed¶
Move logic from
Collectionmodel to theBaseCollectionabstract model and make it its parentRemove all logic for handling
flow_collectionChange default database user and port in test project’s settings
Keep track of upload files created during tests and purge them afterwards
Fixed¶
Test processes location agnostic
Test ignore timezone support
1.2.0 - 2016-05-06¶
Changed¶
Rename
assertFileExisttoassertFileExistsDrop
--process-dependency-linksfrom Tox’s pip configurationImprove documentation on preparing a new release
Added¶
Ability to use a custom executor command by specifying the
FLOW_EXECUTOR['COMMAND']settingMake workload manager configurable in settings
Fixed¶
Make Resolwe work with Python 3 again
Fix tests
Render data name again after inputs are resolved
Ensure Tox installs the package from sdist
Pass all Resolwe’s environment variables to Tox’s testing environment
Ensure tests gracefully handle unavailability of Docker
1.1.0 - 2016-04-18¶
Changed¶
Rename process_register manage.py command to register
Reference process by slug when creating new Data object
Run manager when new Data object is created through API
Include full DescriptorSchema object when hydrating Data and Collection objects
Add djangorestframework-filters package instead of django-filters
Added¶
Tox tests for ensuring high-quality Python packaging
Timezone support in executors
Generating slugs with django-autoslug package
Auto-generate Data name on creation based on template defined in Process
Added endpoint for adding/removeing Data objects to/from Collection
Fixed¶
Pass all Resolwe’s environment variables to Tox’s testing environment
Include all source files and supplementary package data in sdist
Make Celery engine work
Add all permissions to creator of flow_collection Colection
Set DescriptorSchema on creating Data objects and Collections
Loading DescriptorSchema in tests
Handle Exceptions if input field doesn’t match input schema
Trigger ORM signals on Data status updates
Don’t set status od Data object to error status if return code of tool is 0
1.0.0 - 2016-03-31¶
Changed¶
Renamed Project to Collection
Register processes from packages and custom paths
Removed support for Python 3.3
Added¶
Permissions
API for flow
Docker executor
Expression engine support
Celery engine
Purge command
Framework for testing processors
Processor finders
Support for Django 1.9
Support for Python 3.5
Initial migrations
Introductory documentation
0.9.0 - 2015-04-09¶
Added¶
Initial release.