dependabot[bot] opened a new pull request, #19962:
URL: https://github.com/apache/druid/pull/19962

   Bumps [com.github.fppt:jedis-mock](https://github.com/fppt/jedis-mock) from 
1.1.12 to 1.1.17.
   <details>
   <summary>Release notes</summary>
   <p><em>Sourced from <a 
href="https://github.com/fppt/jedis-mock/releases";>com.github.fppt:jedis-mock's 
releases</a>.</em></p>
   <blockquote>
   <h2>1.1.17</h2>
   <p>This release is about <strong>string and set command fidelity</strong>: 
four commands that were missing are implemented, and the argument parsing 
behind them was tightened.</p>
   <h2>๐Ÿš€ New commands</h2>
   <ul>
   <li><strong><a 
href="https://valkey.io/commands/getex/";><code>GETEX</code></a></strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/813";>#813</a>).</li>
   <li><strong><a 
href="https://valkey.io/commands/getrange/";><code>GETRANGE</code></a> and 
<code>SUBSTR</code></strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/815";>#815</a>).</li>
   <li><strong><a href="https://valkey.io/commands/set/";><code>SET ... 
GET</code></a></strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/815";>#815</a>) โ€” the 
option was parsed but silently ignored. It now replies with the previous value 
held by the key.</li>
   <li><strong><a 
href="https://valkey.io/commands/sintercard/";><code>SINTERCARD</code></a></strong>
 (<a href="https://redirect.github.com/fppt/jedis-mock/issues/817";>#817</a>) 
.</li>
   </ul>
   <h2>๐Ÿž Bug fixes</h2>
   <ul>
   <li><strong><code>SET</code> silently accepted unknown and conflicting 
options</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/815";>#815</a>): 
<code>SET foo bar non-existing-option</code> stored the value and replied 
<code>OK</code>.</li>
   <li><strong><code>SET ... NX</code>/<code>XX</code> raised 
<code>WRONGTYPE</code> against a key of another type</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/815";>#815</a>). 
<code>SET mylist v NX</code> must reply nil and <code>SET mylist v XX</code> 
must replace the list with a string; both errored instead.</li>
   <li><strong>Integer arguments were parsed more leniently than Redis</strong> 
(<a href="https://redirect.github.com/fppt/jedis-mock/issues/817";>#817</a>). 
Redis uses <code>string2ll</code>, which rejects <code>+1</code>, 
<code>01</code>, <code>-0</code> and <code>&quot; 1&quot;</code>.</li>
   <li><strong>Set commands did not check their argument count</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/816";>#816</a>): 
<code>SADD</code>, <code>SCARD</code>, <code>SDIFF</code>, <code>SINTER</code>, 
<code>SISMEMBER</code>, <code>SMEMBERS</code>, <code>SMOVE</code>, 
<code>SPOP</code>, <code>SREM</code>, <code>SSCAN</code>, <code>SUNION</code> 
and the <code>*STORE</code> variants now declare arity bounds and reply 
<code>ERR wrong number of arguments for '&lt;cmd&gt;' command</code> instead of 
accepting a malformed call.</li>
   </ul>
   <h2>๐Ÿงช Testing</h2>
   <ul>
   <li>Upstream native tests re-enabled: three <code>GETEX</code> cases in 
<code>unit/expire.tcl</code>, the <code>GETRANGE</code> blocks in 
<code>unit/type/string.tcl</code>, and all five <code>SINTERCARD</code> blocks 
in <code>unit/type/set.tcl</code>.</li>
   </ul>
   <h2>๐Ÿ’ผ Dependencies</h2>
   <ul>
   <li><code>org.redisson:redisson</code> 4.6.1 โ†’ 4.7.0 (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/814";>#814</a>). Test 
scope only; the runtime dependencies are unchanged.</li>
   </ul>
   <h2>1.1.16</h2>
   <h2>โœจ Keyspace notifications</h2>
   <p>Jedis-Mock now emits keyspace notifications (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/406";>#406</a>, <a 
href="https://redirect.github.com/fppt/jedis-mock/issues/809";>#809</a>), so 
code that reacts to key changes โ€” Spring Session's 
<code>@EnableRedisIndexedHttpSession</code>, cache invalidation listeners, 
Redisson objects with listeners โ€” can be tested against the mock.</p>
   <ul>
   <li><strong><code>notify-keyspace-events</code> is a real configuration 
parameter</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/811";>#811</a>). The 
flag string is parsed and validated instead of being stored verbatim, and 
<code>CONFIG GET</code> reports it back in Redis's canonical form 
(<code>Egx</code> โ†’ <code>gxE</code>, <code>KEA</code> โ†’ <code>AKE</code>). An 
unknown flag character is rejected with Redis's own message and leaves the 
previous value in place.</li>
   <li><strong>Both channel families are published</strong>: 
<code>__keyspace@&lt;db&gt;__:&lt;key&gt;</code> (<code>K</code>) and 
<code>__keyevent@&lt;db&gt;__:&lt;event&gt;</code> (<code>E</code>).</li>
   <li><strong>Event classes supported</strong>: <code>g</code> generic, 
<code>x</code> expired (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/811";>#811</a>), and 
<code>$</code> string, <code>l</code> list, <code>s</code> set, <code>h</code> 
hash, <code>z</code> sorted set, <code>t</code> stream, <code>n</code> new-key 
(<a href="https://redirect.github.com/fppt/jedis-mock/issues/812";>#812</a>) โ€” 
every class the mock can meaningfully support. See the new <em>Keyspace 
notifications</em> section in the README for the full event table and the 
remaining limitations.</li>
   <li>Event names and orderings were established by probing 
<code>redis:7.4-alpine</code> and pinned with comparison tests, not inferred 
from command names โ€” so the counter-intuitive ones are right: 
<code>DECRBY</code> reports <code>incrby</code>, <code>ZINCRBY</code> reports 
<code>zincr</code>, <code>UNLINK</code> reports <code>del</code>, 
<code>HSETNX</code>/<code>HMSET</code> report <code>hset</code>, a 
multi-element <code>LPUSH</code> reports one event, emptying a container adds a 
generic <code>del</code>, and <code>new</code> precedes the type's own 
event.</li>
   <li><strong><code>CLIENT REPLY ON|OFF|SKIP</code></strong> is implemented 
(<a href="https://redirect.github.com/fppt/jedis-mock/issues/811";>#811</a>). It 
used to be a no-op that returned <code>+OK</code>, which desynchronised 
clients. Suppression covers command replies and errors, never pub/sub 
pushes.</li>
   </ul>
   <p>Not covered: the <code>e</code> (evicted), <code>m</code> (key-miss) and 
<code>d</code> (module) classes, <code>xgroup-*</code> events (the 
consumer-group commands are unimplemented), and events from background expiry โ€” 
the mock expires keys lazily, so a key nobody touches produces its 
<code>expired</code> event later than a real server would.</p>
   <h2>๐Ÿž Bug fixes</h2>
   <ul>
   <li><strong>Pub/Sub was scoped to a database instead of the server</strong> 
(<a href="https://redirect.github.com/fppt/jedis-mock/issues/810";>#810</a>): a 
message published on db 0 was invisible to a subscriber on db 1. The 
subscription registries moved out of the per-database <code>RedisBase</code> 
into a server-wide <code>SubscriptionRegistry</code>, which also fixes two 
latent bugs โ€” <code>FLUSHDB</code>/<code>FLUSHALL</code> used to wipe channel 
subscriptions (real Redis touches neither), and a client that issued 
<code>SELECT</code> after subscribing unsubscribed against the wrong database, 
leaking its registration.</li>
   <li><strong><code>SUBSCRIBE</code>/<code>PSUBSCRIBE</code> framing did not 
match Redis</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/810";>#810</a>): 
multiple arguments produced a single flat array built from <code>HashMap</code> 
iteration โ€” arbitrary order, duplicates collapsed, counter restarting at 1. 
Redis sends one three-element reply per argument, including duplicates, with 
the client's combined channel + pattern count. Jedis tolerated the old framing; 
stricter clients do not.</li>
   <li><strong><code>UNSUBSCRIBE</code>/<code>PUNSUBSCRIBE</code> did not 
always reply</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/810";>#810</a>): no 
acknowledgement was sent for a channel the client was not subscribed to, and 
none at all when called without arguments while holding no subscriptions, so a 
client could wait forever for an ack that never came.</li>
   <li><strong>Disconnected clients stayed subscribed forever</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/810";>#810</a>), 
inflating <code>PUBLISH</code> receiver counts and <code>PUBSUB NUMPAT</code> 
for the lifetime of the server. Subscriptions are now released when the 
connection closes.</li>
   <li><strong><code>PING</code> in subscribe mode</strong> returned a plain 
<code>PONG</code> instead of the RESP2 <code>[pong, message-or-empty]</code> 
array (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/810";>#810</a>).</li>
   <li><strong><code>PUBSUB NUMSUB</code></strong> is now implemented (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/810";>#810</a>).</li>
   <li><strong><code>SMOVE key key member</code> destroyed and recreated the 
set</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/812";>#812</a>): Redis 
short-circuits when source and destination are the same key, but the mock ran 
<code>SREM</code> followed by <code>SADD</code>, so a single-member set was 
deleted and recreated. A data-correctness bug independent of notifications.</li>
   <li><strong>Six in-place mutations did not mark their key as 
modified</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/812";>#812</a>) โ€” 
<code>LINSERT</code>, <code>LSET</code>, <code>LREM</code>, <code>LTRIM</code>, 
<code>XDEL</code>, <code>XTRIM</code> โ€” so a transaction watching that key was 
not aborted. <code>WATCH</code> now behaves as it does on a real server for 
these commands.</li>
   <li><strong><code>ZRANGESTORE</code> from a missing source left the 
destination silently deleted</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/812";>#812</a>): the 
early-return path skipped the deletion signalling. 
<strong><code>SETRANGE</code> with a non-empty value</strong> now always counts 
as a write, matching Redis (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/812";>#812</a>).</li>
   <li><strong>An <code>EVAL</code> could be entered without the BUSY gate 
seeing it</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/811";>#811</a>): 
<code>ScriptingManager.start()</code> ran <em>after</em> the Lua environment 
was built, which on a cold <code>EVAL</code> takes hundreds of milliseconds. A 
command arriving on another connection in that window passed the BUSY check and 
then blocked on the data lock the script was about to take, with no way to ever 
be answered. Note that <code>lua-time-limit</code> now includes the environment 
setup time.</li>
   <li><strong><code>RedisServer.stop()</code> and disconnect cleanup could 
block behind a long-running script</strong> (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/811";>#811</a>). The 
subscription registry guards itself with its own monitor, with lock ordering 
documented on the class.</li>
   </ul>
   <!-- raw HTML omitted -->
   </blockquote>
   <p>... (truncated)</p>
   </details>
   <details>
   <summary>Commits</summary>
   <ul>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/552137b927b128d7c59a8edb8c7ba8f3a153a1ec";><code>552137b</code></a>
 1.1.17</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/7cf7ae53f3323e2f7a066bbbc57cea4f40e4308f";><code>7cf7ae5</code></a>
 Update list of supported operations</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/e64d65ece49f167a2b4b02c4aa99d5f20a5c57cd";><code>e64d65e</code></a>
 implement sintercard (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/817";>#817</a>)</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/5c63edf9c625ce76a2cf6625f5e84a8902cd55ac";><code>5c63edf</code></a>
 control number of arguments for S-operations (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/816";>#816</a>)</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/69f7faf00cdaeb4ddb8b5028602ee923b364c935";><code>69f7faf</code></a>
 Update list of supported operations</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/54c3291c10c4ac18d56977eebfb4caf519e41c0d";><code>54c3291</code></a>
 getrange/substr and SET ... GET support, plus two SET option bugs (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/815";>#815</a>)</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/e7c74579f2836a374422f6244e7f27e0f006fd81";><code>e7c7457</code></a>
 Bump org.redisson:redisson from 4.6.1 to 4.7.0 (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/814";>#814</a>)</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/08198c48f6b1e884c3d9aa0351b50edb0e6606ca";><code>08198c4</code></a>
 Update list of supported operations</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/04037c26091cc78bf35626b405e14d0a97a5c9c1";><code>04037c2</code></a>
 getex support (<a 
href="https://redirect.github.com/fppt/jedis-mock/issues/813";>#813</a>)</li>
   <li><a 
href="https://github.com/fppt/jedis-mock/commit/969bbe9ebe5140566e95fe820ad4471dd7270422";><code>969bbe9</code></a>
 update snapshot version</li>
   <li>Additional commits viewable in <a 
href="https://github.com/fppt/jedis-mock/compare/v.1.1.12...v.1.1.17";>compare 
view</a></li>
   </ul>
   </details>
   <br />
   
   
   [![Dependabot compatibility 
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=com.github.fppt:jedis-mock&package-manager=maven&previous-version=1.1.12&new-version=1.1.17)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
   
   Dependabot will resolve any conflicts with this PR as long as you don't 
alter it yourself. You can also trigger a rebase manually by commenting 
`@dependabot rebase`.
   
   [//]: # (dependabot-automerge-start)
   [//]: # (dependabot-automerge-end)
   
   ---
   
   <details>
   <summary>Dependabot commands and options</summary>
   <br />
   
   You can trigger Dependabot actions by commenting on this PR:
   - `@dependabot rebase` will rebase this PR
   - `@dependabot recreate` will recreate this PR, overwriting any edits that 
have been made to it
   - `@dependabot show <dependency name> ignore conditions` will show all of 
the ignore conditions of the specified dependency
   - `@dependabot ignore this major version` will close this PR and stop 
Dependabot creating any more for this major version (unless you reopen the PR 
or upgrade to it yourself)
   - `@dependabot ignore this minor version` will close this PR and stop 
Dependabot creating any more for this minor version (unless you reopen the PR 
or upgrade to it yourself)
   - `@dependabot ignore this dependency` will close this PR and stop 
Dependabot creating any more for this dependency (unless you reopen the PR or 
upgrade to it yourself)
   
   
   </details>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to