Class PBOverHTTPStoragePlugin
java.lang.Object
edu.stanford.slac.archiverappliance.PBOverHTTP.PBOverHTTPStoragePlugin
- All Implemented Interfaces:
Reader,StoragePlugin,Writer
A read-only storage plugin that gets data using the PB/http protocol from a server.
- Author:
- mshankar
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionintappendData(BasicContext context, String pvName, EventStream stream) voidconvert(BasicContext context, String pvName, ConversionFunction conversionFuntion) Sometimes, PVs change types, EGUs etc.getDataForMultiPVs(BasicContext context, List<String> pvNames, Instant startTime, Instant endTime, PostProcessor postProcessor) getDataForPV(BasicContext context, String pvName, Instant startTime, Instant endTime, PostProcessor postProcessor) Get a string description of this plugin; one that can potentially be used in log messages and provide context.getFirstKnownEvent(BasicContext context, String pvName) Get the first event for this PV.getLastKnownEvent(BasicContext context, String pvName) Gets the last known event in this destination.getName()Multiple PVs will probably use the same storage area and we identify the area using the name.voidinitialize(String configURL, ConfigService configService) Each storage plugin is registered to a URI scheme; for example, the PlainStoragePBPlugin uses pb:// as the scheme.Provide the prefix for storage plugin urls.voidrenamePV(BasicContext context, String oldName, String newName) Change the name of a PV.voidsetAccessURL(String aURL) void
-
Field Details
-
PBHTTP_PLUGIN_IDENTIFIER
- See Also:
-
-
Constructor Details
-
PBOverHTTPStoragePlugin
public PBOverHTTPStoragePlugin()
-
-
Method Details
-
pluginIdentifier
Description copied from interface:StoragePluginProvide the prefix for storage plugin urls.- Specified by:
pluginIdentifierin interfaceStoragePlugin- Returns:
- String of the Storage Plugin Identifier
-
getDataForPV
public List<Callable<EventStream>> getDataForPV(BasicContext context, String pvName, Instant startTime, Instant endTime, PostProcessor postProcessor) throws IOException - Specified by:
getDataForPVin interfaceReader- Throws:
IOException
-
getDataForMultiPVs
public List<Callable<EventStream>> getDataForMultiPVs(BasicContext context, List<String> pvNames, Instant startTime, Instant endTime, PostProcessor postProcessor) throws IOException - Throws:
IOException
-
appendData
- Specified by:
appendDatain interfaceWriter
-
getDescription
Description copied from interface:StoragePluginGet a string description of this plugin; one that can potentially be used in log messages and provide context.- Specified by:
getDescriptionin interfaceStoragePlugin- Returns:
- description
-
initialize
Description copied from interface:StoragePluginEach storage plugin is registered to a URI scheme; for example, the PlainStoragePBPlugin uses pb:// as the scheme. Configuration for a storage plugin typically comes in as a URL like URI.- The config service identifies the storage plugin using the scheme ("pb" maps to PlainStoragePBPlugin)
- Creates an instance using the default constructor.
- Calls initialize with the complete URL.
- Specified by:
initializein interfaceStoragePlugin- Parameters:
configURL- The complete URLconfigService-- Throws:
IOException-- See Also:
-
getAccessURL
-
setAccessURL
-
setDesc
-
getLastKnownEvent
Description copied from interface:WriterGets the last known event in this destination. Future events will be appended to this destination only if their timestamp is more recent than the timestamp of this event. If there is no last known event, then a null is returned.- Specified by:
getLastKnownEventin interfaceWriter- Parameters:
context-pvName- The PV name- Returns:
- Event The last known event of pvName
- Throws:
IOException-
-
getFirstKnownEvent
Description copied from interface:ReaderGet the first event for this PV. This call is used to optimize away calls to other readers that have older data.- Specified by:
getFirstKnownEventin interfaceReader- Parameters:
context-pvName- The PV name- Returns:
- Event The first event of pvName
- Throws:
IOException-
-
getName
Description copied from interface:StoragePluginMultiple PVs will probably use the same storage area and we identify the area using the name. This is principally used in capacity planning/load balancing to identify the storage area for the PV. We should make sure that storage's with similar lifetimes have the same name in all the appliances. The name is also used to identify the storage in the storage report. For example, the PlainStoragePlugin takes a name parameter and we should use something like STS as the identity for the short term store in all the appliances.- Specified by:
getNamein interfaceStoragePlugin- Returns:
- name
-
renamePV
Description copied from interface:StoragePluginChange the name of a PV. This happens occasionally in the EPICS world when people change the names of PVs but want to retain the data. This method is used to change the name of the PV in any of the datasets for PVoldName. For example, in PB files, the name of the PV is encoded in the file names and is also stored in the header. In this case, we expect the plugin to move the data to new files names and change the PV name in the file header. To avoid getting into issues about data changing when renaming files, the PV can be assumed to be in a paused state.- Specified by:
renamePVin interfaceStoragePlugin- Parameters:
context-oldName- The old PV namenewName- The new PV name- Throws:
IOException-
-
convert
public void convert(BasicContext context, String pvName, ConversionFunction conversionFuntion) throws IOException Description copied from interface:StoragePluginSometimes, PVs change types, EGUs etc. In these cases, we are left with the problem of what to do with the already archived data. We can rename the PV to a new but related name - this keeps the existing data as is. Or, we can attempt to convert to the new type, EGU etc. This method can be used to convert the existing data using the supplied conversion function. Conversions should be all or nothing; that is, first convert all the streams into temporary chunks and then do a bulk rename once all the conversions have succeeded. Note that we'll also be using the same conversion mechanism for imports and other functions that change data. So, when/if implementing the conversion function, make sure we respect the typical expectations within the archiver - monotonically increasing timestamps and so on. To avoid getting into issues about data changing when converting, the PV can be assumed to be in a paused state.- Specified by:
convertin interfaceStoragePlugin- Parameters:
context-pvName- The PV nameconversionFuntion-- Throws:
IOException-
-