Releases: HubSpot/Singularity
Singularity-1.5.0
Special Note
This is planned to be the final public release of Singularity. We want to thank all those that have contributed over the past years for all of their help! If you need assistance with Singularity the team will plan to keep the singularity-framework slack open for another few months.
Changes in 1.5.0
Check out the 1.5.0 milestone to see new features / bugfixes in detail.
Improvements
- 2290 - Add a class of scheduler-related metrics to expose more easily
- 2289 - Handle combined
cpu,cpuacct
cgroup mountpoints - 2282 - Add large scale down flag to client
- 2275 - Prevent accidental large scale downs
- 2272 - Add decom reasons to task cleaning messages
- 2270 - Run persisters in parallel
- 2264 - Add @Schema annotation to SingularityScheduledTasksInfo for JSON parsing
- 2260 - Add endpoint and client call to retrieve scheduled tasks info
- 2259 - Task Persister skips too long task Ids
- 2256 - Add UI support for freezing/unfreezing racks
- 2252 - Disasters UI Improvements
- 2253 - Cleanup old decommissioned agents
- 2246 - Add request-level maximum scale option
- 2245 - Request Priority API
- 2241 - Add fire alarm
- 2239 - Improve Offer Loop Usage of Request Locks
- 2226 - Configurably skip the file open check in S3Uploader.
- 2227 - Show request edit for some groups, add priority button
- 2228 - Support global overrides of request placement strategy/rack sensitivity
- 2225 - Curator framework improvements
- 2224 - Smarter timeouts in offer loop
- 2220 - Add request deploy history endpoint to SingularityClient
- 2205 - Refactor the LoadBalancerClient
- 2202 - Add media type to config resource
- 2199 - Add endpoint to get Singularity config values
- 2198 - S3Uploader aws client usage efficiency
- 2196 - Also check if a task is a killed task in rack placements
- 2192 - Support more stable canary deploys in Singularity
- 2195 - Optionally compress files prior to uploading them in SingularityS3Uploader.
- 2191 - Granular forced logrotate crons
- 2188 - Thread and stream clean up
- 2190 - Lifecycle tweaks for Singularity
- 2186 - Create thread pool that blocks when full
- 2187 - Add status queue size accessor for status update handler
- 2185 - Block reconciliation if queue nearly full
- 2182 - change bucket name in example
- 2183 - Bump version of mysql-connector-java
- 2184 - Make docker stop timeout overideable
- 2180 - Support fine-grained logrotateAdditionalFiles intervals, with a separate logrotate conf file for each configured interval
- 2176 - Opt in mode for Singularity emails
- 2177 - Clean up lifecycle ordering on shutdown
- 2173 - Remap names in disabled actions list
- 2172 - Added logging decorator for CuratorFramework to Audit ZK Endpoints
- 2167 - Counters for last persister successes
- 2168 - Add ability to re-add recovered tasks to the load balancer
- 2169 - Initialize last persister AtomicLongs to current time
- 2166 - Turn down some noisy logging
Bug Fixes
- 2285 - Task history handling when missing data
- 2287 - Omit on demand jobs from scale limit during deploy validation
- 2283 - Unused method fix
- 2284 - Handle tasks which no longer have data in zk
- 2280 - Update broken links
- 2281 - Various bug fixes and stability improvements
- 2278 - Fix up some s3 listing bugs
- 2276 - Fix client params
- 2274 - Address missing task data
- 2265 - Fix SingularityScheduledTasksInfo retrieval in client
- 2266 - Mutate request instances based on existing request
- 2269 - Retry failed tasks with new deploys
- 2262 - Fix npe for tasks with null hostnames from decommissioned host resources
- 2263 - Count all lost tasks as inactive
- 2257 - Fix npm dependencies
- 2247 - Restore old constructor in singularity request parent
- 2251 - Guice bindings for custom authorizer implementations
- 2244 - Avoid Request Locks With Task Lag
- 2243 - Clean up more zk parent nodes for stale requests
- 2240 - Cleanup hosts marked as missing on startup
- 2237 - Limit # of crash loop nodes for requests without requiring new deploys
- 2238 - Fix NoSuchFileExceptions in S3Uploader
- 2236 - Fix junit jupiter setup
- 2234 - Log task resource usage at trace level
- 2235 - Avoid null next value in zk curator load distributor
- 2230 - Fix possible port collisions across tasks again
- 2233 - Better handling of errors in scheduler poller
- 2215 - Fix possible port collisions across tasks
- 2213 - Caffeine cache for request api
- 2214 - Replace caffeine cache with reference to full map
- 2212 - Prevent map merge issues in artifact verification
- 2210 - Check against artifacts without signatures
- 2208 - Add taskId to loadbalancer upstream
- 2207 - Add extension to agent decom
- 2203 - Only run force logrotates for cron-faked logrotate confs which actually exist on the filesystem
- 2204 - Extra logging in deploy checker
- 2200 - One additional null check in uploader client return
- 2197 - Correctly render cron entries for size-based logrotation.
- 2175 - Throw exception to resubscribe to mesos
- 2170 - Default to user id when no email available in notifications
Documentation
- 2218 - Update adopters.md
Singularity-1.4.0
Changes in 1.4.0
Check out the 1.4.0 milestone to see new features / bugfixes in detail.
New Features
Improvements
- 2158 - Stability improvements for sql/zk usage
- 2160 - More efficient active tasks for request listing
- 2152 - Don't include history in leader cache query + more efficient task persister
- 2155 - Sql read only mode
- 2146 - Better auth docs
Bug Fixes
- 2156 - Fix accidental crash loop dedupe
- 2153 - Also check history if not in leader cache
- 2150 - sentry cleanup in s3uploader
- 2148 - Fix class cast errors in SingularityClient
Documentation
- 2146 - Better auth docs
Thanks
Singularity-1.3.0
Changes in 1.3.0
Check out the 1.3.0 milestone to see new features / bugfixes in detail. This release contains a few major items worth calling out separately:
- 2103 and 2133 adds a long overdue rename of Singularity Slave -> Agent. This is implemented across endpoint names, json bodies, and the java client. All method names/class names/endpoints should be backwards compatible. Old methods are marked as deprecated and will be removed in a future release (TBD).
- 2092 reworks singularity webhook auth to add a new version with more granular permissions. This will allow groups as well as scopes to be taken into account to more easily limit read, read/write, admin actions across users
New Features
Improvements
- 2140 - Add a cheaper endpoint to return the counts of tasks for a request
- 2099 - Updated history search endpoint with additional params
- 2100 - Additional deploy validation
- 2101 - Add ability to auth to mesos http endpoints
- 2098 - Add button for manual leader failover
- 2094 - Render page while fetching history tables
- 2088 - Allow service module override
- 2090 - Enable prettier java
- 2086 - Configurable variables for docker container to inherit from executor
- 2083 - S3 uploader + executor cleanup efficiency improvements
- 2132 - Add method for guice bundle modification
- 2126 - Use leader cache first for launching check, also check staging tasks
- 2119 - Add orderDirection param to history endpoint
- 2116 - Add warning about override and lb updates
- 2117 - Filter getRequestHistory queries by createdAt times
- 2113 - More complete info level logging on offers
- 2109 - Wire up a
size
override for logrotateAdditionalFiles - 2108 - Track shutdown time in status message
- 2106 - Specify which artifacts are missing signature in error
- 2070 - Less Terminal add on
- 2078 - Expose host sandbox path
Bug Fixes
- 2137 - Missed a rename in Path
- 2138 - Forgotten renames in SingularitySandbox object
- 2139 - Check both names for query params on downloads
- 2105 - Force index for task history requests by host and start/update times
- 2096 - Fix less tailer URLs for large files
- 2097 - Sandbox permissions update should be recursive
- 2093 - Pin xterm versions to avoid compatibility issues
- 2089 - Uncaught exception should result in failed deploy
- 2091 - fix typo for task duration warning
- 2085 - Periodically reconcile the list of metadata files in s3uploader
- 2080 - Don't truncate long request ids on details page
- 2130 - Do not retry ON_DEMANDs kill by a pause of the request
- 2131 - Fix PostgreSQL typos
- 2128 - Make crash loops resolve faster
- 2129 - Don't reactivate tasks on agent reregistration after lb removal
- 2124 - Fix updated request instance count
- 2123 - Filter to only starting tasks when reconciling
- 2107 - Only keep the most recent 50 failure events
- 2081 - Fix
logrotateadditionalfiles
deletion. - 2077 - Consider an exit of 0 before file health check a success
Thanks
Singularity-1.2.0
Changes in 1.2.0
Check out the 1.2.0 milestone to see new features / bugfixes in detail.
New Features
Improvements
- 2074 - Log extra information about the docker image we are about to use
- 2071 - Better exposure of LB status in UI
- 2065 - Quieter offer logging
- 2062 - Remove unused import in RequestResource
- 2063 - Debounce UI Request/Task Search
- 2059 - Do not retry ON_DEMAND tasks which were killed by user request.
- 2060 - Self Service Shuffle Opt Out
- 2057 - Slightly Smarter Task Shuffling
- 2058 - Version SingularityUI assets
- 2051 - Better crash loop detection
- 2052 - Carry forward "Task launched because" message when retrying task.
- 2050 - Better preferential scheduling
- 2049 - Prioritize memory shuffles over cpu
Bug Fixes
- 2056 - Validate counts of racks to avoid accidental addition
- 2072 - Quiet down some exceptions that don't matter
- 2073 - Fix unauthorized error message
- 2069 - Fix run now modal not being able to tail task launch
- 2067 - Remove old static build settings
- 2068 - Consistently compare memory in GB, not MB/B
- 2066 - Automatically handle tasks that might be stuck in launching status
- 2064 - Prevent request action modals from closing upon regaining focus
- 2061 - Properly reconnect after losing mesos master connection
- 2054 - fix mismatch in http/https protocol
- 2048 - Don't mutate args in lb sync comparison
- 2046 - Process a reconciliation for all tasks with missing state in zk
Thanks
Singularity 1.1.0
Changes in 1.1.0
Check out the 1.1.0 milestone to see new features / bugfixes in detail.
Singularity 1.1.0
is mainly focused on scheduler performance. Internally we have also begun testing this version on java 11. Some java 11 notes:
- While the default GC algorithm for java 11 has been updated to G1, we have seen better scheduler throughput and overall performance for SingularityService using parallelgc. We have not yet extensively tested zgc for Singularity
- The SingularityExecutor must be upgraded to 1.1.0 to work with java 11. Earlier versions of all other components should still function on java11, but may not be as performant without the upadtes in this release
- If using mysql with Singularity, the ssl-related updates in the updated version of mysql-connector-java will provide much better performance and remove an error that would previously get logged whenever a new connection was created
New Features
- 2035 - New client method to get active tasks' ids
- 2036 - Add endpoint to fetch all active task states
- 2009 - Add ability to override environment in run now modal
- 1971 - Filtered S3 task sandbox file search (API Only)
Improvements
- 2039 - Make task history persister not use the request level lock
- Scheduler Performance Improvements
- Java 11 Support Updates
- 2018 - Add hour to s3 key format options
- 2014 - Don't immediately clean all history items, let the history purger do it
- 2008 - Make the request id global search include all but deleted requests
- 2011 - Retry more TASK_LOST cases on deploy
- 2012 - Show the runId in task tables on request detail page
- 2000 - Module + ObjectMapper cleanup
Bug Fixes
- 2038 - Catch more SQL exceptions in persister queries
- 2037 - offer executor needs at least 2 threads
- 2033 - Don't allow LB sync to remove last remaining upstreams
- 2029 - Race condition fixes
- 2022 - Just log the task ID in new task checker so we can see the throwable
- 2019 - Remount RequestDetailPage when jumping between requests
- 2021 - return early for missing deploy
- 2016 - Ensure delayed oneoff tasks get rescheduled on new deploy
- 2013 - Validate number of ports in run now resource overrides
- 2010 - Clear resource usage after a new deploy
- 2006 - Fix for overdue missing deploy
- 2003 - Task history ui updates for sort
- 2041 - Findbugs fixes
Documentation
- 2015 - Updated cooldown docs
Thanks
Singularity 1.0.0
Changes in 1.0.0
Singularity has been running our production infrastructure at HubSpot for years and the team is happy to announce a (probably long overdue) 1.0.0
release. Check out the 1.0.0 milestone to see new changes in detail.
Breaking Changes
Singularity 1.0.0
includes a pile of tech debt cleanup. The most significant of these is a move from the deprecated guava Optional
to the newer java.util.Optional
. Any java clients using the SingularityBase
or SingularityClient
modules will need to update appropriately. While very similar, the two Optional
s are not binary compatible. This article breifly explains a few of the differences.
Improvements
- 1986/1993/1992 - Tech debt cleanup and dependency updates
- 1994 - Bump bootstrap from 3.3.7 to 3.4.1
- 1996 - Bump eslint from 2.13.1 to 4.18.2
Bug Fixes
Singularity 0.23.0
Changes in 0.23.0
Check out the 0.23.0 milestone to see new features / bugfixes in detail. 0.23.0
in general represents a number of performance improvements in relation to Singularity's usage of zookeeper and mysql as well as a mesos version bump.
Migrations
MySQL/Postgres
0.23.0
contains multiple database migrations (#1928 + #1956). These must be run BEFORE deploying the new version of SingularityService and are compatible with the running 0.22.0 release. You can check out our docs on migrations to run these with liquibase. If you manage a larger installation of Singularity utilizaing mysql (e.g. millions of tasks in task history), we recommend running the migrations using pt-online-schema-change to minimize interruptions. Migrations and ptosc arguments are listed below for convinience:
- Addition of usage tracking table - This can be run with liquibase since it is a non-blocking migration and is the first changeSet in the new release. To run only a single changeSet in liquibase (e.g. to then run the remaining ones with ptosc), add the
--count 1
option when runningdb migrate
- Change requestHistory table charset + add json column -
--alter "CHARACTER SET ascii COLLATE ascii_bin, MODIFY COLUMN request blob DEFAULT NULL, MODIFY COLUMN requestId varchar(100) CHARACTER SET ascii COLLATE ascii_bin NOT NULL, MODIFY COLUMN requestState ENUM ('CREATED', 'UPDATED', 'DELETING', 'DELETED', 'PAUSED', 'UNPAUSED', 'ENTERED_COOLDOWN', 'EXITED_COOLDOWN', 'FINISHED', 'DEPLOYED_TO_UNPAUSE', 'BOUNCED', 'SCALED', 'SCALE_REVERTED') NOT NULL, MODIFY COLUMN user varchar(100) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL, MODIFY COLUMN message varchar(280) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, ADD COLUMN json JSON DEFAULT NULL"
- Change deployHistory table charset + add json column -
--alter "CHARACTER SET ascii COLLATE ascii_bin, MODIFY COLUMN bytes MEDIUMBLOB DEFAULT NULL, MODIFY COLUMN requestId varchar(100) CHARACTER SET ascii COLLATE ascii_bin NOT NULL, MODIFY COLUMN deployId varchar(100) CHARACTER SET ascii COLLATE ascii_bin NOT NULL, MODIFY COLUMN user varchar(100) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL, MODIFY COLUMN message varchar(280) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL, MODIFY COLUMN deployState ENUM ('SUCCEEDED', 'FAILED_INTERNAL_STATE', 'CANCELING', 'WAITING', 'OVERDUE', 'FAILED', 'CANCELED') NOT NULL, ADD COLUMN json JSON DEFAULT NULL"
- Change taskHistory table charset/enums + add json column -
--alter "CHARACTER SET ascii COLLATE ascii_bin, MODIFY COLUMN bytes MEDIUMBLOB DEFAULT NULL, MODIFY COLUMN taskId varchar(200) CHARACTER SET ascii COLLATE ascii_bin NOT NULL, MODIFY COLUMN requestId varchar(100) CHARACTER SET ascii COLLATE ascii_bin NOT NULL, MODIFY COLUMN lastTaskStatus ENUM ('TASK_LAUNCHED', 'TASK_STAGING', 'TASK_STARTING', 'TASK_RUNNING', 'TASK_CLEANING', 'TASK_KILLING', 'TASK_FINISHED', 'TASK_FAILED', 'TASK_KILLED', 'TASK_LOST', 'TASK_LOST_WHILE_DOWN', 'TASK_ERROR', 'TASK_DROPPED', 'TASK_GONE', 'TASK_UNREACHABLE', 'TASK_GONE_BY_OPERATOR', 'TASK_UNKNOWN') NOT NULL, MODIFY COLUMN runId varchar(100) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL, MODIFY COLUMN deployId varchar(100) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL, ADD COLUMN json JSON DEFAULT NULL, ADD KEY requestDeployUpdated (requestId, deployId, updatedAt), ADD KEY hostUpdated (host, updatedAt)"
- Change taskUsage table charset -
--alter "CHARACTER SET ascii COLLATE ascii_bin ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8, MODIFY COLUMN requestId varchar(100) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT '', MODIFY COLUMN taskId varchar(200) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT ''"
As seen above, these migrations prep Singularity to use mysql's json data type instead of a blob for history storage. All net-new history will be stored in the json format and old lob columns are not yet dropped. Singularity will look for either format currently when fetching individual task histories. You can kick off a backfill of data from blob -> json format by sending an http POST to the /api/history/sql-backfill?batchSize=20
endpoint on SingularityService (batch size is configurable to balance resources vs speed). If Singularity need to restart/etc, this process is idempotent and can be kicked off as many times as needed, though only one invocation can run at a time.
Zookeeper
On startup, Singularity will run a number of migrations to zookeeper task data. These are aimed at reducing the possible size of any single zookeeper read. You may notice that the first startup of the new Singularity release is slower due to these changes running. This migration is idempotent and will be re-attempted on next startup if it should fail.
Mesos Version Upgrade
Singularity 0.23.0
is build against mesos 1.8, but should be compatible with all earlier 1.x versions of mesos
New Features
- 1958 - Configurably request DNS preresolution for load-balanced services
- 1955 - Pre-resolve upstreams for Singularity-managed BaragonServices.
Performance Improvements
- 1976 - UI Performance Updates for active/pending tasks pages
- 1972 - More efficient active tasks call for executor cleanup
- 1956 - SQL migrations for efficiency (blob -> json + utf8 -> ascii)
- 1963 - Also purge old deploy and request history from SQL
- 1920 - Add ability to do sns-based updates instead of webhooks
- 1922 - The zoo is under new management (zk cleanup)
- 1938 - Make Slave/Rack Resource use proxy to leader
- 1932 - Refactor calling of offer evaluation
- 1939 - Add option to fetch a batch of requests
- 1928 - MySQL task resource usage storage
- 1906 - Reduce S3Uploader memory usage during directory scan
General Improvements
- 1962 - Support searching for request logs with a specified date range via SingularityClient.
- 1791 - Allow fetching full request data (with deploy data) in SingularityClient
- 1975 - junit5
- 1957 - Bump Baragon version to 0.9.0.
- 1961 - Rework cooldown logic
- 1954 - UI And Other Improvements
- 1919 - Configurably skip shell command prefix for Docker tasks only.
- 1908 - Cleaner failover + update dependencies
- 1909 - Skip fuser/lsof check when uploader is marked as immediate
- 1944 - Handle status updates from recovering agents appropriately
- 1951 - Add builder methods to
SingularityRequestBuilder
&SingularityDeployBuilder
- 1945 - Bump to mesos 1.8.0
- 1946 - Alternative way to specify auth for the mesos scheduler api
- 1947 - Add zk leader indicator on status ui
- 1941 - Add ability to disable task shuffle from UI
- 1942 - Check assigned ports are available in SingularityExecutor
- 1943 - Upstream validation
- 1937 - Shuffle tasks on hosts with overutilized memory resources
- 1930 - Flag for immediate task history persist
- 1915 - Make Singularity report byte counts to monitor against jute buffer size
- 1914 - Fix handling of file-based health check failure
- 1905 - Add token authenticator option
Bug Fixes
- 1978 - Fix deploy link on requests page + pending tasks table
- 1979 - Fix missing extension for additional logrotate file
- 1969 - Calculate max task lag after excluding on demands with instance limit
- 1970 - Proxy deploy cancellations to leader
- 1973 - tweak cooldown thresholds and evaluation logic
- 1974 - Fix task history page size on refresh
- 1953 - Only clean if the sandbox directory still exists.
- 1966 - Fix request ...
Singularity 0.22.0
Changes in 0.22.0
Check out the 0.22.0 milestone to see new features / bugfixes in detail. 0.22.0
represents an upgrade to mesos 1.6.1
. This also includes an upgrade to protobuf 3 and a move to a separate fork of mesos-rxjava. Instuctions for upgrading mesos can be found here. In internal testing we found communications between old mesos master/upgraded scheduler and vice versa were both backwards compatible back to mesos 1.1.0
.
New Features
- 1873 - Non-http health checks
Improvements
- 1893 - Use a profile to build for postgresql
- 1894 - Add trace logging for header passthrough authenticator
- 1895 - Add option to specify executor cleanup creds in file
- 1885 - Add guava/jdk8 modules to default SingularityClient object mapper
- 1887 - Remove all switch user bits from docker wrapper
- 1880 - Improve ExtendedTaskState readability
- 1888 - Report uploader/downloader metrics by writing to a file.
- 1891 - Add ability to set uploader additional files at deploy level
- 1849 - Slave attribute minimums
- 1876 - Better alerting for task lag
- 1877 - Update alert banner to only show when there's a widespread issue for task lag
- 1878 - Add support for inactive task history filtered by deploy ID
- 1875 - Ability to rotate at a max service log size
- 1854 - Ability to open sandbox files from SingularityUI
- 1867 - Upgrade to mesos 1.6.1 and fork of mesos-rxjava
- 1869 - Faster run now enqueue
- 1860 - Make SingularityUI snappier
Bug Fixes
- 1882 - Be sure to remove expiring bounces when a bounce completes
- 1847 - Ability to set 'shell' in deploy ui
- 1883 - Acquire a request-level lock when persisting deploy history.
- 1879 - Make task history paging less flaky
- 1881 - Don't count pending tasks limited by instance count in task lag
- 1874 - Additional updates for backpressure handling
- 1853 - Failover when we miss Mesos Master heartbeats.
- 1868 - Email unsubscription bugfix
- 1866 - Clean up logrotate files sooner
- 1871 - Add ability to ignore logrotate hourly output
- 1863 - Grab the request lock when persisting request/deploy history
Documentation
- 1884 - Fix broken docs link
Thanks
Singularity 0.21.0
Changes in 0.21.0
Check out the 0.21.0 milestone to see new features / bugfixes in detail.
New Features
- 1844 - Add postgres support for JDBIHistory
- 1843 - Add email unsubscriptions endpoint
- 1838 - Customizable bash in startup script
Improvements
- 1852 - Use a lock & a timeout when checking whether an upload target file is open
- 1851 - lsof alternative for open files check
- 1835 - UI - Don't autofocus the search
- 1834 - Option to skip scheduling on slaves with missing usage data
- 1833 - Move directory logging to trace level
- 1801 - Add deep link page number to task history page
- 1829 - Prepare a StreamingOutput response when serving file downloads
- 1832 - Nix the old dashboard and default to requests page
- 1831 - Only run a single history persister at once
- 1822 - Prevent new host overloading
- 1826 - Only require read authorization to view list of slaves
- 1817 - Proxy download from Mesos slave over Singularity. Users no longer require direct mesos slave api access to download files
- 1814 - Updated logrotate frequency to allow for an override
Bug Fixes
- 1846 - Logic fix for rebalance racks cleanup
- 1850 - Make requestUtilization map thread safe.
- 1841 - Fix required groups auth check on requests endpoints
- 1839 - Remove sort in getPortByIndex
- 1840 - Don't try to parse task ids from other frameworks
- 1836 - Remove second declaration of defaultProps in UITable in SingaularityUI.
- 1837 - Carry forward resource overrides when retrying run-nows.
- 1825 - Deprioritize STARTUP-type pending requests.
- 1815 - Clarify global search message
- 1810 - Task cleanup fixes for decommission and delete
- 1811 - Create task cleanups for scale down at request update time
Documentation
- Redo gitbook to include newer swagger ui based on openapi json (http://getsingularity.com/Docs/reference/api.html)
Thanks
- @mikebell90
- @baconmania
- @pschoenfelder
- @Tamba32
- @kdorosh
Singularity 0.20.1
Changes in 0.20.1
This is a bug fix release
Bug Fixes
- Check for undefined request data in UI (0daf792)[https://github.com/HubSpot/Singularity/commit/0daf7929ae6c58ce10ebd5dc88deff4bc6d193e3]