SenseNet / sn-search-lucene29

sensenet Search engine implementation using Lucene.Net 2.9
GNU General Public License v2.0
1 stars 0 forks source link

RefreshIndex/RebuildIndex subtree esetén ResourceExhausted hibát kapunk #93

Open VargaJoe opened 4 months ago

VargaJoe commented 4 months ago

Adott projektünkben vannak csomópontok, amik nem látszanak az admin felületen, IntegrityChecker segítségével ezeket felderítettük és megpróbáltuk a beépített index javító odata megoldásokkal javítani. Azt tapsztaltuk, hogy egy elem esetén a javítás sikeres volt, a nagyobb NotInIndex subtree-k essetén a RefreshIndex/RebuildIndex megoldások ResourceExhausted hibát dobnak.

Hibaüzenet: Error status code 'ResourceExhausted' with detail '"Received message exceeds the maximum configured message size."' raised.

trace: StackTrace at Grpc.Net.Client.Internal.HttpClientCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method2 method, String host, CallOptions options, TRequest request) at Grpc.Core.Interceptors.InterceptingCallInvoker.<BlockingUnaryCall>b__3_0[TRequest,TResponse](TRequest req, ClientInterceptorContext2 ctx) at Grpc.Core.ClientBase.ClientBaseConfiguration.ClientBaseConfigurationInterceptor.BlockingUnaryCall[TRequest,TResponse](TRequest request, ClientInterceptorContext2 context, BlockingUnaryCallContinuation2 continuation) at Grpc.Core.Interceptors.InterceptingCallInvoker.BlockingUnaryCall[TRequest,TResponse](Method2 method, String host, CallOptions options, TRequest request) at SenseNet.Search.Lucene29.Centralized.GrpcService.GrpcSearch.GrpcSearchClient.WriteIndex(WriteIndexRequest request, CallOptions options) at SenseNet.Search.Lucene29.Centralized.GrpcService.GrpcSearch.GrpcSearchClient.WriteIndex(WriteIndexRequest request, Metadata headers, Nullable1 deadline, CancellationToken cancellationToken) at SenseNet.Search.Lucene29.Centralized.GrpcClient.GrpcServiceClient.WriteIndex(SnTerm[] deletions, DocumentUpdate[] updates, IndexDocument[] additions)

A megoldás lépései:

VargaJoe commented 4 months ago

A GrpcChannelOptions message size értéke defaultból 4mb, amit feltehetően túllépünk az adott projektnél az adott subtree-ben. Ez amiatt is előfordulhat, hogy az indexelésnél jelenleg használt index partition nem méretre, hanem darabszámra vizsgál (30-ra van jelenleg beállítva). Ilyen esetben átmeneti megoldásként csökkenthető a partition méret, de ez növeli a hálózat terhelését, másik workaround az IndexIntegrityChecker jelentése alapján egyenként javítani az indexet a hibás contenteknél. Ha az említett korlátot egy content önmaga is átlépi, akkor a workaroundok sem fognak segíteni, ezeknél az eseteknél az issue javítása fog megoldást nyújtani.

VargaJoe commented 4 months ago

a partition méret csökkentése nálunk nem hozott érezhető változást, az adott hibás subtree ugyanúgy hibára futott

kavics commented 3 months ago

The parts of grpc requests are serialized as JSON except for the SnQuery. SnQuery cannot be serialized as JSON, custom serialization is required.