| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
earlier, but apparently not. Anyway, this works.
|
| |
|
|
| |
with_flushed_handles for truncate and position. It breaks sync if you do *both* the flushed form and then the obvious refactoring within it (i.e. pull the Handle1 up) and I can't quite see why
|
| |
|
|
| |
rabbit_misc:cmd. Not sure quite what to do about that...
|
| |
|
|
| |
that led to a /0, due to exhausting fhs just through calls to inc and dec (from sockets - only happens when the limit is very very low)
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\ |
|
| | | |
|
| |\ \
| |/ |
|
| | |\ |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | |
| | |
| | |
| | |
| | | |
This lets exchanges do arbitrary delivery inspection for routing,
arbitrary content rewriting or discarding, and arbitrary content
and delivery synthesis.
|
| | |/
| |
| |
| |
| |
| |
| | |
rabbit_exchange_behaviour. Split fanout, direct, topic and headers
into new modules that implement the new behaviour. Added convention
that for exchange type X, a module named rabbit_exchange_type_X must
exist.
|
| | | |
|
| | |
| |
| |
| | |
quite as neat as I wanted due to passing extra args through (the difficulty is in writing the with_flushed_handles - you can't write the fun in there to have any arity), so it's always a 2-arity function :: ([any()], [handle()]), but hey, it's still quite a lot nicer than it was.
|
| | |
| |
| |
| |
| |
| |
| |
| |
| | |
1) Every client keeps a gb_tree of timestamp-when-fd-was-last-used => fd_ref. This is updated for each action.
2) When a client opens a file or closes a file, it sends a suitable msg to the server, including the smallest timestamp-when-fd-was-last-used (i.e. least recently used fd)
3) The server counts how many fds have been used
4) When too many fds have been used, it finds the average age of the least-recently-used-fds and tells all clients to close anything older than that
5) This is likely to have no effect, because the clients may have since used the fds, thus the ages will be wrong. Regardless of whether any fds have been closed at this point, all the clients send back to the server their current smallest timestamp-when-fd-was-last-used
6) 2 seconds later, the server checks to see if the situation has improved, and if not, using the now updated information (thus the average age will be lower) may choose to further ask all clients to kill off fhs. This will repeat, albeit not that fast until enough fds have been closed.
|
| | | |
|
| |\ \
| |/ |
|
| | |\ |
|
| | |\ \ |
|
| | | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
of field-value to the generator (since field-value is used both for
field-table and field-array).
Also fixed a dumb mistake in the array bit of rabbit_binary_generator.
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | | |
code. Test case which mostly exercises the table encoding code.
|
| | |\ \ \ |
|
| | |/ / / |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | | |
over the last two periods, and assume zero rates when we hibernate.
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | | |
problems
|
| | | | |
| | | |
| | | |
| | | | |
pushed out to disk (duration == 0), and then more memory becomes available (eg queue death), then no queues will be brought back in. Therefore, if >= 5% of our memory is available, ensure that the sum is at least 1. This allows queues to come back in.
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | | |
using more than half the available RAM. 3. In VQ, sum the ingress and egress rates - this makes things much smoother when queues go from being flooded to being consumed, and vice versa.
|
| | | | |
| | | |
| | | |
| | | | |
desired avg duration should be 0. The queue will then be told this on its next report. This is potentially disasterous because for a fast moving queue, setting the duration to 0 will force allmsgs via the disk, which will destroy performance. However, it is not sufficient to just tell all queues reporting 0, infinity, because doing so would result in queues which have been pushed out to disk, suddenly coming all the way back in. Thus if a queue reports a duration of < 1, and the last value we told it was infinity, then we tell it infinity again. Thus fast moving queues are not restricted, and queues which have been told real numbers, and slowly squeezed out to disk stay squeezed out.
|
| | | | |
| | | |
| | | |
| | | | |
been no fetches/publishes since the last measurement, use the previous measurement, appropriately scaled. This means that the rates will gently fall off and approach zero in the absence of activity, which is preferable to them suddenly jumping to zero. Also, the average is now the sum of the fetches/publishes in the last two segments, over the time since the start of the last segment (i.e. it's better than before, which was just a straight /2, which would be wrong if the segments are different sizes, which they could be, given a very busy queue).
|
| | | | | |
|
| | | | |
| | | |
| | | |
| | | | |
they won't pass
|