From aa24fe2da80ac6088908cd080e0f35fe00fda5d5 Mon Sep 17 00:00:00 2001 From: George Date: Thu, 27 Feb 2025 13:43:48 -0800 Subject: [PATCH] Incorporate new P23 eviction behavior --- cmd/stellar-rpc/internal/ingest/service.go | 23 +++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/cmd/stellar-rpc/internal/ingest/service.go b/cmd/stellar-rpc/internal/ingest/service.go index 7344e9a3..23094ab3 100644 --- a/cmd/stellar-rpc/internal/ingest/service.go +++ b/cmd/stellar-rpc/internal/ingest/service.go @@ -295,12 +295,29 @@ func (s *Service) ingest(ctx context.Context, sequence uint32) error { return err } - // EvictedTemporaryLedgerKeys will include both temporary ledger keys which - // have been evicted and their corresponding ttl ledger entries - evictedTempLedgerKeys, err := ledgerCloseMeta.EvictedTemporaryLedgerKeys() + // EvictedTemporaryLedgerKeys will, in this completely borked up version of + // XDR, actually include ALL evicted ledger keys (including persistent and + // code entries). + // + // In order to maintain the facade for simulation that eviction isn't + // happening yet (simulation isn't ready for state archival yet), we will + // continue to only evict temporary entries from our state. + // + // Tomorrow, when ledger state isn't managed by RPC at all, this code can be + // removed entirely and we can rely on Core to maintain ledger entries for + // simulation. + evictedLedgerKeys, err := ledgerCloseMeta.EvictedTemporaryLedgerKeys() if err != nil { return err } + + evictedTempLedgerKeys := make([]xdr.LedgerKey, 0, len(evictedLedgerKeys)) + for _, key := range evictedLedgerKeys { + if key.Type == xdr.LedgerEntryTypeContractData && key.MustContractData().Durability == xdr.ContractDataDurabilityTemporary { + evictedTempLedgerKeys = append(evictedTempLedgerKeys, key) + } + } + if err := s.ingestTempLedgerEntryEvictions(ctx, evictedTempLedgerKeys, tx); err != nil { return err }