Class CcsdsTmIndex

java.lang.Object
com.google.common.util.concurrent.AbstractService
org.yamcs.AbstractYamcsService
org.yamcs.archive.CcsdsTmIndex
All Implemented Interfaces:
com.google.common.util.concurrent.Service, TmIndexService, YamcsService, StreamSubscriber

public class CcsdsTmIndex extends AbstractYamcsService implements TmIndexService
Completeness index of CCSDS telemetry. The structure of the rocksdb records:
 key: tbsIndex[4 bytes], apid[2bytes], start time[8 bytes], start seq count[2 bytes]
 value: end time[8bytes], end seq count[2 bytes], num packets [4 bytes]
 
FIXME: because the sequence count wraps around, there is a bug in case packets with the same timestamp and wrapped around sequence counts are received - see testApidIndexSameTimeAndWraparound for failing test. the old TokyoCabinet based indexer didn't use the sequence count as part of the key but allowed multiple records with the same key. To replicate this in RocksDB, one would need to have the RocksDB entries composed of all records with the same startime
  • Field Details

  • Constructor Details

    • CcsdsTmIndex

      public CcsdsTmIndex()
  • Method Details

    • init

      public void init(String yamcsInstance, String serviceName, YConfiguration args) throws InitException
      Description copied from interface: YamcsService
      Initialize this service. This is called before the service is started. All operations should finish fast.
      Specified by:
      init in interface YamcsService
      Overrides:
      init in class AbstractYamcsService
      Parameters:
      yamcsInstance - The yamcs instance, or null if this is a global service.
      serviceName - The service name.
      args - The configured arguments for this service. If YamcsService.getSpec() is implemented then this contains the arguments after being validated (including any defaults).
      Throws:
      InitException - When something goes wrong during the execution of this method.
    • doStart

      protected void doStart()
      Specified by:
      doStart in class com.google.common.util.concurrent.AbstractService
    • doStop

      protected void doStop()
      Specified by:
      doStop in class com.google.common.util.concurrent.AbstractService
    • onTuple

      public void onTuple(Stream stream, Tuple tuple)
      Specified by:
      onTuple in interface StreamSubscriber
    • getTime

      protected long getTime(Tuple tuple)
      Get the generation time for use in the index key.

      The default implementations returns the value of the gentime column from the tuple (set by the data link preprocessor).

    • deleteRecords

      public void deleteRecords(long start, long stop)
      Specified by:
      deleteRecords in interface TmIndexService
    • printApidDb

      public void printApidDb() throws org.rocksdb.RocksDBException
      Throws:
      org.rocksdb.RocksDBException
    • printApidDb

      public void printApidDb(short apid, long start, long stop) throws org.rocksdb.RocksDBException
      Throws:
      org.rocksdb.RocksDBException
    • getApids

      public List<Short> getApids() throws org.rocksdb.RocksDBException
      Throws:
      org.rocksdb.RocksDBException
    • getIterator

      public IndexIterator getIterator(List<Yamcs.NamedObjectId> names, long start, long stop)
      Description copied from interface: TmIndexService
      return an iterator that provides all the index entries between start and stop
      Specified by:
      getIterator in interface TmIndexService
      Parameters:
      names - can be used to filter which entries are returned. If null, everything is returned.
      Returns:
    • streamClosed

      public void streamClosed(Stream stream)
      Specified by:
      streamClosed in interface StreamSubscriber
    • rebuild

      public CompletableFuture<Void> rebuild(TimeInterval interval) throws YarchException
      Throws:
      YarchException
    • getWhereCondition

      public static String getWhereCondition(String timeColumnName, TimeInterval interval)