Skip to content

Commit 99834b3

Browse files
authored
Tdigest/commands (#11)
* Start addin Tdigest commands * Add Tdigest Commands & Fixing Parsing Warnings * Fixing test failures
1 parent 2c28380 commit 99834b3

File tree

10 files changed

+81
-13
lines changed

10 files changed

+81
-13
lines changed

.vscode/settings.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
{
2+
}

src/NRedisStack.Core/CountMinSketch/CmsCommands.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,6 @@ public long[] Query(RedisKey key, params RedisValue[] items)
234234

235235
List<object> args = new List<object> { key };
236236
foreach (var item in items) args.Add(item);
237-
foreach (var item in items) args.Add(item);
238237

239238
return ResponseParser.ToLongArray(_db.Execute(CMS.QUERY, args));
240239
}
@@ -253,7 +252,6 @@ public async Task<long[]> QueryAsync(RedisKey key, params RedisValue[] items)
253252

254253
List<object> args = new List<object> { key };
255254
foreach (var item in items) args.Add(item);
256-
foreach (var item in items) args.Add(item);
257255

258256
var result = await _db.ExecuteAsync(CMS.QUERY, args);
259257
return ResponseParser.ToLongArray(result);

src/NRedisStack.Core/ModulPrefixes.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ public static class ModulPrefixes
1616
static bool topKCreated = false;
1717
static TopKCommands topKCommands;
1818

19+
static bool tdigestCreated = false;
20+
static TdigestCommands tdigestCommands;
21+
1922
static bool searchCreated = false;
2023
static SearchCommands searchCommands;
2124

@@ -69,6 +72,17 @@ static public TopKCommands TOPK(this IDatabase db)
6972
return topKCommands;
7073
}
7174

75+
static public TdigestCommands TDIGEST(this IDatabase db)
76+
{
77+
if (!tdigestCreated)
78+
{
79+
tdigestCommands = new TdigestCommands(db);
80+
tdigestCreated = true;
81+
}
82+
83+
return tdigestCommands;
84+
}
85+
7286
static public SearchCommands FT(this IDatabase db)
7387
{
7488
if (!searchCreated)

src/NRedisStack.Core/ResponseParser.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -357,11 +357,11 @@ public static IReadOnlyList<TimeSeriesRule> ToRuleArray(RedisResult result)
357357
public static TdigestInformation ToTdigestInfo(RedisResult result) //TODO: Think about a different implementation, because if the output of CMS.INFO changes or even just the names of the labels then the parsing will not work
358358
{
359359
long compression, capacity, mergedNodes, unmergedNodes, totalCompressions;
360-
string? mergedWeight, unmergedWeight;
360+
double mergedWeight, unmergedWeight;
361361

362362
compression = capacity = mergedNodes = unmergedNodes = totalCompressions = -1;
363-
mergedWeight = unmergedWeight = "";
364-
363+
mergedWeight = unmergedWeight = -1.0;
364+
365365
RedisResult[] redisResults = ToArray(result);
366366

367367
for (int i = 0; i < redisResults.Length; ++i)
@@ -383,10 +383,11 @@ public static IReadOnlyList<TimeSeriesRule> ToRuleArray(RedisResult result)
383383
unmergedNodes = (long)redisResults[i];
384384
break;
385385
case "Merged weight":
386-
mergedWeight = redisResults[i].ToString();
386+
387+
mergedWeight = (double)redisResults[i];
387388
break;
388389
case "Unmerged weight":
389-
unmergedWeight = redisResults[i].ToString();
390+
unmergedWeight = (double)redisResults[i];
390391
break;
391392
case "Total compressions":
392393
totalCompressions = (long)redisResults[i];

src/NRedisStack.Core/Tdigest/DataTypes/TdigestInformation.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,16 @@ public class TdigestInformation
1010
public long Capacity { get; private set; }
1111
public long MergedNodes { get; private set; }
1212
public long UnmergedNodes { get; private set; }
13-
public string MergedWeight { get; private set; }
14-
public string UnmergedWeight { get; private set; }
13+
public double MergedWeight { get; private set; }
14+
public double UnmergedWeight { get; private set; }
15+
1516
public long TotalCompressions { get; private set; }
1617

1718

1819
internal TdigestInformation(long compression, long capacity, long mergedNodes,
19-
long unmergedNodes, string mergedWeight,
20-
string unmergedWeight, long totalCompressions)
20+
long unmergedNodes, double mergedWeight,
21+
double unmergedWeight, long totalCompressions)
22+
2123
{
2224
Compression = compression;
2325
Capacity = capacity;

tests/NRedisStack.Tests/CountMinSketch/CmsTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public void TestQuery()
184184

185185
db.CMS().IncrBy(key, itemIncrements);
186186

187-
var resp = db.CMS().Query(key, new RedisValue[] { "foo", "bar" });
187+
var resp = db.CMS().Query(key, "foo", "bar");
188188
Assert.Equal(new long[] { 10, 15 }, resp);
189189
}
190190

tests/NRedisStack.Tests/NRedisStack.Tests.csproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@
2222
<ProjectReference Include="..\..\src\NRedisStack.Core\NRedisStack.Core.csproj" />
2323
</ItemGroup>
2424

25+
<ItemGroup>
26+
<None Update="xunit.runner.json">
27+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
28+
</None>
29+
</ItemGroup>
30+
2531
</Project>
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using Xunit;
2+
using StackExchange.Redis;
3+
using NRedisStack.Core.RedisStackCommands;
4+
using Moq;
5+
6+
namespace NRedisStack.Tests.Tdigest;
7+
8+
public class TdigestTests : AbstractNRedisStackTest, IDisposable
9+
{
10+
Mock<IDatabase> _mock = new Mock<IDatabase>();
11+
private readonly string key = "TDIGEST_TESTS";
12+
public TdigestTests(RedisFixture redisFixture) : base(redisFixture) { }
13+
14+
public void Dispose()
15+
{
16+
redisFixture.Redis.GetDatabase().KeyDelete(key);
17+
}
18+
19+
// private void AssertMergedUnmergedNodes( IDatabase db, string key, int mergedNodes, int unmergedNodes) {
20+
// var info = db.TDIGEST().Info(key);
21+
// Assert.Equal((long) mergedNodes, info.MergedNodes);
22+
// Assert.Equal((long) unmergedNodes, info.UnmergedNodes);
23+
// }
24+
25+
// private void assertTotalWeight(IDatabase db, string key, double totalWeight) {
26+
// var info = db.TDIGEST().Info(key);
27+
// Assert.Equal(totalWeight, info.MergedWeight Double.parseDouble((string) info.get("Merged weight"))
28+
// + Double.parseDouble((string) info.get("Unmerged weight")), 0.01);
29+
// }
30+
31+
// [Fact]
32+
// public void AssertMergedUnmergedNodes()
33+
// {
34+
// IDatabase db = redisFixture.Redis.GetDatabase();
35+
// db.Execute("FLUSHALL");
36+
37+
// var info = db.TDIGEST().Info()
38+
39+
// }
40+
}

tests/NRedisStack.Tests/TimeSeries/TimeSeriesTests.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ public void Dispose()
2121
public void TestCreateOK()
2222
{
2323
IDatabase db = redisFixture.Redis.GetDatabase();
24-
Assert.True(db.TS().Create(key));
24+
var result = db.TS().Create(key);
25+
Assert.True(result);
2526
//TimeSeriesInformation info = db.TS().Info(key);
2627
}
2728

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"parallelizeAssembly": false,
3+
"parallelizeTestCollections": false
4+
}

0 commit comments

Comments
 (0)