github.com/m3db/m3@v1.5.0/src/dbnode/generated/thrift/rpc.thrift (about)

     1  // Copyright (c) 2018 Uber Technologies, Inc.
     2  //
     3  // Permission is hereby granted, free of charge, to any person obtaining a copy
     4  // of this software and associated documentation files (the "Software"), to deal
     5  // in the Software without restriction, including without limitation the rights
     6  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     7  // copies of the Software, and to permit persons to whom the Software is
     8  // furnished to do so, subject to the following conditions:
     9  //
    10  // The above copyright notice and this permission notice shall be included in
    11  // all copies or substantial portions of the Software.
    12  //
    13  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    14  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    15  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    16  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    17  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    18  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    19  // THE SOFTWARE.
    20  
    21  namespace java com.github.m3db
    22  
    23  enum TimeType {
    24  	UNIX_SECONDS,
    25  	UNIX_MICROSECONDS,
    26  	UNIX_MILLISECONDS,
    27  	UNIX_NANOSECONDS
    28  }
    29  
    30  enum ErrorType {
    31  	INTERNAL_ERROR,
    32  	BAD_REQUEST
    33  }
    34  
    35  enum ErrorFlags {
    36      NONE               = 0x00,
    37      RESOURCE_EXHAUSTED = 0x01,
    38      SERVER_TIMEOUT     = 0x02
    39  }
    40  
    41  exception Error {
    42  	1: required ErrorType type = ErrorType.INTERNAL_ERROR
    43  	2: required string message
    44  	3: optional i64 flags = 0
    45  }
    46  
    47  exception WriteBatchRawErrors {
    48  	1: required list<WriteBatchRawError> errors
    49  }
    50  
    51  service Node {
    52  	// Friendly not highly performant read/write endpoints
    53  	QueryResult          query(1: QueryRequest req) throws (1: Error err)
    54  	AggregateQueryResult aggregate(1: AggregateQueryRequest req) throws (1: Error err)
    55  	FetchResult          fetch(1: FetchRequest req) throws (1: Error err)
    56  	void                 write(1: WriteRequest req) throws (1: Error err)
    57  	void                 writeTagged(1: WriteTaggedRequest req) throws (1: Error err)
    58  
    59  	// Performant read/write endpoints
    60  	AggregateQueryRawResult        aggregateRaw(1: AggregateQueryRawRequest req) throws (1: Error err)
    61  	FetchBatchRawResult            fetchBatchRaw(1: FetchBatchRawRequest req) throws (1: Error err)
    62  	FetchBatchRawResult            fetchBatchRawV2(1: FetchBatchRawV2Request req) throws (1: Error err)
    63  	FetchBlocksRawResult           fetchBlocksRaw(1: FetchBlocksRawRequest req) throws (1: Error err)
    64  	FetchTaggedResult              fetchTagged(1: FetchTaggedRequest req) throws (1: Error err)
    65  	FetchBlocksMetadataRawV2Result fetchBlocksMetadataRawV2(1: FetchBlocksMetadataRawV2Request req) throws (1: Error err)
    66  	void                           writeBatchRaw(1: WriteBatchRawRequest req) throws (1: WriteBatchRawErrors err)
    67  	void                           writeBatchRawV2(1: WriteBatchRawV2Request req) throws (1: WriteBatchRawErrors err)
    68  	void                           writeTaggedBatchRaw(1: WriteTaggedBatchRawRequest req) throws (1: WriteBatchRawErrors err)
    69  	void                           writeTaggedBatchRawV2(1: WriteTaggedBatchRawV2Request req) throws (1: WriteBatchRawErrors err)
    70  	void                           repair() throws (1: Error err)
    71  	TruncateResult                 truncate(1: TruncateRequest req) throws (1: Error err)
    72  
    73  	AggregateTilesResult aggregateTiles(1: AggregateTilesRequest req) throws (1: Error err)
    74  
    75  	// Management endpoints
    76  	NodeHealthResult                               health() throws (1: Error err)
    77  	// NB: bootstrapped is for use with cluster management tools like k8s.
    78  	NodeBootstrappedResult                         bootstrapped() throws (1: Error err)
    79  	// NB: bootstrappedInPlacementOrNoPlacement is for use with cluster management tools like k8s.
    80  	NodeBootstrappedInPlacementOrNoPlacementResult bootstrappedInPlacementOrNoPlacement() throws (1: Error err)
    81  	NodePersistRateLimitResult                     getPersistRateLimit() throws (1: Error err)
    82  	NodePersistRateLimitResult                     setPersistRateLimit(1: NodeSetPersistRateLimitRequest req) throws (1: Error err)
    83  	NodeWriteNewSeriesAsyncResult                  getWriteNewSeriesAsync() throws (1: Error err)
    84  	NodeWriteNewSeriesAsyncResult                  setWriteNewSeriesAsync(1: NodeSetWriteNewSeriesAsyncRequest req) throws (1: Error err)
    85  	NodeWriteNewSeriesBackoffDurationResult        getWriteNewSeriesBackoffDuration() throws (1: Error err)
    86  	NodeWriteNewSeriesBackoffDurationResult        setWriteNewSeriesBackoffDuration(1: NodeSetWriteNewSeriesBackoffDurationRequest req) throws (1: Error err)
    87  	NodeWriteNewSeriesLimitPerShardPerSecondResult getWriteNewSeriesLimitPerShardPerSecond() throws (1: Error err)
    88  	NodeWriteNewSeriesLimitPerShardPerSecondResult setWriteNewSeriesLimitPerShardPerSecond(1: NodeSetWriteNewSeriesLimitPerShardPerSecondRequest req) throws (1: Error err)
    89  
    90  	// Debug endpoints
    91  	DebugProfileStartResult        debugProfileStart(1: DebugProfileStartRequest req) throws (1: Error err)
    92  	DebugProfileStopResult         debugProfileStop(1: DebugProfileStopRequest req) throws (1: Error err)
    93  	DebugIndexMemorySegmentsResult debugIndexMemorySegments(1: DebugIndexMemorySegmentsRequest req) throws (1: Error err)
    94  }
    95  
    96  struct FetchRequest {
    97  	1: required i64 rangeStart
    98  	2: required i64 rangeEnd
    99  	3: required string nameSpace
   100  	4: required string id
   101  	5: optional TimeType rangeType = TimeType.UNIX_SECONDS
   102  	6: optional TimeType resultTimeType = TimeType.UNIX_SECONDS
   103  	7: optional binary source
   104  }
   105  
   106  struct FetchResult {
   107  	1: required list<Datapoint> datapoints
   108  }
   109  
   110  struct Datapoint {
   111  	1: required i64 timestamp
   112  	2: required double value
   113  	3: optional binary annotation
   114  	4: optional TimeType timestampTimeType = TimeType.UNIX_SECONDS
   115  }
   116  
   117  struct WriteRequest {
   118  	1: required string nameSpace
   119  	2: required string id
   120  	3: required Datapoint datapoint
   121  }
   122  
   123  struct WriteTaggedRequest {
   124  	1: required string nameSpace
   125  	2: required string id
   126  	3: required list<Tag> tags
   127  	4: required Datapoint datapoint
   128  }
   129  
   130  struct FetchBatchRawRequest {
   131  	1: required i64 rangeStart
   132  	2: required i64 rangeEnd
   133  	3: required binary nameSpace
   134  	4: required list<binary> ids
   135  	5: optional TimeType rangeTimeType = TimeType.UNIX_SECONDS
   136  	6: optional binary source
   137  }
   138  
   139  
   140  struct FetchBatchRawV2Request {
   141  	1: required list<binary> nameSpaces
   142  	2: required list<FetchBatchRawV2RequestElement> elements
   143  	3: optional binary source
   144  }
   145  
   146  struct FetchBatchRawV2RequestElement {
   147  	1: required i64 nameSpace
   148  	2: required i64 rangeStart
   149  	3: required i64 rangeEnd
   150  	4: required binary id
   151  	5: optional TimeType rangeTimeType = TimeType.UNIX_SECONDS
   152  }
   153  
   154  struct FetchBatchRawResult {
   155  	1: required list<FetchRawResult> elements
   156  }
   157  
   158  struct FetchRawResult {
   159  	1: required list<Segments> segments
   160  	2: optional Error err
   161  }
   162  
   163  struct Segments {
   164  	1: optional Segment merged
   165  	2: optional list<Segment> unmerged
   166  }
   167  
   168  struct Segment {
   169  	1: required binary head
   170  	2: required binary tail
   171  	3: optional i64 startTime
   172  	4: optional i64 blockSize
   173  	5: optional i64 checksum
   174  }
   175  
   176  struct FetchTaggedRequest {
   177  	1: required binary nameSpace
   178  	2: required binary query
   179  	3: required i64 rangeStart
   180  	4: required i64 rangeEnd
   181  	5: required bool fetchData
   182  	6: optional i64 seriesLimit
   183  	7: optional TimeType rangeTimeType = TimeType.UNIX_SECONDS
   184  	8: optional bool requireExhaustive = true
   185  	9: optional i64 docsLimit
   186  	10: optional binary source
   187  	11: optional bool requireNoWait = false
   188  }
   189  
   190  struct FetchTaggedResult {
   191  	1: required list<FetchTaggedIDResult> elements
   192  	2: required bool exhaustive
   193  	3: optional i64 waitedIndex
   194  	4: optional i64 waitedSeriesRead
   195  }
   196  
   197  struct FetchTaggedIDResult {
   198  	1: required binary id
   199  	2: required binary nameSpace
   200  	3: required binary encodedTags
   201  	4: optional list<Segments> segments
   202  
   203  	// Deprecated -- do not use.
   204  	5: optional Error err
   205  }
   206  
   207  struct FetchBlocksRawRequest {
   208  	1: required binary nameSpace
   209  	2: required i32 shard
   210  	3: required list<FetchBlocksRawRequestElement> elements
   211  	4: optional binary source
   212  }
   213  
   214  struct FetchBlocksRawRequestElement {
   215  	1: required binary id
   216  	2: required list<i64> starts
   217  }
   218  
   219  struct FetchBlocksRawResult {
   220  	1: required list<Blocks> elements
   221  }
   222  
   223  struct Blocks {
   224  	1: required binary id
   225  	2: required list<Block> blocks
   226  }
   227  
   228  struct Block {
   229  	1: required i64 start
   230  	2: optional Segments segments
   231  	3: optional Error err
   232  	4: optional i64 checksum
   233  }
   234  
   235  struct Tag {
   236  	1: required string name
   237  	2: required string value
   238  }
   239  
   240  struct FetchBlocksMetadataRawV2Request {
   241  	1: required binary nameSpace
   242  	2: required i32 shard
   243  	3: required i64 rangeStart
   244  	4: required i64 rangeEnd
   245  	5: required i64 limit
   246  	6: optional binary pageToken
   247  	7: optional bool includeSizes
   248  	8: optional bool includeChecksums
   249  	9: optional bool includeLastRead
   250  }
   251  
   252  struct FetchBlocksMetadataRawV2Result {
   253  	1: required list<BlockMetadataV2> elements
   254  	2: optional binary nextPageToken
   255  }
   256  
   257  struct BlockMetadataV2 {
   258  	1: required binary id
   259  	2: required i64 start
   260  	3: optional Error err
   261  	4: optional i64 size
   262  	5: optional i64 checksum
   263  	6: optional i64 lastRead
   264  	7: optional TimeType lastReadTimeType = TimeType.UNIX_SECONDS
   265  	8: optional binary encodedTags
   266  }
   267  
   268  struct WriteBatchRawRequest {
   269  	1: required binary nameSpace
   270  	2: required list<WriteBatchRawRequestElement> elements
   271  }
   272  
   273  struct WriteBatchRawV2Request {
   274  	1: required list<binary> nameSpaces
   275  	2: required list<WriteBatchRawV2RequestElement> elements
   276  }
   277  
   278  struct WriteBatchRawRequestElement {
   279  	1: required binary id
   280  	2: required Datapoint datapoint
   281  }
   282  
   283  struct WriteBatchRawV2RequestElement {
   284  	1: required binary id
   285  	2: required Datapoint datapoint
   286  	3: required i64 nameSpace
   287  }
   288  
   289  struct WriteTaggedBatchRawRequest {
   290  	1: required binary nameSpace
   291  	2: required list<WriteTaggedBatchRawRequestElement> elements
   292  }
   293  
   294  struct WriteTaggedBatchRawV2Request {
   295  	1: required list<binary> nameSpaces
   296  	2: required list<WriteTaggedBatchRawV2RequestElement> elements
   297  }
   298  
   299  struct WriteTaggedBatchRawRequestElement {
   300  	1: required binary id
   301  	2: required binary encodedTags
   302  	3: required Datapoint datapoint
   303  }
   304  
   305  struct WriteTaggedBatchRawV2RequestElement {
   306  	1: required binary id
   307  	2: required binary encodedTags
   308  	3: required Datapoint datapoint
   309  	4: required i64 nameSpace
   310  }
   311  
   312  struct WriteBatchRawError {
   313  	1: required i64 index
   314  	2: required Error err
   315  }
   316  
   317  struct TruncateRequest {
   318  	1: required binary nameSpace
   319  }
   320  
   321  struct TruncateResult {
   322  	1: required i64 numSeries
   323  }
   324  
   325  struct NodeHealthResult {
   326  	1: required bool ok
   327  	2: required string status
   328  	3: required bool bootstrapped
   329  	4: optional map<string,string> metadata
   330  }
   331  
   332  struct NodeBootstrappedResult {}
   333  
   334  struct NodeBootstrappedInPlacementOrNoPlacementResult {}
   335  
   336  struct NodePersistRateLimitResult {
   337  	1: required bool limitEnabled
   338  	2: required double limitMbps
   339  	3: required i64 limitCheckEvery
   340  }
   341  
   342  struct NodeSetPersistRateLimitRequest {
   343  	1: optional bool limitEnabled
   344  	2: optional double limitMbps
   345  	3: optional i64 limitCheckEvery
   346  }
   347  
   348  struct NodeWriteNewSeriesAsyncResult {
   349  	1: required bool writeNewSeriesAsync
   350  }
   351  
   352  struct NodeSetWriteNewSeriesAsyncRequest {
   353  	1: required bool writeNewSeriesAsync
   354  }
   355  
   356  struct NodeWriteNewSeriesBackoffDurationResult {
   357  	1: required i64 writeNewSeriesBackoffDuration
   358  	2: required TimeType durationType
   359  }
   360  
   361  struct NodeSetWriteNewSeriesBackoffDurationRequest {
   362  	1: required i64 writeNewSeriesBackoffDuration
   363  	2: optional TimeType durationType = TimeType.UNIX_MILLISECONDS
   364  }
   365  
   366  struct NodeWriteNewSeriesLimitPerShardPerSecondResult {
   367  	1: required i64 writeNewSeriesLimitPerShardPerSecond
   368  }
   369  
   370  struct NodeSetWriteNewSeriesLimitPerShardPerSecondRequest {
   371  	1: required i64 writeNewSeriesLimitPerShardPerSecond
   372  }
   373  
   374  service Cluster {
   375  	HealthResult health() throws (1: Error err)
   376  	void write(1: WriteRequest req) throws (1: Error err)
   377  	void writeTagged(1: WriteTaggedRequest req) throws (1: Error err)
   378  	QueryResult query(1: QueryRequest req) throws (1: Error err)
   379  	AggregateQueryResult aggregate(1: AggregateQueryRequest req) throws (1: Error err)
   380  	FetchResult fetch(1: FetchRequest req) throws (1: Error err)
   381  	TruncateResult truncate(1: TruncateRequest req) throws (1: Error err)
   382  }
   383  
   384  struct HealthResult {
   385  	1: required bool ok
   386  	2: required string status
   387  }
   388  
   389  enum AggregateQueryType {
   390  	AGGREGATE_BY_TAG_NAME,
   391  	AGGREGATE_BY_TAG_NAME_VALUE,
   392  }
   393  
   394  // AggregateQueryRawRequest comes from our desire to aggregate on incoming data.
   395  // We currently only support retrieval of facets, but could extend this based on
   396  // requirements in the future. Currently, the predominant use-cases are:
   397  // (1) Given a filter query (optionally), return all known tag keys matching this restriction
   398  // (2) Given a filter query (optionally), return all know tag key+values matching this restriction
   399  // (3) For (1), (2) - filter results to a given set of keys
   400  struct AggregateQueryRawRequest {
   401  	1: required binary query
   402  	2: required i64 rangeStart
   403  	3: required i64 rangeEnd
   404  	4: required binary nameSpace
   405  	5: optional i64 seriesLimit
   406  	6: optional list<binary> tagNameFilter
   407  	7: optional AggregateQueryType aggregateQueryType = AggregateQueryType.AGGREGATE_BY_TAG_NAME_VALUE
   408  	8: optional TimeType rangeType = TimeType.UNIX_SECONDS
   409  	9: optional binary source
   410  	10: optional i64 docsLimit
   411  	11: optional bool requireExhaustive
   412  	12: optional bool requireNoWait
   413  }
   414  
   415  struct AggregateQueryRawResult {
   416  	1: required list<AggregateQueryRawResultTagNameElement> results
   417  	2: required bool exhaustive
   418  	3: optional i64 waitedIndex
   419  }
   420  
   421  struct AggregateQueryRawResultTagNameElement {
   422  	1: required binary tagName
   423  	2: optional list<AggregateQueryRawResultTagValueElement> tagValues
   424  }
   425  
   426  struct AggregateQueryRawResultTagValueElement {
   427  	1: required binary tagValue
   428  }
   429  
   430  // AggregateQueryRequest is identical to AggregateQueryRawRequest save for using string instead of binary for types.
   431  struct AggregateQueryRequest {
   432  	1: optional Query query
   433  	2: required i64 rangeStart
   434  	3: required i64 rangeEnd
   435  	4: required string nameSpace
   436  	5: optional i64 seriesLimit
   437  	6: optional list<string> tagNameFilter
   438  	7: optional AggregateQueryType aggregateQueryType = AggregateQueryType.AGGREGATE_BY_TAG_NAME_VALUE
   439  	8: optional TimeType rangeType = TimeType.UNIX_SECONDS
   440  	9: optional binary source
   441  	10: optional i64 docsLimit
   442  	11: optional bool requireExhaustive
   443  	12: optional bool requireNoWait
   444  }
   445  
   446  struct AggregateQueryResult {
   447  	1: required list<AggregateQueryResultTagNameElement> results
   448  	2: required bool exhaustive
   449  }
   450  
   451  struct AggregateQueryResultTagNameElement {
   452  	1: required string tagName
   453  	2: optional list<AggregateQueryResultTagValueElement> tagValues
   454  }
   455  
   456  struct AggregateQueryResultTagValueElement {
   457  	1: required string tagValue
   458  }
   459  
   460  // Query wrapper types for simple non-optimized query use
   461  struct QueryRequest {
   462  	1: required Query query
   463  	2: required i64 rangeStart
   464  	3: required i64 rangeEnd
   465  	4: required string nameSpace
   466  	5: optional i64 limit
   467  	6: optional bool noData
   468  	7: optional TimeType rangeType = TimeType.UNIX_SECONDS
   469  	8: optional TimeType resultTimeType = TimeType.UNIX_SECONDS
   470  	9: optional binary source
   471  	// Additional options for the Cluster service.
   472  	10: optional ClusterQueryOptions clusterOptions
   473  }
   474  
   475  // ClusterQueryOptions are additional options for a QueryRequest to the Cluster service.
   476  struct ClusterQueryOptions {
   477          // The read consistency level to use for the query.
   478          1: optional ReadConsistency readConsistency
   479          // The strategy to resolve conflicts for different values for the same timestamp.
   480          2: optional EqualTimestampStrategy conflictResolutionStrategy
   481  }
   482  
   483  // Enumeration of read consistency values. Matches ReadConsistencyLevel type in golang.
   484  enum ReadConsistency {
   485  	ONE,
   486  	UNSTRICT_MAJORITY,
   487  	MAJORITY,
   488  	UNSTRICT_ALL,
   489  	ALL
   490  }
   491  
   492  // Enumeration of strategies to resolve read conflicts for equal timestamps. Matches IterateEqualTimestampStrategy in
   493  // golang.
   494  enum EqualTimestampStrategy {
   495          LAST_PUSHED,
   496          HIGHEST_VALUE,
   497          LOWEST_VALUE,
   498          HIGHEST_FREQUENCY,
   499  }
   500  
   501  struct QueryResult {
   502  	1: required list<QueryResultElement> results
   503  	2: required bool exhaustive
   504  }
   505  
   506  struct QueryResultElement {
   507  	1: required string id
   508  	2: required list<Tag> tags
   509  	3: required list<Datapoint> datapoints
   510  }
   511  
   512  struct TermQuery {
   513  	1: required string field
   514  	2: required string term
   515  }
   516  
   517  struct RegexpQuery {
   518  	1: required string field
   519  	2: required string regexp
   520  }
   521  
   522  struct NegationQuery {
   523  	1: required Query query
   524  }
   525  
   526  struct ConjunctionQuery {
   527  	1: required list<Query> queries
   528  }
   529  
   530  struct DisjunctionQuery {
   531  	1: required list<Query> queries
   532  }
   533  
   534  struct AllQuery {}
   535  
   536  struct FieldQuery {
   537  	1: required string field
   538  }
   539  
   540  struct Query {
   541  	1: optional TermQuery        term
   542  	2: optional RegexpQuery      regexp
   543  	3: optional NegationQuery    negation
   544  	4: optional ConjunctionQuery conjunction
   545  	5: optional DisjunctionQuery disjunction
   546  	6: optional AllQuery         all
   547  	7: optional FieldQuery       field
   548  }
   549  
   550  struct AggregateTilesRequest {
   551  	1: required string sourceNamespace
   552  	2: required string targetNamespace
   553  	3: required i64 rangeStart
   554  	4: required i64 rangeEnd
   555  	5: required string step
   556  	6: optional TimeType rangeType = TimeType.UNIX_SECONDS
   557  }
   558  
   559  struct AggregateTilesResult {
   560  	1: required i64 processedTileCount
   561  }
   562  
   563  struct DebugProfileStartRequest {
   564  	1: required string name
   565  	2: required string filePathTemplate
   566  	3: optional string interval
   567  	4: optional string duration
   568  	5: optional i64 debug
   569  	6: optional i64 conditionalNumGoroutinesGreaterThan
   570  	7: optional i64 conditionalNumGoroutinesLessThan
   571  	8: optional bool conditionalIsOverloaded
   572  }
   573  
   574  struct DebugProfileStartResult {
   575  }
   576  
   577  struct DebugProfileStopRequest {
   578  	1: required string name
   579  }
   580  
   581  struct DebugProfileStopResult {
   582  }
   583  
   584  struct DebugIndexMemorySegmentsRequest {
   585  	1: required string directory
   586  }
   587  
   588  struct DebugIndexMemorySegmentsResult {
   589  }