use of org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData in project incubator-skywalking by apache.
the class RemoteServiceHandlerTestCase method callTest.
@Test
public void callTest() throws DuplicateProviderException, ProviderNotFoundException, IOException {
final String testWorkerId = "mock-worker";
ModuleManagerTesting moduleManager = new ModuleManagerTesting();
ModuleDefineTesting moduleDefine = new ModuleDefineTesting();
moduleManager.put(CoreModule.NAME, moduleDefine);
WorkerInstancesService workerInstancesService = new WorkerInstancesService();
moduleDefine.provider().registerServiceImplementation(IWorkerInstanceGetter.class, workerInstancesService);
moduleDefine.provider().registerServiceImplementation(IWorkerInstanceSetter.class, workerInstancesService);
TestWorker worker = new TestWorker(moduleManager);
workerInstancesService.put(testWorkerId, worker, TestRemoteData.class);
String serverName = InProcessServerBuilder.generateName();
MetricsCreator metricsCreator = mock(MetricsCreator.class);
when(metricsCreator.createCounter(any(), any(), any(), any())).thenReturn(new CounterMetrics() {
@Override
public void inc() {
}
@Override
public void inc(double value) {
}
});
when(metricsCreator.createHistogramMetric(any(), any(), any(), any())).thenReturn(new HistogramMetrics() {
@Override
public Timer createTimer() {
return super.createTimer();
}
@Override
public void observe(double value) {
}
});
ModuleDefineTesting telemetryModuleDefine = new ModuleDefineTesting();
moduleManager.put(TelemetryModule.NAME, telemetryModuleDefine);
telemetryModuleDefine.provider().registerServiceImplementation(MetricsCreator.class, metricsCreator);
gRPCCleanup.register(InProcessServerBuilder.forName(serverName).directExecutor().addService(new RemoteServiceHandler(moduleManager)).build().start());
RemoteServiceGrpc.RemoteServiceStub remoteServiceStub = RemoteServiceGrpc.newStub(gRPCCleanup.register(InProcessChannelBuilder.forName(serverName).directExecutor().build()));
StreamObserver<RemoteMessage> streamObserver = remoteServiceStub.call(new StreamObserver<Empty>() {
@Override
public void onNext(Empty empty) {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onCompleted() {
}
});
RemoteMessage.Builder remoteMessage = RemoteMessage.newBuilder();
remoteMessage.setNextWorkerName(testWorkerId);
RemoteData.Builder remoteData = RemoteData.newBuilder();
remoteData.addDataStrings("test1");
remoteData.addDataStrings("test2");
remoteData.addDataLongs(10);
remoteData.addDataLongs(20);
remoteMessage.setRemoteData(remoteData);
streamObserver.onNext(remoteMessage.build());
streamObserver.onCompleted();
}
use of org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData in project incubator-skywalking by apache.
the class RemoteServiceHandler method call.
/**
* gRPC handler of {@link RemoteServiceGrpc}. Continue the distributed aggregation at the current OAP node.
*/
@Override
public StreamObserver<RemoteMessage> call(StreamObserver<Empty> responseObserver) {
if (Objects.isNull(workerInstanceGetter)) {
synchronized (RemoteServiceHandler.class) {
if (Objects.isNull(workerInstanceGetter)) {
workerInstanceGetter = moduleDefineHolder.find(CoreModule.NAME).provider().getService(IWorkerInstanceGetter.class);
}
}
}
return new StreamObserver<RemoteMessage>() {
@Override
public void onNext(RemoteMessage message) {
remoteInCounter.inc();
HistogramMetrics.Timer timer = remoteInHistogram.createTimer();
try {
String nextWorkerName = message.getNextWorkerName();
RemoteData remoteData = message.getRemoteData();
try {
RemoteHandleWorker handleWorker = workerInstanceGetter.get(nextWorkerName);
if (handleWorker != null) {
AbstractWorker nextWorker = handleWorker.getWorker();
StreamData streamData = handleWorker.getStreamDataClass().newInstance();
streamData.deserialize(remoteData);
nextWorker.in(streamData);
} else {
remoteInTargetNotFoundCounter.inc();
LOGGER.warn("Work name [{}] not found. Check OAL script, make sure they are same in the whole cluster.", nextWorkerName);
}
} catch (Throwable t) {
remoteInErrorCounter.inc();
LOGGER.error(t.getMessage(), t);
}
} finally {
timer.finish();
}
}
@Override
public void onError(Throwable throwable) {
LOGGER.error(throwable.getMessage(), throwable);
}
@Override
public void onCompleted() {
responseObserver.onNext(Empty.newBuilder().build());
responseObserver.onCompleted();
}
};
}
use of org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData in project skywalking by apache.
the class RemoteServiceHandler method call.
/**
* gRPC handler of {@link RemoteServiceGrpc}. Continue the distributed aggregation at the current OAP node.
*/
@Override
public StreamObserver<RemoteMessage> call(StreamObserver<Empty> responseObserver) {
if (Objects.isNull(workerInstanceGetter)) {
synchronized (RemoteServiceHandler.class) {
if (Objects.isNull(workerInstanceGetter)) {
workerInstanceGetter = moduleDefineHolder.find(CoreModule.NAME).provider().getService(IWorkerInstanceGetter.class);
}
}
}
return new StreamObserver<RemoteMessage>() {
@Override
public void onNext(RemoteMessage message) {
remoteInCounter.inc();
HistogramMetrics.Timer timer = remoteInHistogram.createTimer();
try {
String nextWorkerName = message.getNextWorkerName();
RemoteData remoteData = message.getRemoteData();
try {
RemoteHandleWorker handleWorker = workerInstanceGetter.get(nextWorkerName);
if (handleWorker != null) {
AbstractWorker nextWorker = handleWorker.getWorker();
StreamData streamData = handleWorker.getStreamDataClass().newInstance();
streamData.deserialize(remoteData);
nextWorker.in(streamData);
} else {
remoteInTargetNotFoundCounter.inc();
LOGGER.warn("Work name [{}] not found. Check OAL script, make sure they are same in the whole cluster.", nextWorkerName);
}
} catch (Throwable t) {
remoteInErrorCounter.inc();
LOGGER.error(t.getMessage(), t);
}
} finally {
timer.finish();
}
}
@Override
public void onError(Throwable throwable) {
LOGGER.error(throwable.getMessage(), throwable);
}
@Override
public void onCompleted() {
responseObserver.onNext(Empty.newBuilder().build());
responseObserver.onCompleted();
}
};
}
use of org.apache.skywalking.oap.server.core.remote.grpc.proto.RemoteData in project skywalking by apache.
the class RemoteServiceHandlerTestCase method callTest.
@Test
public void callTest() throws DuplicateProviderException, ProviderNotFoundException, IOException {
final String testWorkerId = "mock-worker";
ModuleManagerTesting moduleManager = new ModuleManagerTesting();
ModuleDefineTesting moduleDefine = new ModuleDefineTesting();
moduleManager.put(CoreModule.NAME, moduleDefine);
WorkerInstancesService workerInstancesService = new WorkerInstancesService();
moduleDefine.provider().registerServiceImplementation(IWorkerInstanceGetter.class, workerInstancesService);
moduleDefine.provider().registerServiceImplementation(IWorkerInstanceSetter.class, workerInstancesService);
TestWorker worker = new TestWorker(moduleManager);
workerInstancesService.put(testWorkerId, worker, TestRemoteData.class);
String serverName = InProcessServerBuilder.generateName();
MetricsCreator metricsCreator = mock(MetricsCreator.class);
when(metricsCreator.createCounter(any(), any(), any(), any())).thenReturn(new CounterMetrics() {
@Override
public void inc() {
}
@Override
public void inc(double value) {
}
});
when(metricsCreator.createHistogramMetric(any(), any(), any(), any())).thenReturn(new HistogramMetrics() {
@Override
public Timer createTimer() {
return super.createTimer();
}
@Override
public void observe(double value) {
}
});
ModuleDefineTesting telemetryModuleDefine = new ModuleDefineTesting();
moduleManager.put(TelemetryModule.NAME, telemetryModuleDefine);
telemetryModuleDefine.provider().registerServiceImplementation(MetricsCreator.class, metricsCreator);
gRPCCleanup.register(InProcessServerBuilder.forName(serverName).directExecutor().addService(new RemoteServiceHandler(moduleManager)).build().start());
RemoteServiceGrpc.RemoteServiceStub remoteServiceStub = RemoteServiceGrpc.newStub(gRPCCleanup.register(InProcessChannelBuilder.forName(serverName).directExecutor().build()));
StreamObserver<RemoteMessage> streamObserver = remoteServiceStub.call(new StreamObserver<Empty>() {
@Override
public void onNext(Empty empty) {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onCompleted() {
}
});
RemoteMessage.Builder remoteMessage = RemoteMessage.newBuilder();
remoteMessage.setNextWorkerName(testWorkerId);
RemoteData.Builder remoteData = RemoteData.newBuilder();
remoteData.addDataStrings("test1");
remoteData.addDataStrings("test2");
remoteData.addDataLongs(10);
remoteData.addDataLongs(20);
remoteMessage.setRemoteData(remoteData);
streamObserver.onNext(remoteMessage.build());
streamObserver.onCompleted();
}
Aggregations