forked from apache/pulsar
-
Notifications
You must be signed in to change notification settings - Fork 6
/
BaseContext.java
220 lines (197 loc) · 6.68 KB
/
BaseContext.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.pulsar.functions.api;
import org.apache.pulsar.client.api.ClientBuilder;
import org.apache.pulsar.client.api.PulsarClient;
import org.apache.pulsar.common.classification.InterfaceAudience;
import org.apache.pulsar.common.classification.InterfaceStability;
import org.slf4j.Logger;
import java.nio.ByteBuffer;
import java.util.concurrent.CompletableFuture;
/**
* BaseContext provides base contextual information to the executing function/source/sink.
* It allows to propagate information, such as pulsar environment, logs, metrics, states etc.
*/
@InterfaceAudience.Public
@InterfaceStability.Stable
public interface BaseContext {
/**
* The tenant this component belongs to.
*
* @return the tenant this component belongs to
*/
String getTenant();
/**
* The namespace this component belongs to.
*
* @return the namespace this component belongs to
*/
String getNamespace();
/**
* The id of the instance that invokes this component.
*
* @return the instance id
*/
int getInstanceId();
/**
* Get the number of instances that invoke this component.
*
* @return the number of instances that invoke this component.
*/
int getNumInstances();
/**
* The logger object that can be used to log in a component.
*
* @return the logger object
*/
Logger getLogger();
/**
* Get the secret associated with this key.
*
* @param secretName The name of the secret
* @return The secret if anything was found or null
*/
String getSecret(String secretName);
/**
* Get the state store with the provided store name in the tenant & namespace.
*
* @param name the state store name
* @param <S> the type of interface of the store to return
* @return the state store instance.
*
* @throws ClassCastException if the return type isn't a type
* or interface of the actual returned store.
*/
default <S extends StateStore> S getStateStore(String name) {
throw new UnsupportedOperationException("Component cannot get state store");
}
/**
* Get the state store with the provided store name.
*
* @param tenant the state tenant name
* @param ns the state namespace name
* @param name the state store name
* @param <S> the type of interface of the store to return
* @return the state store instance.
*
* @throws ClassCastException if the return type isn't a type
* or interface of the actual returned store.
*/
default <S extends StateStore> S getStateStore(String tenant, String ns, String name) {
throw new UnsupportedOperationException("Component cannot get state store");
}
/**
* Update the state value for the key.
*
* @param key name of the key
* @param value state value of the key
*/
void putState(String key, ByteBuffer value);
/**
* Update the state value for the key, but don't wait for the operation to be completed
*
* @param key name of the key
* @param value state value of the key
*/
CompletableFuture<Void> putStateAsync(String key, ByteBuffer value);
/**
* Retrieve the state value for the key.
*
* @param key name of the key
* @return the state value for the key.
*/
ByteBuffer getState(String key);
/**
* Retrieve the state value for the key, but don't wait for the operation to be completed
*
* @param key name of the key
* @return the state value for the key.
*/
CompletableFuture<ByteBuffer> getStateAsync(String key);
/**
* Delete the state value for the key.
*
* @param key name of the key
*/
void deleteState(String key);
/**
* Delete the state value for the key, but don't wait for the operation to be completed
*
* @param key name of the key
*/
CompletableFuture<Void> deleteStateAsync(String key);
/**
* Increment the builtin distributed counter referred by key.
*
* @param key The name of the key
* @param amount The amount to be incremented
*/
void incrCounter(String key, long amount);
/**
* Increment the builtin distributed counter referred by key
* but dont wait for the completion of the increment operation
*
* @param key The name of the key
* @param amount The amount to be incremented
*/
CompletableFuture<Void> incrCounterAsync(String key, long amount);
/**
* Retrieve the counter value for the key.
*
* @param key name of the key
* @return the amount of the counter value for this key
*/
long getCounter(String key);
/**
* Retrieve the counter value for the key, but don't wait
* for the operation to be completed
*
* @param key name of the key
* @return the amount of the counter value for this key
*/
CompletableFuture<Long> getCounterAsync(String key);
/**
* Record a user defined metric
* @param metricName The name of the metric
* @param value The value of the metric
*/
void recordMetric(String metricName, double value);
/**
* Get the pre-configured pulsar client.
*
* You can use this client to access Pulsar cluster.
* The Function will be responsible for disposing this client.
*
* @return the instance of pulsar client
*/
default PulsarClient getPulsarClient() {
throw new UnsupportedOperationException("not implemented");
}
/**
* Get the pre-configured pulsar client builder.
*
* You can use this Builder to setup client to connect to the Pulsar cluster.
* But you need to close client properly after using it.
*
* @return the instance of pulsar client builder.
*/
default ClientBuilder getPulsarClientBuilder() {
throw new UnsupportedOperationException("not implemented");
}
}