From 2f0a50cf9fdbdc6110c18d4fe06ffb5b6b709b1a Mon Sep 17 00:00:00 2001 From: Marcin Lewandowski Date: Fri, 26 Nov 2021 22:22:47 +0100 Subject: [PATCH 1/4] RavenDB-17430 Create new icon for the Thread's Stack Trace --- .../wwwroot/Content/css/fonts/icomoon.eot | Bin 89472 -> 95968 bytes .../wwwroot/Content/css/fonts/icomoon.svg | 50 ++++++++++++++---- .../wwwroot/Content/css/fonts/icomoon.ttf | Bin 89308 -> 95804 bytes .../wwwroot/Content/css/fonts/icomoon.woff | Bin 89384 -> 95880 bytes .../wwwroot/Content/css/icons.less | 1 + 5 files changed, 40 insertions(+), 11 deletions(-) diff --git a/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.eot b/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.eot index 3b78b87f8557adc9093865c73018d56a4e2968ca..4655045f0fdac30525aa99232ac27fa3de5f2cf6 100644 GIT binary patch delta 9203 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 AEdT%j delta 3279 zcmbVOdr(tX8b9B?Np4JTV%`aPKOg~O0wE+IPsJplJcu6hdOSf3pb{spyI&Q0u%XY2pcCFKKY{#;UYdhU;iFxRZ=*R{K42v(+Il)n{EX#b)429MX_adK<>V_P-T-TipnjS!dL zwrPFi`Cn{1gCHD3i0El=+}a7vobM2MBVhu!C zE6j-GfTF({iXp%MC8&h_vD+Xbqa%n%t|dp26XjuOmP%~|rBuPA#9*^n?G88iq}l$Q zBFG0{;_Xd94B)l-vRSpw%3=*b@?}Pmh^9p%qikkcW~Rk7Ef$$%PK(7{>2_C|Ehg7? zg+iHWFl5T*a-vv(;)gSGmGrU8Yijn=(@uMg$r`Tyh;b zf^t#8eU0^6?ln$n`=RAYV3CpnnL&h2Y!ZtMti2W*k63$QAO4)jpwCpu<+cB{J!58? zcm!h%vUo^l5VHpr8>Mh6A%`(qDVHl1nR@o1xZxv*XQts)JcLmHeBP9uM5CDKB22U! zd9nQnFn=tsvwW&^!Q*v9e-Tf!!D~seNxf2~&F57Tx$j`ISk9Cj0a?#al36NU?n;Z< z;$%%`={C!t2zbYFBiiTa;tIK{RM{Mf33B7JL|=rD;wkU<^^FZspUR^gbmH!}ZGuiD_?E0z}?_u}}KF z-a5NF`oFvT$ZBp<((-Iyp;WpgzhJdq&(&!og@vI|VPQn8g?k3Ndu6!as-MX3h`_>{OF9epqh8K}_0Kt#UeNS_%2gmvZxL7MkS< zjqOhD5sCmkh5Y0mvJj=?U@RU|MOlCPbHIp$&tHtAhfNkB@@a}snY7wP$teNTVB4^C z9z~h8+B}POu?d!NX^Il@mQy?~H~u!kHx}Eh`I;mPkH?oh-!^0kCMOr`v?hwr6UE== z;kKMBruZ}mmar%0pb4~|TtsS-78%jlAANUt!b)_B{2g%|nNUuDwM0$lc$HqC*Jr^& zNA&|oQ~$0hV9%<-p<=UHS7zA*Ces4Z@sS7OEusacYFa0i>V>Rl<|GlZU9Cz$JvFvu zt4giTwGI!DSQje)c`s~sfo^Pb;c-!PKH7Bf3_dV&98;h0 zN^-I#*=DWHas-V=XZ$v8kV*^*mT7}T%1S^Jl9AzITdrD#onou;cxsaqPFeVB0%wpW zU|43QvES~_ERT}^sqcB1`D$#;PhUs(t?-#y9=673dh>9ElMc#3sVQ}iI>#|r^?$VJ zKk}nhf5pm)6)RhV_4UDqhQ#y#y9OX95Qzlp>zA-UoS7&7WPA`5%!PDNfsgqt9USCW z2#pJ!kWEM^v;YP1@ohO494>M>Q{{pH@m7H8cR>aRisE;fcU_Q0U2A92Iy1ffkEuk%1XA>rbTSch6zGjK_gdYQ9c_+9$mxyDat$ zO=(63rmZUkQvlB~EoCqOUM5}!-O#}7Tnf9#sbz2zs3mA6dJr`*UzbCW^rZn)SOMeX zUsXVivH_+M_ptKBrw#K9zCuC{Te8qc=lzOr!%cU?&snfQwK*9@zvYfDz`&PWT(pOyp6BMH8P8AO+643e=6R zKqk~d8=NJK#6jW)nM-aZ&y%+}$(*a)bnYZ!?b+)PGjVa0YUi)c>*|E>@T54HpEcJTY z=Csr4v{T~ja2|8sUU1SCaUG1h&bVdnI`@$KMn)jxM&@&#YR^Pghd1mU^q$L>WH0h% z`gi(|BlR8!1&bn_N91Nda)v_wKx_S*~P41e>$eGC1dQ`8d57c+AUDmj|v8QQc)4`_G z>xb8$Z8kTzHov)H+lHGhc`aovXC6v@XsWfjb>dA+y9ahp?D=+Y?%t_h zL2vi7&3#pUPxig@%k2FH`$rF`4!93g9T+Q@6V gZGTxVetG!io4@uSedFjP4n-XPP%>`(Ih=)m13~!|OaK4? diff --git a/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.svg b/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.svg index a350be856db1..e95622440e0d 100644 --- a/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.svg +++ b/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.svg @@ -13,10 +13,10 @@ - - + + - + @@ -47,7 +47,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -97,7 +97,7 @@ - + @@ -109,7 +109,7 @@ - + @@ -161,7 +161,7 @@ - + @@ -233,7 +233,7 @@ - + @@ -289,7 +289,7 @@ - + @@ -325,4 +325,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.ttf b/src/Raven.Studio/wwwroot/Content/css/fonts/icomoon.ttf index 83c5bf7bb9ab220f8ffabf3152e7359bcc28daf3..9652481a565640699cc320771e25e8c08897b922 100644 GIT binary patch delta 9183 zcmc&)3v^V~)js>)nYlB`%w!(-&P^thWFE=fOlC6AOeTROzz~vmTj$Cwf@#p`dBX7AA$Dww~CQm{(UBif@tgN z>RP>-eeXHvp65Pi@BQt4bLx5J@pH-~0YXS7*+f_poYoo$XPLNuEIE$Uy=cXPm1p}u zm`e!QFyFas!7VHCX~6tie5#lAu3I{^Qn~~4n+ROr-LquD;?SF?d<1Uz1HLcs!2;|5 z?RNVH5xo(baTbvKsdH|5$k;sTiFTWlRBak@45e>ni4eD;kL+#l9VrPlY8uC~DcF8_jKQF0`~{n316!SSPTU{A6Qn4+VQmbu?=BUUb;$nBPU1TC@Br{1T*-Y-n zNrd{7LCZ8=v=l%rAH)z6Ct5^HI95IZq#B5cvGQ1XndA-t=Le}sDi4dC+sR3ssNykI z2BOL-#jw5@<3v5+3zf6~`JgRn;YA4>#wO7}LYgh6*-H~)V<~_bBOZ;MBTWj=+Ipqd;OQAmJ8{b;= z9=#sBsrxTFus^U^-aA@w&Z)`DR`YtTR&U{QwQ3g~IKwDrb2ze2$1C$_Snz?IE>1xri}AdqChh1W15&N%cg}k`2!%0D!dvm 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 delta 3358 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 Zr4B`++lZA2)r|<@-ymk Date: Fri, 26 Nov 2021 11:12:14 +0100 Subject: [PATCH 2/4] RavenDB-17308 Using mmap() instead of posix_memalign() when allocating 4KB aligned memory for the encryption buffers and journal reader recovery. This way we avoid the memory fragmentation. Note that providing NULL as the first argument to mmap() makes that the returned address is page-aligned. --- .../Platform/PlatformSpecific.cs | 36 +++++++++++++------ 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/Sparrow.Server/Platform/PlatformSpecific.cs b/src/Sparrow.Server/Platform/PlatformSpecific.cs index 58af60f7421a..3f43814e571f 100644 --- a/src/Sparrow.Server/Platform/PlatformSpecific.cs +++ b/src/Sparrow.Server/Platform/PlatformSpecific.cs @@ -1,7 +1,9 @@ using System; using System.ComponentModel; using System.Diagnostics; +using System.Runtime.InteropServices; using System.Threading; +using Sparrow.Global; using Sparrow.Platform; using Sparrow.Server.LowMemory; using Sparrow.Server.Platform.Posix; @@ -36,21 +38,28 @@ public static class NativeMemory if (PlatformDetails.RunningOnPosix) { - byte* ptr; - var rc = Syscall.posix_memalign(&ptr, (IntPtr)4096, (IntPtr)size); - if (rc != 0) - Syscall.ThrowLastError(rc, "Could not allocate memory"); + // we pass NULL (IntPtr.Zero) as the first parameter (address / start) so the kernel chooses the(page-aligned) address at which to create the mapping - return ptr; + var pageAlignedMemory = Syscall.mmap64(IntPtr.Zero, (UIntPtr)size, MmapProts.PROT_READ | MmapProts.PROT_WRITE, + MmapFlags.MAP_PRIVATE | MmapFlags.MAP_ANONYMOUS, -1, 0L); + + if (pageAlignedMemory.ToInt64() == -1) + { + var err = Marshal.GetLastWin32Error(); + Syscall.ThrowLastError(err, + $"Could not allocate memory (allocation size: {size / Constants.Size.Kilobyte:#,#0} kb)"); + } + + return (byte*)pageAlignedMemory; } - var allocate4KbAllignedMemory = Win32MemoryProtectMethods.VirtualAlloc(null, (UIntPtr)size, Win32MemoryProtectMethods.AllocationType.COMMIT, + var allocate4KbAlignedMemory = Win32MemoryProtectMethods.VirtualAlloc(null, (UIntPtr)size, Win32MemoryProtectMethods.AllocationType.COMMIT, Win32MemoryProtectMethods.MemoryProtection.READWRITE); - if (allocate4KbAllignedMemory == null) + if (allocate4KbAlignedMemory == null) ThrowFailedToAllocate(); - return allocate4KbAllignedMemory; + return allocate4KbAlignedMemory; } public static void Free4KbAlignedMemory(byte* ptr, long size, Sparrow.Utils.NativeMemory.ThreadStats stats) @@ -61,11 +70,16 @@ public static void Free4KbAlignedMemory(byte* ptr, long size, Sparrow.Utils.Nati Sparrow.Utils.NativeMemory.UpdateMemoryStatsForThread(stats, size); Interlocked.Add(ref Sparrow.Utils.NativeMemory._totalAllocatedMemory, -size); - - var p = new IntPtr(ptr); + if (PlatformDetails.RunningOnPosix) { - Syscall.free(p); + var result = Syscall.munmap((IntPtr)ptr, (UIntPtr)(uint)size); + if (result == -1) + { + var err = Marshal.GetLastWin32Error(); + Syscall.ThrowLastError(err, "Failed to munmap "); + } + return; } From 46b575e5ea852c64cbba81716006160d5f8cf63b Mon Sep 17 00:00:00 2001 From: aviv Date: Sun, 28 Nov 2021 12:35:11 +0200 Subject: [PATCH 3/4] RavenDB-17170 : fix flaky test - wait for etl to finish processing items before asserting values on destination --- .../Server/Documents/ETL/EtlTestBase.cs | 1 - .../Documents/ETL/EtlTimeSeriesTests.cs | 87 +++++++++++-------- 2 files changed, 51 insertions(+), 37 deletions(-) diff --git a/test/SlowTests/Server/Documents/ETL/EtlTestBase.cs b/test/SlowTests/Server/Documents/ETL/EtlTestBase.cs index b1d5a11eac2a..709e1b514ca9 100644 --- a/test/SlowTests/Server/Documents/ETL/EtlTestBase.cs +++ b/test/SlowTests/Server/Documents/ETL/EtlTestBase.cs @@ -8,7 +8,6 @@ using Raven.Client.Documents.Operations.ConnectionStrings; using Raven.Client.Documents.Operations.ETL; using Raven.Client.Documents.Operations.OngoingTasks; -using Raven.Client.Util; using Raven.Server.Documents.ETL; using Raven.Server.NotificationCenter; using Sparrow.Json; diff --git a/test/SlowTests/Server/Documents/ETL/EtlTimeSeriesTests.cs b/test/SlowTests/Server/Documents/ETL/EtlTimeSeriesTests.cs index 77901b9f69d3..b7d35299ec59 100644 --- a/test/SlowTests/Server/Documents/ETL/EtlTimeSeriesTests.cs +++ b/test/SlowTests/Server/Documents/ETL/EtlTimeSeriesTests.cs @@ -1629,50 +1629,65 @@ await using (OpenEtlOffArea(src, etlResult.TaskId, true)) var timeSeriesEntriesToAppend = timeSeriesEntries.ToList(); - var (src, dest, _) = CreateSrcDestAndAddEtl(collections, script, collections.Length == 0, srcOptions: _options); - - using (var session = src.OpenAsyncSession()) + using (var src = GetDocumentStore(_options)) + using (var dest = GetDocumentStore()) { - var entity = new User { Name = "Joe Doe" }; - await session.StoreAsync(entity, documentId); - await session.SaveChangesAsync(); - } - - random = new Random(0); - var j = 0; - while (timeSeriesEntriesToAppend.Count > 0) - { - using var session = src.OpenAsyncSession(); + using (var session = src.OpenAsyncSession()) + { + var entity = new User { Name = "Joe Doe" }; + await session.StoreAsync(entity, documentId); + await session.SaveChangesAsync(); + } + random = new Random(0); + var j = 0; while (timeSeriesEntriesToAppend.Count > 0) { - int index = random.Next(0, timeSeriesEntriesToAppend.Count - 1); - var entry = timeSeriesEntriesToAppend[index]; - session.TimeSeriesFor(documentId, timeSeriesName).Append(entry.Timestamp, entry.Values, entry.Tag); - timeSeriesEntriesToAppend.RemoveAt(index); - if (j++ % (toAppendCount / 10) == 0) - break; + using var session = src.OpenAsyncSession(); + + while (timeSeriesEntriesToAppend.Count > 0) + { + int index = random.Next(0, timeSeriesEntriesToAppend.Count - 1); + var entry = timeSeriesEntriesToAppend[index]; + session.TimeSeriesFor(documentId, timeSeriesName).Append(entry.Timestamp, entry.Values, entry.Tag); + timeSeriesEntriesToAppend.RemoveAt(index); + if (j++ % (toAppendCount / 10) == 0) + break; + } + + await session.SaveChangesAsync(); } - await session.SaveChangesAsync(); - } + var db = await GetDocumentDatabaseInstanceFor(src); + long lastEtag; + using (db.DocumentsStorage.ContextPool.AllocateOperationContext(out DocumentsOperationContext context)) + using (context.OpenReadTransaction()) + { + lastEtag = db.DocumentsStorage.TimeSeriesStorage.GetLastTimeSeriesEtag(context); + } - TimeSeriesEntry[] actual = null; - await AssertWaitForValueAsync(async () => - { - using IAsyncDocumentSession session = dest.OpenAsyncSession(); - var result = await session.TimeSeriesFor(documentId, timeSeriesName).GetAsync(DateTime.MinValue, DateTime.MaxValue); - if (result == null) - return 0; - actual = result.ToArray(); - return actual.Count(); - }, timeSeriesEntries.Length, interval: 1000); + var etlDone = WaitForEtl(src, (_, statistics) => statistics.LastProcessedEtag >= lastEtag); + AddEtl(src, dest, collections, script, applyToAllDocuments : collections.Length == 0); + + Assert.True(etlDone.Wait(TimeSpan.FromSeconds(30))); - for (int i = 0; i < timeSeriesEntries.Length; i++) - { - Assert.Equal(timeSeriesEntries[i].Timestamp, actual[i].Timestamp); - Assert.Equal(timeSeriesEntries[i].Tag, actual[i].Tag); - Assert.Equal(timeSeriesEntries[i].Value, actual[i].Value); + TimeSeriesEntry[] actual = null; + await AssertWaitForValueAsync(async () => + { + using IAsyncDocumentSession session = dest.OpenAsyncSession(); + var result = await session.TimeSeriesFor(documentId, timeSeriesName).GetAsync(DateTime.MinValue, DateTime.MaxValue); + if (result == null) + return 0; + actual = result.ToArray(); + return actual.Count(); + }, timeSeriesEntries.Length, interval: 1000); + + for (int i = 0; i < timeSeriesEntries.Length; i++) + { + Assert.Equal(timeSeriesEntries[i].Timestamp, actual[i].Timestamp); + Assert.Equal(timeSeriesEntries[i].Tag, actual[i].Tag); + Assert.Equal(timeSeriesEntries[i].Value, actual[i].Value); + } } } From 0e4eef8e3725bc5a6b52074305d48262604cea5c Mon Sep 17 00:00:00 2001 From: aviv Date: Sun, 28 Nov 2021 16:17:36 +0200 Subject: [PATCH 4/4] RavenDB-15502 : add debug info to flaky test --- test/SlowTests/Issues/RavenDB-15080.cs | 30 ++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/test/SlowTests/Issues/RavenDB-15080.cs b/test/SlowTests/Issues/RavenDB-15080.cs index 4640d64c7d81..73bb62d3ffdd 100644 --- a/test/SlowTests/Issues/RavenDB-15080.cs +++ b/test/SlowTests/Issues/RavenDB-15080.cs @@ -5,6 +5,7 @@ using System.Text; using System.Threading.Tasks; using FastTests.Server.Replication; +using Raven.Client.Documents; using Raven.Client.Documents.Operations; using Raven.Client.Documents.Smuggler; using Raven.Server.ServerWide.Context; @@ -185,9 +186,10 @@ public async Task CanSplitAndReplicateRandomCounterName() } }); await Task.WhenAll(t1, t2); + + Assert.True(EnsureReplicating(storeA, storeB, out var errMsg), errMsg); + Assert.True(EnsureReplicating(storeB, storeA, out errMsg), errMsg); - EnsureReplicating(storeA, storeB); - EnsureReplicating(storeB, storeA); await EnsureNoReplicationLoop(Server, storeA.Database); await EnsureNoReplicationLoop(Server, storeB.Database); } @@ -631,5 +633,29 @@ private static string RandomString(int size, Random random) } return builder.ToString(); } + + private bool EnsureReplicating(IDocumentStore src, IDocumentStore dst, out string errorMsg) + { + errorMsg = string.Empty; + + var id = "marker/" + Guid.NewGuid(); + using (var s = src.OpenSession()) + { + s.Store(new { }, id); + s.SaveChanges(); + } + + if (WaitForDocumentToReplicate(dst, id, 15 * 1000) != null) + return true; + + errorMsg = $"Failed to replicate from '{src.Database}' to '{dst.Database}' : "; + var replicationLoader = GetDocumentDatabaseInstanceFor(src).Result.ReplicationLoader; + foreach (var e in replicationLoader.OutgoingFailureInfo) + { + errorMsg += string.Join(", ", e.Value.Errors.Select(x => x.Message)); + } + + return false; + } } }