* Introduce BuilderCard component family for use in query builder
* Implement BuilderCard in data card component
* Implement BuilderCard in selector list
* Update function selector
* Implement BuilderCard in tag selector and remove unused styles
* Use AddCardButton and proper container classname
* Remove unused imports
If a pattern is seen that matches the `v1.tagValues(...)` call, then it
will be replaced with a direct RPC call to read the tag values for the
selected tag key which should be better optimized than reading from the
storage engine tsm1 files.
Notify on 429 errors on query in dashboard and DE
Notify on 429 error in line protocol write
Query for limitStatus on Dashboard and DE load
Remove React import in LimitChecker
Rename limits folder to cloud
Add strict comparison to status code checking
Prevent blow up if error doesn't contain status
convert readLimit writeLimit to boolean sounding vars
If a pattern is seen that matches reading the tag keys, it will be
replaced with a direct RPC call to read the tag keys which should be
better optimized than reading from the storage engine tsm1 files.
When a tsi1 partition closes, it waits on the wait group for compactions
and then acquires the lock. Unfortunately, a compaction may start in the
mean time, holding on to some resources. Then, close will attempt to
close those resources while holding the lock. That will block until
the compaction has finished, but it also needs to acquire the lock
in order to finish, leading to deadlock.
One cannot just move the wait group wait into the lock because, once
again, the compaction must acquire the lock before finishing. Compaction
can't finish before acquiring the lock because then it might be operating
on an invalid resource.
This change splits the locks into two: one to protect just against
concurrent Open and Close calls, and one to protect all of the other
state. We then just close the partition, acquire the lock, then free
the resources. Starting a compaction requires acquiring a resource
to the partition itself, so that it can't start one after it has
started closing.
This change also introduces a cancellation channel into a reference
to a resource that is closed when the resource is being closed, allowing
processes that have acquired a reference to clean up quicker if someone
is trying to close the resource.