You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mm...@apache.org on 2021/05/27 23:50:55 UTC
[geode-dotnet-core-client] branch develop updated (aefab27 ->
abda656)
This is an automated email from the ASF dual-hosted git repository.
mmartell pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-dotnet-core-client.git.
from aefab27 Add startserver/stopserver scripts - Also fix username/password in RegionFactory tests
new 5468ffa Derive SessionStateCache from GeodeNativeObject
new 6f5668d Add x64 platform
new edf9a34 Switch to using statements
new abda656 Merge branch 'develop' of https://github.com/apache/geode-dotnet-core-client into develop
The 4 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
NetCore.Session/NetCore.Session.csproj | 1 +
NetCore.Session/NetCoreSessionState.cs | 594 +++++++++++----------
NetCore.Test/NetCore.Test.csproj | 2 +
NetCore/NetCore.csproj | 1 +
.../NetCore.Session.IntegrationTests.csproj | 2 +
.../SessionStateIntegrationTests.cs | 364 +++++++------
Session.Tests/NetCore.Session.Tests.csproj | 2 +
Session.Tests/SessionStateCacheTests.cs | 11 +-
SessionSample/SessionSample.csproj | 2 +-
geode-dotnet-core.sln | 20 +-
10 files changed, 522 insertions(+), 477 deletions(-)
[geode-dotnet-core-client] 03/04: Switch to using statements
Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mmartell pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-dotnet-core-client.git
commit edf9a349c1360ed327b9d69129f4f6560caef3eb
Author: Mike Martell <mm...@pivotal.io>
AuthorDate: Thu May 27 16:49:44 2021 -0700
Switch to using statements
---
.../SessionStateIntegrationTests.cs | 364 +++++++++++----------
Session.Tests/SessionStateCacheTests.cs | 11 +-
2 files changed, 202 insertions(+), 173 deletions(-)
diff --git a/Session.IntegrationTests/SessionStateIntegrationTests.cs b/Session.IntegrationTests/SessionStateIntegrationTests.cs
index 42250b7..7a533f0 100644
--- a/Session.IntegrationTests/SessionStateIntegrationTests.cs
+++ b/Session.IntegrationTests/SessionStateIntegrationTests.cs
@@ -8,175 +8,201 @@ using System.Threading.Tasks;
namespace Apache.Geode.Session.IntegrationTests
{
- public class SessionStateIntegrationTests
- {
- private static string _regionName = "testRegion";
-
- [Fact]
- public void SetGet()
- {
- var cacheFactory = CacheFactory.Create()
- .SetProperty("log-level", "none")
- .SetProperty("log-file", "SessionStateCacheIntegrationTests.log");
-
- var cache = (Cache)cacheFactory.CreateCache();
- PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
- var pool = poolFactory.CreatePool("myPool");
-
- var ssCache = new SessionStateCache(cache, _regionName);
-
- var options = new DistributedCacheEntryOptions();
- DateTime localTime = DateTime.Now.AddDays(1);
- DateTimeOffset dateAndOffset = new DateTimeOffset(localTime,
- TimeZoneInfo.Local.GetUtcOffset(localTime));
- options.AbsoluteExpiration = dateAndOffset;
- var testValue = new byte[] { 1, 2, 3, 4, 5 };
- ssCache.Set("testKey", testValue, options);
- byte[] value = ssCache.Get("testKey");
- Assert.True(testValue.SequenceEqual(value));
- }
-
- [Fact]
- public void Refresh()
- {
- var cacheFactory = CacheFactory.Create()
- .SetProperty("log-level", "none")
- .SetProperty("log-file", "SessionStateCacheIntegrationTests.log");
-
- var cache = (Cache)cacheFactory.CreateCache();
- PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
- var pool = poolFactory.CreatePool("myPool");
-
- var ssCache = new SessionStateCache(cache, _regionName);
-
- var options = new DistributedCacheEntryOptions();
- int numSeconds = 20;
- options.SlidingExpiration = new TimeSpan(0, 0, numSeconds);
- var testValue = new byte[] { 1, 2, 3, 4, 5 };
-
- // Set a value
- ssCache.Set("testKey", testValue, options);
-
- // Wait half a timeout then refresh
- System.Threading.Thread.Sleep(numSeconds/2 * 1000);
- ssCache.Refresh("testKey");
-
- // Wait beyond the original expiration
- System.Threading.Thread.Sleep(numSeconds / 2 * 1000 + 1);
-
- // Ensure it's not expired
- byte[] value = ssCache.Get("testKey");
- Assert.True(testValue.SequenceEqual(value));
- }
-
- [Fact]
- public void SetWithAbsoluteExpiration()
- {
- var cacheFactory = CacheFactory.Create()
- .SetProperty("log-level", "none")
- .SetProperty("log-file", "SessionStateCacheIntegrationTests.log");
-
- var cache = (Cache)cacheFactory.CreateCache();
- PoolFactory poolFactory = cache.PoolFactory;
-
- var ssCache = new SessionStateCache(cache, _regionName);
-
- var options = new DistributedCacheEntryOptions();
- options.AbsoluteExpiration = DateTime.Now.AddSeconds(5);
- ssCache.Set("testKey", Encoding.UTF8.GetBytes("testValue"), options);
- System.Threading.Thread.Sleep(6000);
- byte[] value = ssCache.Get("testKey");
- Assert.Null(value);
- }
-
- [Fact]
- public void Remove()
- {
- var cacheFactory = CacheFactory.Create()
- .SetProperty("log-level", "none")
- .SetProperty("log-file", "SessionStateCacheIntegrationTests.log");
-
- var cache = (Cache)cacheFactory.CreateCache();
- PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
- var pool = poolFactory.CreatePool("myPool");
-
- var ssCache = new SessionStateCache(cache, _regionName);
-
- var options = new DistributedCacheEntryOptions();
- DateTime localTime = DateTime.Now.AddDays(1);
- DateTimeOffset dateAndOffset = new DateTimeOffset(localTime,
- TimeZoneInfo.Local.GetUtcOffset(localTime));
- options.AbsoluteExpiration = dateAndOffset;
- var testValue = new byte[] { 1, 2, 3, 4, 5 };
- ssCache.Set("testKey", testValue, options);
- byte[] value = ssCache.Get("testKey");
-
- ssCache.Remove("testKey");
- value = ssCache.Get("testKey");
- Assert.Null(value);
- }
-
- [Fact]
- public void SetGetRemoveAsync()
+ public class SessionStateIntegrationTests
{
- var cacheFactory = CacheFactory.Create()
- .SetProperty("log-level", "none")
- .SetProperty("log-file", "SessionStateCacheIntegrationTests.log");
-
- var cache = (Cache)cacheFactory.CreateCache();
- PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
- var pool = poolFactory.CreatePool("myPool");
-
- var ssCache = new SessionStateCache(cache, _regionName);
-
- var options = new DistributedCacheEntryOptions();
- DateTime localTime = DateTime.Now.AddDays(1);
- DateTimeOffset dateAndOffset = new DateTimeOffset(localTime,
- TimeZoneInfo.Local.GetUtcOffset(localTime));
- options.AbsoluteExpiration = dateAndOffset;
-
- var testValue1 = new byte[] { 1, 2, 3, 4, 5 };
- var testValue2 = new byte[] { 11, 12, 13, 14, 15 };
- var testValue3 = new byte[] { 21, 22, 23, 24, 25 };
- var testValue4 = new byte[] { 31, 32, 33, 34, 35 };
- var testValue5 = new byte[] { 41, 42, 43, 44, 45 };
-
- Task set1 = ssCache.SetAsync("testKey1", testValue1, options);
- Task set2 = ssCache.SetAsync("testKey2", testValue2, options);
- Task set3 = ssCache.SetAsync("testKey3", testValue3, options);
- Task set4 = ssCache.SetAsync("testKey4", testValue4, options);
- Task set5 = ssCache.SetAsync("testKey5", testValue5, options);
-
- Task.WaitAll(set1, set2, set3, set4, set5);
-
- Task<byte[]> value1 = ssCache.GetAsync("testKey1");
- Task<byte[]> value2 = ssCache.GetAsync("testKey2");
- Task<byte[]> value3 = ssCache.GetAsync("testKey3");
- Task<byte[]> value4 = ssCache.GetAsync("testKey4");
- Task<byte[]> value5 = ssCache.GetAsync("testKey5");
-
- Task.WaitAll(value1, value2, value3, value4, value5);
-
- Assert.True(testValue1.SequenceEqual(value1.Result));
- Assert.True(testValue2.SequenceEqual(value2.Result));
- Assert.True(testValue3.SequenceEqual(value3.Result));
- Assert.True(testValue4.SequenceEqual(value4.Result));
- Assert.True(testValue5.SequenceEqual(value5.Result));
-
- Task rm1 = ssCache.RemoveAsync("testKey1");
- Task rm2 = ssCache.RemoveAsync("testKey2");
- Task rm3 = ssCache.RemoveAsync("testKey3");
- Task rm4 = ssCache.RemoveAsync("testKey4");
- Task rm5 = ssCache.RemoveAsync("testKey5");
-
- Task.WaitAll(rm1, rm2, rm3, rm4, rm5);
-
- Assert.Null(ssCache.Get("testKey1"));
- Assert.Null(ssCache.Get("testKey2"));
- Assert.Null(ssCache.Get("testKey3"));
- Assert.Null(ssCache.Get("testKey4"));
- Assert.Null(ssCache.Get("testKey5"));
-
+ private static string _regionName = "testRegion";
+
+ [Fact]
+ public void SetGet()
+ {
+ using (var client = new Client())
+ {
+ using (var cacheFactory = CacheFactory.Create(client))
+ {
+ cacheFactory.SetProperty("log-level", "none");
+
+ var cache = (Cache)cacheFactory.CreateCache();
+ PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
+ var pool = poolFactory.CreatePool("myPool");
+
+ var ssCache = new SessionStateCache(cache, _regionName);
+
+ var options = new DistributedCacheEntryOptions();
+ DateTime localTime = DateTime.Now.AddDays(1);
+ DateTimeOffset dateAndOffset = new DateTimeOffset(localTime,
+ TimeZoneInfo.Local.GetUtcOffset(localTime));
+ options.AbsoluteExpiration = dateAndOffset;
+ var testValue = new byte[] { 1, 2, 3, 4, 5 };
+ ssCache.Set("testKey", testValue, options);
+ byte[] value = ssCache.Get("testKey");
+ Assert.True(testValue.SequenceEqual(value));
+ pool.Dispose();
+ poolFactory.Dispose();
+ cache.Dispose();
+ cacheFactory.Dispose();
+ ssCache.Dispose();
+
+ }
+
+ }
+ }
+
+ [Fact]
+ public void Refresh()
+ {
+ using (var client = new Client())
+ {
+ using (var cacheFactory = CacheFactory.Create(client))
+ {
+ cacheFactory.SetProperty("log-level", "none");
+
+ var cache = (Cache)cacheFactory.CreateCache();
+ PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
+ var pool = poolFactory.CreatePool("myPool");
+
+ var ssCache = new SessionStateCache(cache, _regionName);
+
+ var options = new DistributedCacheEntryOptions();
+ int numSeconds = 20;
+ options.SlidingExpiration = new TimeSpan(0, 0, numSeconds);
+ var testValue = new byte[] { 1, 2, 3, 4, 5 };
+
+ // Set a value
+ ssCache.Set("testKey", testValue, options);
+
+ // Wait half a timeout then refresh
+ System.Threading.Thread.Sleep(numSeconds / 2 * 1000);
+ ssCache.Refresh("testKey");
+
+ // Wait beyond the original expiration
+ System.Threading.Thread.Sleep(numSeconds / 2 * 1000 + 1);
+
+ // Ensure it's not expired
+ byte[] value = ssCache.Get("testKey");
+ Assert.True(testValue.SequenceEqual(value));
+ }
+ }
+ }
+
+ [Fact]
+ public void SetWithAbsoluteExpiration()
+ {
+ using (var client = new Client())
+ {
+ using (var cacheFactory = CacheFactory.Create(client))
+ {
+ cacheFactory.SetProperty("log-level", "none");
+
+ var cache = (Cache)cacheFactory.CreateCache();
+ PoolFactory poolFactory = cache.PoolFactory;
+
+ var ssCache = new SessionStateCache(cache, _regionName);
+
+ var options = new DistributedCacheEntryOptions();
+ options.AbsoluteExpiration = DateTime.Now.AddSeconds(5);
+ ssCache.Set("testKey", Encoding.UTF8.GetBytes("testValue"), options);
+ System.Threading.Thread.Sleep(6000);
+ byte[] value = ssCache.Get("testKey");
+ Assert.Null(value);
+ }
+ }
+ }
+
+ [Fact]
+ public void Remove()
+ {
+ using (var client = new Client())
+ {
+ using (var cacheFactory = CacheFactory.Create(client))
+ {
+ cacheFactory.SetProperty("log-level", "none");
+
+ var cache = (Cache)cacheFactory.CreateCache();
+ PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
+ var pool = poolFactory.CreatePool("myPool");
+
+ var ssCache = new SessionStateCache(cache, _regionName);
+
+ var options = new DistributedCacheEntryOptions();
+ DateTime localTime = DateTime.Now.AddDays(1);
+ DateTimeOffset dateAndOffset = new DateTimeOffset(localTime,
+ TimeZoneInfo.Local.GetUtcOffset(localTime));
+ options.AbsoluteExpiration = dateAndOffset;
+ var testValue = new byte[] { 1, 2, 3, 4, 5 };
+ ssCache.Set("testKey", testValue, options);
+ byte[] value = ssCache.Get("testKey");
+
+ ssCache.Remove("testKey");
+ value = ssCache.Get("testKey");
+ Assert.Null(value);
+ }
+ }
+ }
+
+ [Fact]
+ public void SetGetRemoveAsync()
+ {
+ using (var client = new Client())
+ {
+ using (var cacheFactory = CacheFactory.Create(client))
+ {
+ cacheFactory.SetProperty("log-level", "none");
+
+ var cache = (Cache)cacheFactory.CreateCache();
+ PoolFactory poolFactory = cache.PoolFactory.AddLocator("localhost", 10334);
+ var pool = poolFactory.CreatePool("myPool");
+
+ var ssCache = new SessionStateCache(cache, _regionName);
+
+ var options = new DistributedCacheEntryOptions();
+ DateTime localTime = DateTime.Now.AddDays(1);
+ DateTimeOffset dateAndOffset = new DateTimeOffset(localTime,
+ TimeZoneInfo.Local.GetUtcOffset(localTime));
+ options.AbsoluteExpiration = dateAndOffset;
+
+ var testValue1 = new byte[] { 1, 2, 3, 4, 5 };
+ var testValue2 = new byte[] { 11, 12, 13, 14, 15 };
+ var testValue3 = new byte[] { 21, 22, 23, 24, 25 };
+ var testValue4 = new byte[] { 31, 32, 33, 34, 35 };
+ var testValue5 = new byte[] { 41, 42, 43, 44, 45 };
+
+ Task set1 = ssCache.SetAsync("testKey1", testValue1, options);
+ Task set2 = ssCache.SetAsync("testKey2", testValue2, options);
+ Task set3 = ssCache.SetAsync("testKey3", testValue3, options);
+ Task set4 = ssCache.SetAsync("testKey4", testValue4, options);
+ Task set5 = ssCache.SetAsync("testKey5", testValue5, options);
+
+ Task.WaitAll(set1, set2, set3, set4, set5);
+
+ Task<byte[]> value1 = ssCache.GetAsync("testKey1");
+ Task<byte[]> value2 = ssCache.GetAsync("testKey2");
+ Task<byte[]> value3 = ssCache.GetAsync("testKey3");
+ Task<byte[]> value4 = ssCache.GetAsync("testKey4");
+ Task<byte[]> value5 = ssCache.GetAsync("testKey5");
+
+ Task.WaitAll(value1, value2, value3, value4, value5);
+
+ Assert.True(testValue1.SequenceEqual(value1.Result));
+ Assert.True(testValue2.SequenceEqual(value2.Result));
+ Assert.True(testValue3.SequenceEqual(value3.Result));
+ Assert.True(testValue4.SequenceEqual(value4.Result));
+ Assert.True(testValue5.SequenceEqual(value5.Result));
+
+ Task rm1 = ssCache.RemoveAsync("testKey1");
+ Task rm2 = ssCache.RemoveAsync("testKey2");
+ Task rm3 = ssCache.RemoveAsync("testKey3");
+ Task rm4 = ssCache.RemoveAsync("testKey4");
+ Task rm5 = ssCache.RemoveAsync("testKey5");
+
+ Task.WaitAll(rm1, rm2, rm3, rm4, rm5);
+
+ Assert.Null(ssCache.Get("testKey1"));
+ Assert.Null(ssCache.Get("testKey2"));
+ Assert.Null(ssCache.Get("testKey3"));
+ Assert.Null(ssCache.Get("testKey4"));
+ Assert.Null(ssCache.Get("testKey5"));
+ }
+ }
+ }
}
- }
}
diff --git a/Session.Tests/SessionStateCacheTests.cs b/Session.Tests/SessionStateCacheTests.cs
index 2d49d55..ac64254 100644
--- a/Session.Tests/SessionStateCacheTests.cs
+++ b/Session.Tests/SessionStateCacheTests.cs
@@ -35,13 +35,16 @@ namespace Apache.Geode.Session.Tests
[Fact]
public void NullPoolFactory_Throws()
{
- PoolFactory poolFactory = null;
- var cacheFactory = CacheFactory.Create()
+ using (var client = new Client())
+ {
+ PoolFactory poolFactory = null;
+ var cacheFactory = CacheFactory.Create(client)
.SetProperty("log-level", "debug")
.SetProperty("log-file", "SessionStateCacheTests.log");
- var cache = (Cache)cacheFactory.CreateCache();
- Assert.Throws<ArgumentNullException>(() => new SessionStateCache(cache, _regionName));
+ var cache = (Cache)cacheFactory.CreateCache();
+ Assert.Throws<ArgumentNullException>(() => new SessionStateCache(cache, _regionName));
+ }
}
}
}
[geode-dotnet-core-client] 01/04: Derive SessionStateCache from
GeodeNativeObject
Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mmartell pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-dotnet-core-client.git
commit 5468ffacf2ab2ee5aabbd7f0a5d18281ceef27c1
Author: Mike Martell <mm...@pivotal.io>
AuthorDate: Thu May 27 13:26:16 2021 -0700
Derive SessionStateCache from GeodeNativeObject
---
NetCore.Session/NetCoreSessionState.cs | 594 +++++++++++++++++----------------
1 file changed, 301 insertions(+), 293 deletions(-)
diff --git a/NetCore.Session/NetCoreSessionState.cs b/NetCore.Session/NetCoreSessionState.cs
index 19f03e9..cdd0260 100644
--- a/NetCore.Session/NetCoreSessionState.cs
+++ b/NetCore.Session/NetCoreSessionState.cs
@@ -7,338 +7,346 @@ using System.Threading.Tasks;
namespace Apache.Geode.Session
{
- public class SessionStateValue
- {
- DateTime _lastAccessTimeUtc;
- DateTime _expirationTimeUtc = DateTime.MinValue;
- TimeSpan _spanUntilStale = TimeSpan.Zero;
- private byte[] _value;
-
- public SessionStateValue() { }
- public SessionStateValue(byte[] value)
+ public class SessionStateValue
{
- FromByteArray(value);
- }
+ DateTime _lastAccessTimeUtc;
+ DateTime _expirationTimeUtc = DateTime.MinValue;
+ TimeSpan _spanUntilStale = TimeSpan.Zero;
+ private byte[] _value;
- public byte[] Value
- {
- get { return _value; }
- set { _value = value; }
- }
- public DateTime LastAccessTimeUtc
- {
- get { return _lastAccessTimeUtc; }
- set { _lastAccessTimeUtc = value; }
- }
+ public SessionStateValue() { }
+ public SessionStateValue(byte[] value)
+ {
+ FromByteArray(value);
+ }
- public DateTime ExpirationTimeUtc
- {
- get { return _expirationTimeUtc; }
- set { _expirationTimeUtc = value; }
- }
+ public byte[] Value
+ {
+ get { return _value; }
+ set { _value = value; }
+ }
+ public DateTime LastAccessTimeUtc
+ {
+ get { return _lastAccessTimeUtc; }
+ set { _lastAccessTimeUtc = value; }
+ }
- public TimeSpan SpanUntilStale
- {
- get { return _spanUntilStale; }
- set { _spanUntilStale = value; }
- }
+ public DateTime ExpirationTimeUtc
+ {
+ get { return _expirationTimeUtc; }
+ set { _expirationTimeUtc = value; }
+ }
- public byte[] ToByteArray()
- {
- int neededBytes = 3*sizeof(long) + _value.Length;
- byte[] byteArray = new byte[neededBytes];
- int byteIndex = 0;
+ public TimeSpan SpanUntilStale
+ {
+ get { return _spanUntilStale; }
+ set { _spanUntilStale = value; }
+ }
- // Append LastAccessTimeUtc
- Array.Copy(BitConverter.GetBytes(LastAccessTimeUtc.Ticks), 0, byteArray, byteIndex, sizeof(long));
- byteIndex += sizeof(long);
+ public byte[] ToByteArray()
+ {
+ int neededBytes = 3 * sizeof(long) + _value.Length;
+ byte[] byteArray = new byte[neededBytes];
+ int byteIndex = 0;
- // Append ExpirationTimeUtc
- Array.Copy(BitConverter.GetBytes(ExpirationTimeUtc.Ticks), 0, byteArray, byteIndex, sizeof(long));
- byteIndex += sizeof(long);
+ // Append LastAccessTimeUtc
+ Array.Copy(BitConverter.GetBytes(LastAccessTimeUtc.Ticks), 0, byteArray, byteIndex, sizeof(long));
+ byteIndex += sizeof(long);
- // Append SpanUntilStale
- Array.Copy(BitConverter.GetBytes(SpanUntilStale.Ticks), 0, byteArray, byteIndex, sizeof(long));
- byteIndex += sizeof(long);
+ // Append ExpirationTimeUtc
+ Array.Copy(BitConverter.GetBytes(ExpirationTimeUtc.Ticks), 0, byteArray, byteIndex, sizeof(long));
+ byteIndex += sizeof(long);
- // Append the value
- Array.Copy(_value, 0, byteArray, byteIndex, _value.Length);
- return byteArray;
- }
+ // Append SpanUntilStale
+ Array.Copy(BitConverter.GetBytes(SpanUntilStale.Ticks), 0, byteArray, byteIndex, sizeof(long));
+ byteIndex += sizeof(long);
- public void FromByteArray(byte[] data)
- {
- int byteIndex = 0;
+ // Append the value
+ Array.Copy(_value, 0, byteArray, byteIndex, _value.Length);
+ return byteArray;
+ }
- // Extract the LastAccessTimeUtc
- LastAccessTimeUtc = DateTime.FromBinary(BitConverter.ToInt64(data, byteIndex));
- byteIndex += sizeof(long);
+ public void FromByteArray(byte[] data)
+ {
+ int byteIndex = 0;
- // Extract the ExpirationTimeUtc
- ExpirationTimeUtc = DateTime.FromBinary(BitConverter.ToInt64(data, byteIndex));
- byteIndex += sizeof(long);
+ // Extract the LastAccessTimeUtc
+ LastAccessTimeUtc = DateTime.FromBinary(BitConverter.ToInt64(data, byteIndex));
+ byteIndex += sizeof(long);
- // Extract the SpanUntilStale
- SpanUntilStale = TimeSpan.FromTicks(BitConverter.ToInt64(data, byteIndex));
- byteIndex += sizeof(long);
+ // Extract the ExpirationTimeUtc
+ ExpirationTimeUtc = DateTime.FromBinary(BitConverter.ToInt64(data, byteIndex));
+ byteIndex += sizeof(long);
- // Extract the value
- Value = new byte[data.Length - byteIndex];
- Array.Copy(data, byteIndex, _value, 0, data.Length - byteIndex);
- }
- }
+ // Extract the SpanUntilStale
+ SpanUntilStale = TimeSpan.FromTicks(BitConverter.ToInt64(data, byteIndex));
+ byteIndex += sizeof(long);
- public class SessionStateCache : IDistributedCache
- {
- private readonly Cache _cache;
- private ILogger<SessionStateCache> _logger;
- private static Region _region;
- private string _regionName;
- private readonly SemaphoreSlim _connectLock = new SemaphoreSlim(initialCount: 1, maxCount: 1);
+ // Extract the value
+ Value = new byte[data.Length - byteIndex];
+ Array.Copy(data, byteIndex, _value, 0, data.Length - byteIndex);
+ }
+ }
- public SessionStateCache(Cache cache, string regionName, ILogger<SessionStateCache> logger = null)
+ public class SessionStateCache : GeodeNativeObject, IDistributedCache
{
- _regionName = regionName ?? throw new ArgumentNullException(regionName);
- _cache = cache ?? throw new ArgumentNullException(nameof(cache));
- _logger = logger;
+ private readonly Cache _cache;
+ private ILogger<SessionStateCache> _logger;
+ private static Region _region;
+ private string _regionName;
+ private readonly SemaphoreSlim _connectLock = new SemaphoreSlim(initialCount: 1, maxCount: 1);
- _cache.PoolFactory.AddLocator("localhost", 10334);
- _cache.PoolFactory.CreatePool("pool");
- }
+ public SessionStateCache(Cache cache, string regionName, ILogger<SessionStateCache> logger = null)
+ {
+ _regionName = regionName ?? throw new ArgumentNullException(regionName);
+ _cache = cache ?? throw new ArgumentNullException(nameof(cache));
+ _logger = logger;
- // Returns the SessionStateValue for key, or null if key doesn't exist
- public SessionStateValue GetValueForKey(string key)
- {
- byte[] cacheValue = _region.GetByteArray(key);
-
- if (cacheValue != null)
- {
- return new SessionStateValue(cacheValue);
- }
- else
- return null;
- }
+ _cache.PoolFactory.AddLocator("localhost", 10334);
+ using var pool = _cache.PoolFactory.CreatePool("pool");
+ }
- public byte[] Get(string key)
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
-
- Connect();
-
- // Check for nonexistent key
- SessionStateValue ssValue = GetValueForKey(key);
- if (ssValue == null)
- return null;
-
- // Check for expired key
- DateTime nowUtc = DateTime.UtcNow;
- if (ssValue.ExpirationTimeUtc != DateTime.MinValue && ssValue.ExpirationTimeUtc < nowUtc)
- return null;
-
- // Check for stale key
- if (ssValue.SpanUntilStale != TimeSpan.Zero &&
- nowUtc > (ssValue.LastAccessTimeUtc + ssValue.SpanUntilStale))
- return null;
-
- //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
- // options.AbsoluteExpiration.Value.DateTime);
-
- // Update the times for sliding expirations
- if (ssValue.SpanUntilStale != TimeSpan.Zero)
- {
- ssValue.LastAccessTimeUtc = nowUtc;
- _region.PutByteArray(key, ssValue.ToByteArray());
- }
-
- return ssValue.Value;
- }
+ // Returns the SessionStateValue for key, or null if key doesn't exist
+ public SessionStateValue GetValueForKey(string key)
+ {
+ byte[] cacheValue = _region.GetByteArray(key);
+
+ if (cacheValue != null)
+ {
+ return new SessionStateValue(cacheValue);
+ }
+ else
+ return null;
+ }
- public Task<byte[]> GetAsync(string key, CancellationToken token = default(CancellationToken))
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
+ public byte[] Get(string key)
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
+
+ Connect();
+
+ // Check for nonexistent key
+ SessionStateValue ssValue = GetValueForKey(key);
+ if (ssValue == null)
+ return null;
+
+ // Check for expired key
+ DateTime nowUtc = DateTime.UtcNow;
+ if (ssValue.ExpirationTimeUtc != DateTime.MinValue && ssValue.ExpirationTimeUtc < nowUtc)
+ return null;
+
+ // Check for stale key
+ if (ssValue.SpanUntilStale != TimeSpan.Zero &&
+ nowUtc > (ssValue.LastAccessTimeUtc + ssValue.SpanUntilStale))
+ return null;
+
+ //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
+ // options.AbsoluteExpiration.Value.DateTime);
+
+ // Update the times for sliding expirations
+ if (ssValue.SpanUntilStale != TimeSpan.Zero)
+ {
+ ssValue.LastAccessTimeUtc = nowUtc;
+ _region.PutByteArray(key, ssValue.ToByteArray());
+ }
+
+ return ssValue.Value;
+ }
- token.ThrowIfCancellationRequested();
+ public Task<byte[]> GetAsync(string key, CancellationToken token = default(CancellationToken))
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
- return Task.Factory.StartNew(() => Get(key), token);
- }
+ token.ThrowIfCancellationRequested();
- public void Refresh(string key)
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
-
- Connect();
-
- // Check for nonexistent key
- SessionStateValue ssValue = GetValueForKey(key);
- if (ssValue == null)
- return;
-
- // Check for expired key
- DateTime nowUtc = DateTime.UtcNow;
- if (ssValue.ExpirationTimeUtc != DateTime.MinValue && ssValue.ExpirationTimeUtc < nowUtc)
- return;
-
- // Check for stale key
- if (ssValue.SpanUntilStale != TimeSpan.Zero &&
- nowUtc > (ssValue.LastAccessTimeUtc + ssValue.SpanUntilStale))
- return;
-
- //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
- // options.AbsoluteExpiration.Value.DateTime);
-
- // Update the times for sliding expirations
- if (ssValue.SpanUntilStale != TimeSpan.Zero)
- {
- ssValue.LastAccessTimeUtc = nowUtc;
- _region.PutByteArray(key, ssValue.ToByteArray());
- }
- }
+ return Task.Factory.StartNew(() => Get(key), token);
+ }
- public Task RefreshAsync(string key, CancellationToken token = default(CancellationToken))
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
+ public void Refresh(string key)
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
+
+ Connect();
+
+ // Check for nonexistent key
+ SessionStateValue ssValue = GetValueForKey(key);
+ if (ssValue == null)
+ return;
+
+ // Check for expired key
+ DateTime nowUtc = DateTime.UtcNow;
+ if (ssValue.ExpirationTimeUtc != DateTime.MinValue && ssValue.ExpirationTimeUtc < nowUtc)
+ return;
+
+ // Check for stale key
+ if (ssValue.SpanUntilStale != TimeSpan.Zero &&
+ nowUtc > (ssValue.LastAccessTimeUtc + ssValue.SpanUntilStale))
+ return;
+
+ //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
+ // options.AbsoluteExpiration.Value.DateTime);
+
+ // Update the times for sliding expirations
+ if (ssValue.SpanUntilStale != TimeSpan.Zero)
+ {
+ ssValue.LastAccessTimeUtc = nowUtc;
+ _region.PutByteArray(key, ssValue.ToByteArray());
+ }
+ }
- token.ThrowIfCancellationRequested();
+ public Task RefreshAsync(string key, CancellationToken token = default(CancellationToken))
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
- return Task.Factory.StartNew(() => Refresh(key), token);
- }
+ token.ThrowIfCancellationRequested();
- public void Remove(string key)
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
-
- Connect();
-
- // Until we return error codes
- //if (!_cacheRegion.Remove(key))
- //{
- // throw new Exception("Failed to remove from cache");
- //}
- _region.Remove(key);
- }
+ return Task.Factory.StartNew(() => Refresh(key), token);
+ }
- public Task RemoveAsync(string key, CancellationToken token = default(CancellationToken))
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
+ public void Remove(string key)
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
+
+ Connect();
+
+ // Until we return error codes
+ //if (!_cacheRegion.Remove(key))
+ //{
+ // throw new Exception("Failed to remove from cache");
+ //}
+ _region.Remove(key);
+ }
- token.ThrowIfCancellationRequested();
+ public Task RemoveAsync(string key, CancellationToken token = default(CancellationToken))
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
- return Task.Factory.StartNew(() => Remove(key), token);
- }
+ token.ThrowIfCancellationRequested();
- public void Set(string key, byte[] value, DistributedCacheEntryOptions options)
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
-
- if (value == null)
- {
- throw new ArgumentNullException(nameof(value));
- }
-
- if (options == null)
- {
- throw new ArgumentNullException(nameof(options));
- }
-
- Connect();
-
- SessionStateValue ssValue = new SessionStateValue();
- ssValue.Value = value;
-
- DateTime nowUtc = DateTime.UtcNow;
- ssValue.LastAccessTimeUtc = nowUtc;
-
- // No need to check stale or expired data when setting an absolute expiration.
- // Think of if as setting a new key/value pair. Expired data will always be cleaned up
- // when the CleanupExpiredData job runs.
-
- if (options.AbsoluteExpiration != null)
- {
- //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
- // options.AbsoluteExpiration.Value.DateTime);
- DateTimeOffset dto = options.AbsoluteExpiration.Value;
- ssValue.ExpirationTimeUtc = dto.DateTime + dto.Offset;
- }
-
- // If AbsoluteExpiration and AbsoluteExpirationRelativeToNow are set, use the latter.
- if (options.AbsoluteExpirationRelativeToNow != null)
- {
- //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
- // options.AbsoluteExpiration.Value.DateTime);
- TimeSpan ts = options.AbsoluteExpirationRelativeToNow.Value;
- ssValue.ExpirationTimeUtc = nowUtc + ts;
- }
-
- if (options.SlidingExpiration != null)
- {
- //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
- // options.AbsoluteExpiration.Value.DateTime);
- ssValue.SpanUntilStale = options.SlidingExpiration.Value;
- }
-
- _region.PutByteArray(key, ssValue.ToByteArray());
- return;
- }
+ return Task.Factory.StartNew(() => Remove(key), token);
+ }
- public Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken))
- {
- if (key == null)
- {
- throw new ArgumentNullException(nameof(key));
- }
+ public void Set(string key, byte[] value, DistributedCacheEntryOptions options)
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
+
+ if (value == null)
+ {
+ throw new ArgumentNullException(nameof(value));
+ }
+
+ if (options == null)
+ {
+ throw new ArgumentNullException(nameof(options));
+ }
+
+ Connect();
+
+ SessionStateValue ssValue = new SessionStateValue();
+ ssValue.Value = value;
+
+ DateTime nowUtc = DateTime.UtcNow;
+ ssValue.LastAccessTimeUtc = nowUtc;
+
+ // No need to check stale or expired data when setting an absolute expiration.
+ // Think of if as setting a new key/value pair. Expired data will always be cleaned up
+ // when the CleanupExpiredData job runs.
+
+ if (options.AbsoluteExpiration != null)
+ {
+ //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
+ // options.AbsoluteExpiration.Value.DateTime);
+ DateTimeOffset dto = options.AbsoluteExpiration.Value;
+ ssValue.ExpirationTimeUtc = dto.DateTime + dto.Offset;
+ }
+
+ // If AbsoluteExpiration and AbsoluteExpirationRelativeToNow are set, use the latter.
+ if (options.AbsoluteExpirationRelativeToNow != null)
+ {
+ //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
+ // options.AbsoluteExpiration.Value.DateTime);
+ TimeSpan ts = options.AbsoluteExpirationRelativeToNow.Value;
+ ssValue.ExpirationTimeUtc = nowUtc + ts;
+ }
+
+ if (options.SlidingExpiration != null)
+ {
+ //LogDebug("Inserting against key [" + key + "] with absolute expiration: " +
+ // options.AbsoluteExpiration.Value.DateTime);
+ ssValue.SpanUntilStale = options.SlidingExpiration.Value;
+ }
+
+ _region.PutByteArray(key, ssValue.ToByteArray());
+ return;
+ }
- token.ThrowIfCancellationRequested();
+ public Task SetAsync(string key, byte[] value, DistributedCacheEntryOptions options, CancellationToken token = default(CancellationToken))
+ {
+ if (key == null)
+ {
+ throw new ArgumentNullException(nameof(key));
+ }
- return Task.Factory.StartNew(() => Set(key, value, options), token);
- }
+ token.ThrowIfCancellationRequested();
- private void Connect()
- {
- if (_region != null)
- {
- return;
- }
-
- _connectLock.Wait();
- try
- {
- var regionFactory = _cache.CreateRegionFactory(RegionShortcut.Proxy);
- try
+ return Task.Factory.StartNew(() => Set(key, value, options), token);
+ }
+
+ private void Connect()
{
- _logger?.LogTrace("Create CacheRegion");
- _region = regionFactory.CreateRegion(_regionName);
- _logger?.LogTrace("CacheRegion created");
+ if (_region != null)
+ {
+ return;
+ }
+
+ _connectLock.Wait();
+ RegionFactory regionFactory = null;
+ try
+ {
+ regionFactory = _cache.CreateRegionFactory(RegionShortcut.Proxy);
+ try
+ {
+ _logger?.LogTrace("Create CacheRegion");
+ _region = regionFactory.CreateRegion(_regionName);
+ _logger?.LogTrace("CacheRegion created");
+ }
+ catch (Exception e)
+ {
+ _logger?.LogInformation(e, "Create CacheRegion failed... now trying to get the region");
+ }
+ }
+ finally
+ {
+ //regionFactory?.Dispose();
+ _connectLock.Release();
+ }
}
- catch (Exception e)
+
+ protected override void DestroyContainedObject()
{
- _logger?.LogInformation(e, "Create CacheRegion failed... now trying to get the region");
+ _region?.Dispose();
+ _region = null;
}
- }
- finally
- {
- _connectLock.Release();
- }
}
- }
}
\ No newline at end of file
[geode-dotnet-core-client] 04/04: Merge branch 'develop' of
https://github.com/apache/geode-dotnet-core-client into develop
Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mmartell pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-dotnet-core-client.git
commit abda65628f5b641d9e9cc3bbc7684ea0acde904c
Merge: edf9a34 aefab27
Author: Mike Martell <mm...@pivotal.io>
AuthorDate: Thu May 27 16:50:38 2021 -0700
Merge branch 'develop' of https://github.com/apache/geode-dotnet-core-client into develop
NetCore.Test/RegionFactoryUnitTest.cs | 4 +--
startserver.ps1 | 55 +++++++++++++++++++++++++++++++++++
startserver.sh | 51 ++++++++++++++++++++++++++++++++
stopserver.ps1 | 47 ++++++++++++++++++++++++++++++
stopserver.sh | 35 ++++++++++++++++++++++
5 files changed, 190 insertions(+), 2 deletions(-)
[geode-dotnet-core-client] 02/04: Add x64 platform
Posted by mm...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
mmartell pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-dotnet-core-client.git
commit 6f5668d4fcc5a40c9ad5a6694a3408a5ad35b23e
Author: Mike Martell <mm...@pivotal.io>
AuthorDate: Thu May 27 13:27:28 2021 -0700
Add x64 platform
---
NetCore.Session/NetCore.Session.csproj | 1 +
NetCore.Test/NetCore.Test.csproj | 2 ++
NetCore/NetCore.csproj | 1 +
.../NetCore.Session.IntegrationTests.csproj | 2 ++
Session.Tests/NetCore.Session.Tests.csproj | 2 ++
SessionSample/SessionSample.csproj | 2 +-
geode-dotnet-core.sln | 20 ++++++++++----------
7 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/NetCore.Session/NetCore.Session.csproj b/NetCore.Session/NetCore.Session.csproj
index 8fb2ee7..e6636a3 100644
--- a/NetCore.Session/NetCore.Session.csproj
+++ b/NetCore.Session/NetCore.Session.csproj
@@ -2,6 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
+ <Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
<ItemGroup>
diff --git a/NetCore.Test/NetCore.Test.csproj b/NetCore.Test/NetCore.Test.csproj
index 02473bb..099a074 100644
--- a/NetCore.Test/NetCore.Test.csproj
+++ b/NetCore.Test/NetCore.Test.csproj
@@ -4,6 +4,8 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
+
+ <Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
<ItemGroup>
diff --git a/NetCore/NetCore.csproj b/NetCore/NetCore.csproj
index 06e4207..8f01f3f 100644
--- a/NetCore/NetCore.csproj
+++ b/NetCore/NetCore.csproj
@@ -4,6 +4,7 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace>Apache.Geode.NetCore</RootNamespace>
<AssemblyName>Apache.Geode.NetCore</AssemblyName>
+ <Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
</Project>
diff --git a/Session.IntegrationTests/NetCore.Session.IntegrationTests.csproj b/Session.IntegrationTests/NetCore.Session.IntegrationTests.csproj
index c4266eb..c026325 100644
--- a/Session.IntegrationTests/NetCore.Session.IntegrationTests.csproj
+++ b/Session.IntegrationTests/NetCore.Session.IntegrationTests.csproj
@@ -4,6 +4,8 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
+
+ <Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
<ItemGroup>
diff --git a/Session.Tests/NetCore.Session.Tests.csproj b/Session.Tests/NetCore.Session.Tests.csproj
index 9f66ecf..3477d78 100644
--- a/Session.Tests/NetCore.Session.Tests.csproj
+++ b/Session.Tests/NetCore.Session.Tests.csproj
@@ -4,6 +4,8 @@
<TargetFramework>netcoreapp3.1</TargetFramework>
<IsPackable>false</IsPackable>
+
+ <Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
<ItemGroup>
diff --git a/SessionSample/SessionSample.csproj b/SessionSample/SessionSample.csproj
index b2be8d8..bf84de8 100644
--- a/SessionSample/SessionSample.csproj
+++ b/SessionSample/SessionSample.csproj
@@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
- <Platforms>AnyCPU;x64</Platforms>
+ <Platforms>AnyCPU;x64;x86</Platforms>
</PropertyGroup>
<ItemGroup>
diff --git a/geode-dotnet-core.sln b/geode-dotnet-core.sln
index 0eb7484..2f1a398 100644
--- a/geode-dotnet-core.sln
+++ b/geode-dotnet-core.sln
@@ -27,40 +27,40 @@ Global
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Debug|x64.ActiveCfg = Debug|Any CPU
- {09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Debug|x64.Build.0 = Debug|Any CPU
+ {09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Debug|x64.ActiveCfg = Debug|x64
+ {09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Debug|x64.Build.0 = Debug|x64
{09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Release|Any CPU.Build.0 = Release|Any CPU
{09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Release|x64.ActiveCfg = Release|Any CPU
{09ABBCE7-B217-43F1-A51B-CC5BDCD8EE98}.Release|x64.Build.0 = Release|Any CPU
{501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Debug|x64.ActiveCfg = Debug|Any CPU
- {501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Debug|x64.Build.0 = Debug|Any CPU
+ {501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Debug|x64.ActiveCfg = Debug|x64
+ {501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Debug|x64.Build.0 = Debug|x64
{501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Release|Any CPU.Build.0 = Release|Any CPU
{501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Release|x64.ActiveCfg = Release|Any CPU
{501DEA7E-8985-42A8-8BC9-C073E1B6DFE0}.Release|x64.Build.0 = Release|Any CPU
{CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Debug|x64.ActiveCfg = Debug|Any CPU
- {CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Debug|x64.Build.0 = Debug|Any CPU
+ {CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Debug|x64.ActiveCfg = Debug|x64
+ {CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Debug|x64.Build.0 = Debug|x64
{CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Release|Any CPU.Build.0 = Release|Any CPU
{CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Release|x64.ActiveCfg = Release|Any CPU
{CC1FEC64-9AD6-4A69-ADF2-038CF67A8590}.Release|x64.Build.0 = Release|Any CPU
{C107D019-3B4F-403D-9040-ECB6E86C44E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C107D019-3B4F-403D-9040-ECB6E86C44E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {C107D019-3B4F-403D-9040-ECB6E86C44E9}.Debug|x64.ActiveCfg = Debug|Any CPU
- {C107D019-3B4F-403D-9040-ECB6E86C44E9}.Debug|x64.Build.0 = Debug|Any CPU
+ {C107D019-3B4F-403D-9040-ECB6E86C44E9}.Debug|x64.ActiveCfg = Debug|x64
+ {C107D019-3B4F-403D-9040-ECB6E86C44E9}.Debug|x64.Build.0 = Debug|x64
{C107D019-3B4F-403D-9040-ECB6E86C44E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C107D019-3B4F-403D-9040-ECB6E86C44E9}.Release|Any CPU.Build.0 = Release|Any CPU
{C107D019-3B4F-403D-9040-ECB6E86C44E9}.Release|x64.ActiveCfg = Release|Any CPU
{C107D019-3B4F-403D-9040-ECB6E86C44E9}.Release|x64.Build.0 = Release|Any CPU
{742B4109-544E-492E-86AC-DC1E0FCCA596}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{742B4109-544E-492E-86AC-DC1E0FCCA596}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {742B4109-544E-492E-86AC-DC1E0FCCA596}.Debug|x64.ActiveCfg = Debug|Any CPU
- {742B4109-544E-492E-86AC-DC1E0FCCA596}.Debug|x64.Build.0 = Debug|Any CPU
+ {742B4109-544E-492E-86AC-DC1E0FCCA596}.Debug|x64.ActiveCfg = Debug|x64
+ {742B4109-544E-492E-86AC-DC1E0FCCA596}.Debug|x64.Build.0 = Debug|x64
{742B4109-544E-492E-86AC-DC1E0FCCA596}.Release|Any CPU.ActiveCfg = Release|Any CPU
{742B4109-544E-492E-86AC-DC1E0FCCA596}.Release|Any CPU.Build.0 = Release|Any CPU
{742B4109-544E-492E-86AC-DC1E0FCCA596}.Release|x64.ActiveCfg = Release|Any CPU