Skip to content

Commit

Permalink
Roadblock: admin does not seem to have factory context
Browse files Browse the repository at this point in the history
Signed-off-by: Ashish Banerjee <ashish.banerjee@solo.io>
  • Loading branch information
ashishb-solo committed Jul 31, 2023
1 parent d56efe3 commit d63d342
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
6 changes: 5 additions & 1 deletion api/envoy/config/tap/v3/common.proto
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package envoy.config.tap.v3;

import "envoy/config/common/matcher/v3/matcher.proto";
import "envoy/config/core/v3/base.proto";
import "envoy/config/core/v3/extension.proto";
import "envoy/config/core/v3/grpc_service.proto";
import "envoy/config/route/v3/route_components.proto";

Expand Down Expand Up @@ -183,7 +184,7 @@ message OutputConfig {
}

// Tap output sink configuration.
// [#next-free-field: 6]
// [#next-free-field: 7]
message OutputSink {
option (udpa.annotations.versioning).previous_message_type =
"envoy.service.tap.v2alpha.OutputSink";
Expand Down Expand Up @@ -259,6 +260,9 @@ message OutputSink {
// been configured to receive tap configuration from some other source (e.g., static
// file, XDS, etc.) configuring the buffered admin output type will fail.
BufferedAdminSink buffered_admin = 5;

// Tap output filter will be defined by an extension type
core.v3.TypedExtensionConfig custom_sink = 6;
}
}

Expand Down
16 changes: 16 additions & 0 deletions source/extensions/common/tap/tap.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,22 @@ class Sink {

using SinkPtr = std::unique_ptr<Sink>;

/**
* Abstract tap sink factory. Produces a factory that can instantiate SinkPtr objects
*/
class TapSinkFactory {
public:
virtual ~TapSinkFactory() = default;

/**
* @return a new tap SinkPtr
*/
virtual SinkPtr createSinkPtr(const Protobuf::Message& config,
Server::Configuration::FactoryContext& context) PURE;
};

using TapSinkFactoryPtr = std::unique_ptr<TapSinkFactory>;

/**
* Generic configuration for a tap extension (filter, transport socket, etc.).
*/
Expand Down
12 changes: 12 additions & 0 deletions source/extensions/common/tap/tap_config_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

#include "source/common/common/assert.h"
#include "source/common/common/fmt.h"
#include "source/common/config/utility.h"
#include "source/common/protobuf/utility.h"
#include "source/extensions/common/matcher/matcher.h"

Expand Down Expand Up @@ -86,6 +87,17 @@ TapConfigBaseImpl::TapConfigBaseImpl(const envoy::config::tap::v3::TapConfig& pr
sink_ = std::make_unique<FilePerTapSink>(sinks[0].file_per_tap());
sink_to_use_ = sink_.get();
break;
case envoy::config::tap::v3::OutputSink::OutputSinkTypeCase::kCustomSink:
auto* tap_sink_factory =
Envoy::Config::Utility::getFactory<TapSinkFactory>(sinks[0].custom_sink());
// TapSinkFactory* const tap_sink_factory =
// Registry::FactoryRegistry<TapSinkFactory>::getFactory(sinks[0].custom_sink().typed_config().type_url());
// auto config =
// Config::Utility::translateAnyToFactoryConfig(sinks[0].custom_sink().typed_config(), NULL,
// tap_sink_factory);
tap_sink_factory.createSinkPtr(sinks[0].custom_sink());
PANIC("not implemented");
break;
case envoy::config::tap::v3::OutputSink::OutputSinkTypeCase::kStreamingGrpc:
PANIC("not implemented");
case envoy::config::tap::v3::OutputSink::OutputSinkTypeCase::OUTPUT_SINK_TYPE_NOT_SET:
Expand Down

0 comments on commit d63d342

Please sign in to comment.