Skip to content

Commit 1fa9f9a

Browse files
badrishcCopilot
andcommitted
Merge branch 'main' into badrishc/native-allocator
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: a49f1db0-fd39-48c7-80dc-ce104c863b79
2 parents 67eb6ff + b4bf627 commit 1fa9f9a

22 files changed

Lines changed: 1002 additions & 30 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ jobs:
159159
os: [ ubuntu-latest, windows-latest ]
160160
framework: [ 'net8.0' , 'net10.0']
161161
configuration: [ 'Debug', 'Release' ]
162-
test: [ 'Garnet.test.cluster', 'Garnet.test.cluster.migrate', 'Garnet.test.cluster.migrate.rangeindex', 'Garnet.test.cluster.replication', 'Garnet.test.cluster.replication.tls', 'Garnet.test.cluster.replication.disklesssync', 'Garnet.test.cluster.replication.rangeindex', 'Garnet.test.cluster.vectorsets', 'Garnet.test.cluster.multilog' ]
162+
test: [ 'Garnet.test.cluster', 'Garnet.test.cluster.migrate', 'Garnet.test.cluster.migrate.rangeindex', 'Garnet.test.cluster.replication', 'Garnet.test.cluster.replication.tls', 'Garnet.test.cluster.replication.disklesssync', 'Garnet.test.cluster.replication.rangeindex', 'Garnet.test.cluster.replication.vectorsets', 'Garnet.test.cluster.vectorsets', 'Garnet.test.cluster.multilog' ]
163163
if: needs.changes.outputs.garnet == 'true'
164164
steps:
165165
- name: Check out code

.github/workflows/nightly.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ jobs:
5151
strategy:
5252
fail-fast: false
5353
matrix:
54-
test: [ 'Garnet.test.cluster', 'Garnet.test.cluster.migrate', 'Garnet.test.cluster.replication', 'Garnet.test.cluster.replication.tls', 'Garnet.test.cluster.replication.asyncreplay', 'Garnet.test.cluster.replication.disklesssync', 'Garnet.test.cluster.vectorsets', 'Garnet.test.cluster.multilog' ]
54+
test: [ 'Garnet.test.cluster', 'Garnet.test.cluster.migrate', 'Garnet.test.cluster.replication', 'Garnet.test.cluster.replication.tls', 'Garnet.test.cluster.replication.asyncreplay', 'Garnet.test.cluster.replication.disklesssync', 'Garnet.test.cluster.replication.vectorsets', 'Garnet.test.cluster.vectorsets', 'Garnet.test.cluster.multilog' ]
5555
os: [ ubuntu-latest, windows-latest ]
5656
framework: [ 'net8.0', 'net10.0' ]
5757
configuration: [ 'Debug', 'Release' ]

Garnet.slnx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,5 +98,6 @@
9898
<Project Path="test/cluster/Garnet.test.cluster.replication.tls/Garnet.test.cluster.replication.tls.csproj" />
9999
<Project Path="test/cluster/Garnet.test.cluster.vectorsets/Garnet.test.cluster.vectorsets.csproj" />
100100
<Project Path="test/cluster/Garnet.test.cluster.replication.rangeindex/Garnet.test.cluster.replication.rangeindex.csproj" />
101+
<Project Path="test/cluster/Garnet.test.cluster.replication.vectorsets/Garnet.test.cluster.replication.vectorsets.csproj" />
101102
</Folder>
102103
</Solution>

Version.props

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<Project>
22
<!-- VersionPrefix property for builds and packages -->
33
<PropertyGroup>
4-
<VersionPrefix>2.1.2</VersionPrefix>
4+
<VersionPrefix>2.1.3</VersionPrefix>
55
</PropertyGroup>
66
</Project>

libs/cluster/Server/Replication/ReplicaOps/ReplicaDisklessSync.cs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,13 @@ public AofAddress TryReplicaDisklessRecovery(SyncMetadata primarySyncMetadata, o
234234
// Before advertising updated replication offset, wait for Vector Set ops to finish
235235
storeWrapper.DefaultDatabase.VectorManager?.WaitForVectorOperationsToComplete();
236236

237+
// Full sync only: a partial sync replays AOF instead of streaming raw records.
238+
if (primarySyncMetadata.fullSync)
239+
{
240+
// In full sync, a flush is done right before, so no reserved contexts should exist
241+
storeWrapper.DefaultDatabase.VectorManager?.ReconcileRecoveredState(requireNoReservedContexts: true);
242+
}
243+
237244
this.replicationOffset = _replicationOffset;
238245

239246
// Mark this txn run as a read-write session if we are replaying as a replica

libs/cluster/Session/RespClusterReplicationCommands.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -548,6 +548,7 @@ private bool NetworkClusterSync(out bool invalidParameters)
548548

549549
TrackImportProgress(recordCount, recordCount == 0);
550550
var storeWrapper = clusterProvider.storeWrapper;
551+
var vectorManager = storeWrapper.DefaultDatabase.VectorManager;
551552
var transientObjectIdMap = storeWrapper.store.Log.TransientObjectIdMap;
552553

553554
DiskLogRecord diskLogRecord = default;
@@ -565,6 +566,10 @@ private bool NetworkClusterSync(out bool invalidParameters)
565566
return false;
566567

567568
diskLogRecord = DiskLogRecord.Deserialize(recordSpan, storeWrapper.GarnetObjectSerializer, transientObjectIdMap, storeWrapper.storeFunctions);
569+
570+
// Streamed records carry the primary's native handle and bypass the RMW path that maintains the context reservation
571+
vectorManager?.SanitizeAndTrackIngestedRecordIfApplicable(ref diskLogRecord);
572+
568573
_ = basicGarnetApi.SET(in diskLogRecord);
569574
storeWrapper.storeFunctions.OnDisposeDiskRecord(ref diskLogRecord, DisposeReason.DeserializedFromDisk);
570575
diskLogRecord.Dispose();

libs/common/Testing/ExceptionInjectionHelper.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,26 @@ public static void DisableException(ExceptionInjectionType exceptionType)
7272
_ = release.TrySetResult(true);
7373
}
7474

75+
/// <summary>
76+
/// Enables an exception scenario until the returned scope is disposed.
77+
/// </summary>
78+
/// <param name="exceptionType"></param>
79+
public static Scope EnabledScope(ExceptionInjectionType exceptionType)
80+
{
81+
EnableException(exceptionType);
82+
return new Scope(exceptionType);
83+
}
84+
85+
/// <summary>
86+
/// Disables the exception scenario it was created for when disposed.
87+
/// </summary>
88+
/// <param name="exceptionType"></param>
89+
public readonly struct Scope(ExceptionInjectionType exceptionType) : IDisposable
90+
{
91+
/// <inheritdoc/>
92+
public void Dispose() => DisableException(exceptionType);
93+
}
94+
7595
/// <summary>
7696
/// Trigger exception scenario (NOTE: add this to the location where the exception should be emulated/triggered)
7797
/// </summary>

libs/server/Databases/MultiDatabaseManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1064,7 +1064,7 @@ public override void RecoverVectorSets()
10641064
{
10651065
var dbId = activeDbIdsMapSnapshot[i];
10661066
databasesMapSnapshot[dbId].VectorManager.Initialize();
1067-
databasesMapSnapshot[dbId].VectorManager.ResumePostRecovery();
1067+
databasesMapSnapshot[dbId].VectorManager.ReconcileRecoveredState();
10681068
}
10691069
}
10701070

libs/server/Databases/SingleDatabaseManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ public override void RecoverVectorSets()
401401
// Guarantee initialize has happened before we attempt to recover
402402
defaultDatabase.VectorManager.Initialize();
403403

404-
defaultDatabase.VectorManager.ResumePostRecovery();
404+
defaultDatabase.VectorManager.ReconcileRecoveredState();
405405
}
406406

407407
public override void Dispose()

libs/server/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
[assembly: InternalsVisibleTo("Garnet.test" + AssemblyRef.GarnetPublicKey)]
77
[assembly: InternalsVisibleTo("Garnet.test.cluster" + AssemblyRef.GarnetPublicKey)]
8+
[assembly: InternalsVisibleTo("Garnet.test.cluster.replication.vectorsets" + AssemblyRef.GarnetPublicKey)]
89
[assembly: InternalsVisibleTo("Garnet.test.collections" + AssemblyRef.GarnetPublicKey)]
910
[assembly: InternalsVisibleTo("Garnet.test.acl" + AssemblyRef.GarnetPublicKey)]
1011
[assembly: InternalsVisibleTo("Garnet.test.scripting" + AssemblyRef.GarnetPublicKey)]

0 commit comments

Comments
 (0)