From 700d2ba37f6ade7de2196357a9a29f855d06368f Mon Sep 17 00:00:00 2001 From: Ron Anderson Date: Thu, 3 Apr 2014 15:42:12 -0500 Subject: [PATCH] Issue #2737 Make iscMosaic remove data from ISC when grids are deleted. Change-Id: Ibf1255244b6e5856b5052e541727d427b331d9fe Former-commit-id: ea250a253f47be1b0175f66b2ffa577261e6723d [formerly 01ab6ce52dfc80877d2e02b7a6da275c99c414d2 [formerly 5db8738783d79e8a48bfffac49910cc46df61ad2]] Former-commit-id: 01ab6ce52dfc80877d2e02b7a6da275c99c414d2 Former-commit-id: 51bb7f474d830927ff0af3fa9055b12151ba0413 --- .../viz/gfe/core/internal/IFPClient.java | 5 +- .../raytheon/viz/gfe/core/parm/DbParm.java | 7 +-- .../com/raytheon/viz/gfe/rsc/GFEResource.java | 12 ++-- .../server/handler/SaveGfeGridHandler.java | 20 +++---- .../edex_static/base/gfe/isc/iscMosaic.py | 3 +- .../gfe/request/SaveGfeGridRequest.java | 59 ++++++++++++++++--- .../gfe/server/request/SaveGridRequest.java | 34 +---------- 7 files changed, 75 insertions(+), 65 deletions(-) diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/IFPClient.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/IFPClient.java index 01762f44bc..e910079c64 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/IFPClient.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/internal/IFPClient.java @@ -118,6 +118,7 @@ import com.raytheon.viz.gfe.core.parm.Parm; * 06/06/13 #2073 dgilling Make getGridInventory() better match A1, * fix warnings. * 11/20/2013 #2331 randerso Added getTopoData method + * 04/03/2014 #2737 randerso Moved clientISCSendStatus to SaveGFEGridRequest * * * @@ -421,8 +422,8 @@ public class IFPClient { throws GFEServerException { ServerResponse response = null; if (!requests.isEmpty()) { - SaveGfeGridRequest request = new SaveGfeGridRequest(); - request.setSaveRequest(requests); + SaveGfeGridRequest request = new SaveGfeGridRequest( + dataManager.clientISCSendStatus(), requests); response = makeRequest(request); } logResponse(response); diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/DbParm.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/DbParm.java index f392d9c32e..b05c7944b2 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/DbParm.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/core/parm/DbParm.java @@ -84,6 +84,7 @@ import com.raytheon.viz.gfe.core.griddata.IGridData; * logging for save performance * 04/23/13 #1949 rjpeter Added logging of number of records. * 06/26/13 #2044 randerso Fixed error message priority + * 04/03/2014 #2737 randerso Moved clientSendStatus from SaveGridRequest to SaveGFEGridRequest * * * @author chammack @@ -618,8 +619,7 @@ public class DbParm extends Parm { if (size > GfeClientConfig.getInstance().getGridSaveThreshold()) { TimeRange tr = new TimeRange(saveTime.getStart(), data .getGridTime().getEnd()); - sgr.add(new SaveGridRequest(getParmID(), tr, records, - dataManager.clientISCSendStatus())); + sgr.add(new SaveGridRequest(getParmID(), tr, records)); // save this batch of grids if (doSave(sgr)) { @@ -647,8 +647,7 @@ public class DbParm extends Parm { // if any grids or any time not saved if ((size > 0) || (saveTime.getDuration() > 0)) { - sgr.add(new SaveGridRequest(getParmID(), saveTime, records, - dataManager.clientISCSendStatus())); + sgr.add(new SaveGridRequest(getParmID(), saveTime, records)); recordCount = records.size(); } diff --git a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEResource.java b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEResource.java index f59d220e16..0c2d108ec3 100644 --- a/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEResource.java +++ b/cave/com.raytheon.viz.gfe/src/com/raytheon/viz/gfe/rsc/GFEResource.java @@ -169,6 +169,7 @@ import com.vividsolutions.jts.geom.Envelope; * Jan 23, 2014 2703 bsteffen Allow construction using a resourceData, * paint using the time in paintProps and * remove dead code in paintInternal + * Apr 03, 2014 2737 randerso Uncommented out listers for iscParm inventory changed * * * @@ -322,8 +323,7 @@ public class GFEResource extends * the datamanager responsible for it */ public GFEResource(GFEResourceData resourceData, LoadProperties loadProps, - Parm parm, - DataManager dataManager) { + Parm parm, DataManager dataManager) { super(resourceData, loadProps); this.resourceData.addChangeListener(this); this.parm = parm; @@ -1580,12 +1580,12 @@ public class GFEResource extends .getISCParm(this.parm); if (iscParm != null) { if (message.show()) { - // iscParm.getListeners().addParmInventoryChangedListener( - // this.parmInventoryChanged); + iscParm.getListeners().addParmInventoryChangedListener( + this.parmInventoryChanged); iscParm.getListeners().addGridChangedListener(this.gridChanged); } else { - // iscParm.getListeners().removeParmInventoryChangedListener( - // this.parmInventoryChanged); + iscParm.getListeners().removeParmInventoryChangedListener( + this.parmInventoryChanged); iscParm.getListeners().removeGridChangedListener( this.gridChanged); } diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SaveGfeGridHandler.java b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SaveGfeGridHandler.java index 8f5e07c759..f55064354d 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SaveGfeGridHandler.java +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/src/com/raytheon/edex/plugin/gfe/server/handler/SaveGfeGridHandler.java @@ -52,9 +52,11 @@ import com.raytheon.uf.common.time.util.TimeUtil; * 06/30/08 #875 bphillip Initial Creation * 01/29/09 #1271 njensen Rewrote for thrift capabilities * 06/24/09 njensen Added sending notifications - * 09/22/09 3058 rjpeter Converted to IRequestHandler - * 02/12/2013 #1597 randerso Added logging to support GFE Performance investigation - * 06/13/13 2044 randerso Refactored to use IFPServer + * 09/22/09 #3058 rjpeter Converted to IRequestHandler + * 02/12/2013 #1597 randerso Added logging to support GFE Performance investigation + * 06/13/13 #2044 randerso Refactored to use IFPServer + * 04/03/2014 #2737 randerso Changed to send ISC even when no grids are saved + * (i.e. on grid deletes) * * * @author bphillip @@ -72,13 +74,10 @@ public class SaveGfeGridHandler extends BaseGfeRequestHandler implements public ServerResponse handleRequest(SaveGfeGridRequest request) throws Exception { ServerResponse sr = null; - List saveRequest = request.getSaveRequest(); + List saveRequest = request.getSaveRequests(); WsId workstationID = request.getWorkstationID(); String siteID = request.getSiteID(); - boolean clientSendStatus = false; - if (!saveRequest.isEmpty()) { - clientSendStatus = saveRequest.get(0).isClientSendStatus(); - } + boolean clientSendStatus = request.isClientSendStatus(); try { ITimer timer = TimeUtil.getTimer(); @@ -102,11 +101,10 @@ public class SaveGfeGridHandler extends BaseGfeRequestHandler implements saveRequest.size()); for (SaveGridRequest save : saveRequest) { DatabaseID dbid = save.getParmId().getDbId(); + // ensure Fcst database if (dbid.getModelName().equals("Fcst") - && dbid.getDbType().isEmpty() - && !save.getGridSlices().isEmpty() - && save.isClientSendStatus()) { + && dbid.getDbType().isEmpty()) { IscSendRecord sendReq = new IscSendRecord( save.getParmId(), save.getReplacementTimeRange(), "", diff --git a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py index 0a647dd556..5fde0f3241 100644 --- a/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py +++ b/edexOsgi/com.raytheon.edex.plugin.gfe/utility/edex_static/base/gfe/isc/iscMosaic.py @@ -86,6 +86,7 @@ from com.raytheon.uf.edex.database.cluster import ClusterTask # Changed WECache to limit the number of cached grids kept in memory # 01/09/14 16952 randerso Fix regression made in #2517 which caused errors with overlapping grids # 02/04/14 17042 ryu Check in changes for randerso. +# 04/03/2014 2737 randerso Allow iscMosaic to blankOtherPeriods even when no grids received # BATCH_DELAY = 0.0 @@ -677,7 +678,7 @@ class IscMosaic: inTimes = self.__getIncomingValidTimes(vars[0]) logger.info("Processing %s #Grids=%d Site=%s", parmName, len(inTimes), self.__siteID) - if self.__eraseFirst or len(inTimes) > 0: + if self.__blankOtherPeriods or self.__eraseFirst or len(inTimes) > 0: while retryAttempt != retries: logger.debug("iscMosaic: Attempting to acquire cluster lock for: %s", parmName) startTime = time.time() diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/request/SaveGfeGridRequest.java b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/request/SaveGfeGridRequest.java index c4724fd462..042213c59d 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/request/SaveGfeGridRequest.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/request/SaveGfeGridRequest.java @@ -35,34 +35,75 @@ import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; * Date Ticket# Engineer Description * ------------ ---------- ----------- -------------------------- * Sep 22, 2009 3058 rjpeter Initial creation + * Apr 03, 2014 2737 randerso Moved clientSendStatus from SaveGridRequest + * Added proper constructor * * * * @author rjpeter * @version 1.0 */ - @DynamicSerialize public class SaveGfeGridRequest extends AbstractGfeRequest { - @DynamicSerializeElement - private List saveRequest = new ArrayList(); + /** + * Denotes whether to send ISC grids on save based on the client's + * preferences + */ - public void addRequest(SaveGridRequest req) { - saveRequest.add(req); + @DynamicSerializeElement + private boolean clientSendStatus = true; + + @DynamicSerializeElement + private List saveRequests = new ArrayList(); + + /** + * Default constructor for serialization + */ + public SaveGfeGridRequest() { + + } + + /** + * Constructor + * + * @param clientSendStatus + * true if ISC grids should be sent + * @param saveRequests + * the save requests + */ + public SaveGfeGridRequest(boolean clientSendStatus, + List saveRequests) { + this.clientSendStatus = clientSendStatus; + this.saveRequests = saveRequests; + } + + /** + * @return the clientSendStatus + */ + public boolean isClientSendStatus() { + return clientSendStatus; + } + + /** + * @param clientSendStatus + * the clientSendStatus to set + */ + public void setClientSendStatus(boolean clientSendStatus) { + this.clientSendStatus = clientSendStatus; } /** * @return the saveRequest */ - public List getSaveRequest() { - return saveRequest; + public List getSaveRequests() { + return saveRequests; } /** * @param saveRequest * the saveRequest to set */ - public void setSaveRequest(List saveRequest) { - this.saveRequest = saveRequest; + public void setSaveRequests(List saveRequests) { + this.saveRequests = saveRequests; } } diff --git a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/server/request/SaveGridRequest.java b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/server/request/SaveGridRequest.java index 7321621a2e..8d5ce11edf 100644 --- a/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/server/request/SaveGridRequest.java +++ b/edexOsgi/com.raytheon.uf.common.dataplugin.gfe/src/com/raytheon/uf/common/dataplugin/gfe/server/request/SaveGridRequest.java @@ -25,7 +25,6 @@ import java.util.List; import com.raytheon.uf.common.dataplugin.gfe.db.objects.GFERecord; import com.raytheon.uf.common.dataplugin.gfe.db.objects.ParmID; -import com.raytheon.uf.common.serialization.ISerializableObject; import com.raytheon.uf.common.serialization.annotations.DynamicSerialize; import com.raytheon.uf.common.serialization.annotations.DynamicSerializeElement; import com.raytheon.uf.common.time.TimeRange; @@ -39,6 +38,7 @@ import com.raytheon.uf.common.time.TimeRange; * ------------ ---------- ----------- -------------------------- * 04/08/08 #875 bphillip Initial Creation * 06/17/08 #940 bphillip Implemented GFE Locking + * 04/03/2014 #2737 randerso Moved clientSendStatus from SaveGridRequest * * * @@ -47,7 +47,7 @@ import com.raytheon.uf.common.time.TimeRange; */ @DynamicSerialize -public class SaveGridRequest implements ISerializableObject { +public class SaveGridRequest { /** The grid slices */ @@ -64,14 +64,6 @@ public class SaveGridRequest implements ISerializableObject { @DynamicSerializeElement private TimeRange replacementTimeRange; - /** - * Denotes whether to send ISC grids on save based on the client's - * preferences - */ - - @DynamicSerializeElement - private boolean clientSendStatus = true; - /** * Creates a new VerifyGridRequest */ @@ -86,12 +78,6 @@ public class SaveGridRequest implements ISerializableObject { this.gridSlices = gridSlices; } - public SaveGridRequest(ParmID parmId, TimeRange replacementTimeRange, - List gridSlices, boolean clientSendStatus) { - this(parmId, replacementTimeRange, gridSlices); - this.clientSendStatus = clientSendStatus; - } - public ParmID getParmId() { return parmId; } @@ -127,20 +113,4 @@ public class SaveGridRequest implements ISerializableObject { public void addRecord(GFERecord rec) { this.gridSlices.add(rec); } - - /** - * @return the clientSendStatus - */ - public boolean isClientSendStatus() { - return clientSendStatus; - } - - /** - * @param clientSendStatus - * the clientSendStatus to set - */ - public void setClientSendStatus(boolean clientSendStatus) { - this.clientSendStatus = clientSendStatus; - } - }