From abb7e915eef02e78f24a750a518b2b1d46ba3a92 Mon Sep 17 00:00:00 2001 From: Rebecca Williams Date: Mon, 24 Aug 2026 16:10:53 +0100 Subject: [PATCH 1/5] Add preference to use the 'optimized with last sample' AA postprocessor --- .../reader/appliance/ApplianceArchiveReaderConstants.java | 2 ++ .../reader/appliance/ApplianceOptimizedValueIterator.java | 6 +++++- .../archive/reader/appliance/AppliancePreferences.java | 1 + .../src/main/resources/appliance_preferences.properties | 5 +++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceArchiveReaderConstants.java b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceArchiveReaderConstants.java index 3a06db54cc..6266df8acd 100644 --- a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceArchiveReaderConstants.java +++ b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceArchiveReaderConstants.java @@ -52,6 +52,8 @@ public class ApplianceArchiveReaderConstants { public static final String OP_MEAN = "mean_"; /** Operator for the optimized post processor */ public static final String OP_OPTIMIZED = "optimized_"; + /** Operator for the optimized with last sample post processor */ + public static final String OP_OPTIMIZED_WITH_LAST_SAMPLE = "optimLastSample_"; /** The schema delimiter: ca://pvName or pva://pvname */ static final String SCHEMA_DELIMITER = "://"; diff --git a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java index cbb8b653a8..e8d7b0dc70 100644 --- a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java +++ b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java @@ -66,7 +66,11 @@ public ApplianceOptimizedValueIterator(ApplianceArchiveReader reader, String nam */ @Override protected void fetchDataInternal(String pvName) throws ArchiverApplianceException { - String optimized = new StringBuilder().append(ApplianceArchiveReaderConstants.OP_OPTIMIZED) + String optimizedOperator = ApplianceArchiveReaderConstants.OP_OPTIMIZED; + if (AppliancePreferences.ppOptimizedWithLastSample) + optimizedOperator = ApplianceArchiveReaderConstants.OP_OPTIMIZED_WITH_LAST_SAMPLE; + + String optimized = new StringBuilder().append(optimizedOperator) .append(requestedPoints).append('(').append(pvName).append(')').toString(); super.fetchDataInternal(optimized); } diff --git a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/AppliancePreferences.java b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/AppliancePreferences.java index db6e196395..451a140772 100644 --- a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/AppliancePreferences.java +++ b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/AppliancePreferences.java @@ -20,6 +20,7 @@ public class AppliancePreferences { @Preference static boolean useStatisticsForOptimizedData; @Preference static boolean useNewOptimizedOperator; @Preference static boolean useHttps; + @Preference static boolean ppOptimizedWithLastSample; static { AnnotatedPreferences.initialize(AppliancePreferences.class, "/appliance_preferences.properties"); diff --git a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties index 17c55c3225..bbf6ed59b3 100644 --- a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties +++ b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties @@ -7,3 +7,8 @@ useNewOptimizedOperator=true # Use 'https://..' instead of plain 'http://..'? useHttps=false + +# Query the AA using the 'Optimized With Last Sample' post processor. +# Setting to false means that the 'Optimized' post processor will be +# used. +ppOptimizedWithLastSample=false From fea89bc6d3d4cfcde7acd97624755c43a096c7d7 Mon Sep 17 00:00:00 2001 From: Rebecca Williams Date: Mon, 24 Aug 2026 18:15:27 +0100 Subject: [PATCH 2/5] Fix pre-commit linting --- .../reader/appliance/ApplianceOptimizedValueIterator.java | 4 ++-- .../src/main/resources/appliance_preferences.properties | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java index e8d7b0dc70..2ffc21c533 100644 --- a/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java +++ b/app/trends/archive-reader/src/main/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIterator.java @@ -69,7 +69,7 @@ protected void fetchDataInternal(String pvName) throws ArchiverApplianceExceptio String optimizedOperator = ApplianceArchiveReaderConstants.OP_OPTIMIZED; if (AppliancePreferences.ppOptimizedWithLastSample) optimizedOperator = ApplianceArchiveReaderConstants.OP_OPTIMIZED_WITH_LAST_SAMPLE; - + String optimized = new StringBuilder().append(optimizedOperator) .append(requestedPoints).append('(').append(pvName).append(')').toString(); super.fetchDataInternal(optimized); @@ -159,4 +159,4 @@ public VType next() { return super.extractData(message); } } -} \ No newline at end of file +} diff --git a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties index bbf6ed59b3..3bb87b09e6 100644 --- a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties +++ b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties @@ -10,5 +10,5 @@ useHttps=false # Query the AA using the 'Optimized With Last Sample' post processor. # Setting to false means that the 'Optimized' post processor will be -# used. +# used. ppOptimizedWithLastSample=false From fc7cd32028e2a11b073206fc94415d2ad31a1867 Mon Sep 17 00:00:00 2001 From: Rebecca Williams Date: Mon, 24 Aug 2026 18:24:28 +0100 Subject: [PATCH 3/5] Fix pre-commit linting --- .../src/main/resources/appliance_preferences.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties index 3bb87b09e6..2a0df35b72 100644 --- a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties +++ b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties @@ -9,6 +9,6 @@ useNewOptimizedOperator=true useHttps=false # Query the AA using the 'Optimized With Last Sample' post processor. -# Setting to false means that the 'Optimized' post processor will be +# Setting to false means that the 'Optimized' post processor will be # used. ppOptimizedWithLastSample=false From 191c1203706b4eb39cf3b92c15607192dc33e790 Mon Sep 17 00:00:00 2001 From: Rebecca Williams Date: Thu, 10 Sep 2026 16:02:14 +0100 Subject: [PATCH 4/5] Make optimLastSample the default option --- .../src/main/resources/appliance_preferences.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties index 2a0df35b72..e792553ce0 100644 --- a/app/trends/archive-reader/src/main/resources/appliance_preferences.properties +++ b/app/trends/archive-reader/src/main/resources/appliance_preferences.properties @@ -11,4 +11,4 @@ useHttps=false # Query the AA using the 'Optimized With Last Sample' post processor. # Setting to false means that the 'Optimized' post processor will be # used. -ppOptimizedWithLastSample=false +ppOptimizedWithLastSample=true From 2697ececca37a6ee1c2de7f87e1d234eb0ec5fcc Mon Sep 17 00:00:00 2001 From: Rebecca Williams Date: Thu, 10 Sep 2026 16:32:32 +0100 Subject: [PATCH 5/5] Update archive test to check for new optimLastsample_ data retrieval (now default) --- .../appliance/ApplianceOptimizedValueIteratorTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/trends/archive-reader/src/test/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIteratorTest.java b/app/trends/archive-reader/src/test/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIteratorTest.java index c12686c866..1f9cd69dd5 100644 --- a/app/trends/archive-reader/src/test/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIteratorTest.java +++ b/app/trends/archive-reader/src/test/java/org/phoebus/archive/reader/appliance/ApplianceOptimizedValueIteratorTest.java @@ -38,13 +38,13 @@ private static GenMsgIterator probeStream(PayloadType type) { @Test void fetchUrlContainsOptimizedNOperator() throws Exception { FakeDataRetrieval dr = new FakeDataRetrieval(probeStream(PayloadType.SCALAR_DOUBLE)); - dr.whenPvContains("optimized_", emptyStream()); + dr.whenPvContains("optimLastSample_", emptyStream()); FakeApplianceArchiveReader reader = new FakeApplianceArchiveReader(dr); new ApplianceOptimizedValueIterator(reader, "TEST:PV", START, END, POINTS, false); - assertTrue(dr.pvsCalled.stream().anyMatch(pv -> pv.startsWith("optimized_") && pv.endsWith("(TEST:PV)")), - "Expected optimized_(TEST:PV) call, got: " + dr.pvsCalled); + assertTrue(dr.pvsCalled.stream().anyMatch(pv -> pv.startsWith("optimLastSample_") && pv.endsWith("(TEST:PV)")), + "Expected optimLastSample__(TEST:PV) call, got: " + dr.pvsCalled); } @Test @@ -78,7 +78,7 @@ private ApplianceOptimizedValueIterator makeWithWaveformData(boolean useStatisti when(dataStream.getPayLoadInfo()).thenReturn(waveformInfo); FakeDataRetrieval dr = new FakeDataRetrieval(probeStream(PayloadType.SCALAR_DOUBLE)); - dr.whenPvContains("optimized_", dataStream); + dr.whenPvContains("optimLastSample_", dataStream); FakeApplianceArchiveReader reader = new FakeApplianceArchiveReader(dr); return new ApplianceOptimizedValueIterator(reader, "TEST:PV", START, END, POINTS, useStatistics);